Pi Camera
Voor het ogenblik wordt nog volop gewerkt aan een nieuwe python bibliotheek voor de Pi Camera. Meer info kan je vinden op: https://www.raspberrypi.com/documentation/accessories/camera.html.
Eén van de leukste accessoires van de Raspberry Pi is het kleine Pi Cameraboard, een kleine printplaat met camerasensor die via een lintkabel verbinding maakt met de Raspberry Pi.
De Pi Camera kan op verschillende manieren gebruikt worden, bijvoorbeeld als time-lapse fotocamera of als webcam. Hij kan echter ook als optische sensor dienen voor een robot die door de Pi wordt aangestuurd. Omdat de camera geen usb-aansluiting heeft en erg weinig energie verbruikt, is hij veelzijdiger in te zetten dan een standaard webcam.
De Pi Camera zelf is overigens geen simpel dingetje - de Pi Camera Module 2 met een 8-megapixel-sensor kan 1080p-videoopnames maken, de Pi Camera Module 3 (12 MP) kan zelfs 4K foto's nemen. De Pi Camera is ook beschikbaar zonder Infrarood filter, waardoor deze ook gevoelig is voor infrarood licht. Handig voor warmtemetingen, nachtopnames, gezichtsherkenning, bewaking, enz.
Camera aansluiten
De Pi Camera module is gevoelig voor statische elektriciteit, deze kan de elektronica beschadigen en de camera onbruikbaar maken. Voor je de Pi Camera aansluit of aanraakt, raak je eerst een geleidend materiaal aan dat niet van de aarde geïsoleerd is, bijvoorbeeld een metalen object zoals een radiator of waterkraan.
Om de camera op de Raspberry Pi aan te sluiten, moet je het slot tussen de audio-uitgang en de HDMI-poort opsporen en de sluiting openen. Steek de lintkabel van het cameraboard hierin met de blauwe strook aan de kant van de audio-uitgang. Zorg ervoor dat de aansluitingen van het lint goed in die van de Pi zitten.
Camera aansluiten op een Raspberry Pi 5
De Raspberry Pi 5 gebruikt kleinere CSI/DSI-connectoren dan de Raspberry Pi 4, dus je hebt een adapterkabel of een module nodig die ontworpen is voor de Raspberry Pi Zero (aangezien de Zero en Pi 5 dezelfde formaat connector gebruiken).
Om de camerakabel te monteren zet je de Raspberry Pi uit, trek je de klem heel voorzichtig omhoog, steek vervolgens de kabel er zo ver mogelijk in en druk tenslotte de klem weer omlaag.
Het belangrijkste is om ervoor te zorgen dat je de kabels op de juiste manier aansluit.
De kleine metalen tanden moeten naar de Ethernet-connector en PoE-pinnen gericht zijn (in de afbeelding hieronder is de clip nog niet vastgezet):
Raspberry Pi OS bijwerken
Voordat we de Raspberry Pi Camera gebruiken, moeten we zeker weten dat de firm- en software helemaal up-to-date zijn. Dat doen we met een snelle software-upgrade. Open hiervoor een terminal en typ het volgende:
pi@raspberrypi:~ $ sudo apt update && sudo apt upgrade -y
Geraakt:1 http://deb.debian.org/debian bookworm InRelease
Geraakt:2 http://deb.debian.org/debian-security bookworm-security InRelease
Ophalen:3 http://deb.debian.org/debian bookworm-updates InRelease [55,4 kB]
Ophalen:4 http://archive.raspberrypi.com/debian bookworm InRelease [23,6 kB]
Ophalen:5 http://archive.raspberrypi.com/debian bookworm/main armhf Packages [419 kB]
Ophalen:6 http://archive.raspberrypi.com/debian bookworm/main arm64 Packages [418 kB]
916 kB opgehaald in 1s (1.249 kB/s)
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar
Alle pakketten zijn up-to-date.
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar
Opwaardering wordt doorgerekend... Klaar
0 opgewaardeerd, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
Nu kunnen we de camera opdrachten installeren:
pi@raspberrypi:~ $ sudo apt install rpicam-apps
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar
rpicam-apps is reeds de nieuwste versie (1.5.0-2).
0 opgewaardeerd, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
M.a.w. de camera opdrachten zijn nu standaard geïnstalleerd.
Foto's nemen
Om foto's met de Raspberry Pi te nemen, hoef je alleen maar het volgende in te voeren:
pi@raspberrypi:~ $ rpicam-still -o Foto.jpg
[0:04:35.479873892] [2264] INFO Camera camera_manager.cpp:313 libcamera v0.3.0+65-6ddd79b5
[0:04:35.487648942] [2272] INFO RPI pisp.cpp:695 libpisp version v1.0.6 b567f0455680 17-06-2024 (10:20:00)
[0:04:35.503556804] [2272] INFO RPI pisp.cpp:1154 Registered camera /base/axi/pcie@120000/rp1/i2c@80000/ov5647@36 to CFE device /dev/media3 and ISP device /dev/media0 using PiSP variant BCM2712_C0
Made X/EGL preview window
[0:04:35.850228761] [2264] WARN V4L2 v4l2_pixelformat.cpp:344 Unsupported V4L2 pixel format RPBP
Mode selection for 1296:972:12:P
SGBRG10_CSI2P,640x480/0 - Score: 3296
SGBRG10_CSI2P,1296x972/0 - Score: 1000
SGBRG10_CSI2P,1920x1080/0 - Score: 1349.67
SGBRG10_CSI2P,2592x1944/0 - Score: 1567
Stream configuration adjusted
[0:04:35.850455381] [2264] INFO Camera camera.cpp:1183 configuring streams: (0) 1296x972-YUV420 (1) 1296x972-GBRG_PISP_COMP1
[0:04:35.850575006] [2272] INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@80000/ov5647@36 - Selected sensor format: 1296x972-SGBRG10_1X10 - Selected CFE format: 1296x972-PC1g
[0:04:40.989829767] [2264] WARN V4L2 v4l2_pixelformat.cpp:344 Unsupported V4L2 pixel format RPBP
Mode selection for 2592:1944:12:P
SGBRG10_CSI2P,640x480/0 - Score: 7832
SGBRG10_CSI2P,1296x972/0 - Score: 5536
SGBRG10_CSI2P,1920x1080/0 - Score: 4238.67
SGBRG10_CSI2P,2592x1944/0 - Score: 1000
Stream configuration adjusted
[0:04:40.990045481] [2264] INFO Camera camera.cpp:1183 configuring streams: (0) 2592x1944-YUV420 (1) 2592x1944-GBRG_PISP_COMP1
[0:04:40.993452197] [2272] INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@80000/ov5647@36 - Selected sensor format: 2592x1944-SGBRG10_1X10 - Selected CFE format: 2592x1944-PC1g
Still capture image received
Je ziet dan gedurende vijf seconden een preview van het beeld van de camera, daarna wordt het laatste frame van het filmpje vastgelegd. Om de handleiding van een opdracht weer te geven, gebruik je de optie --help:
pi@raspberrypi:~ $ rpicam-still --help
Valid options are:
-h [ --help ] [=arg(=1)] (=0) Print this help message
--version [=arg(=1)] (=0) Displays the build version number
--list-cameras [=arg(=1)] (=0) Lists the available cameras attached to the system.
--camera arg (=0) Chooses the camera to use. To list the available indexes, use the
--list-cameras option.
-v [ --verbose ] [=arg(=2)] (=1) Set verbosity level. Level 0 is no output, 1 is default, 2 is verbose.
-c [ --config ] [=arg(=config.txt)] Read the options from a file. If no filename is specified, default to
config.txt. In case of duplicate options, the ones provided on the command line
will be used. Note that the config file must only contain the long form
options.
--info-text arg (=#%frame (%fps fps) exp %exp ag %ag dg %dg)
Sets the information string on the titlebar. Available values:
%frame (frame number)
%fps (framerate)
%exp (shutter speed)
%ag (analogue gain)
%dg (digital gain)
%rg (red colour gain)
%bg (blue colour gain)
%focus (focus FoM value)
%aelock (AE locked status)
%lp (lens position, if known)
%afstate (AF state, if supported)
--width arg (=0) Set the output image width (0 = use default value)
--height arg (=0) Set the output image height (0 = use default value)
-t [ --timeout ] arg (=5sec) Time for which program runs. If no units are provided default to ms.
-o [ --output ] arg Set the output file name
--post-process-file arg Set the file name for configuring the post-processing
--post-process-libs arg Set a custom location for the post-processing library .so files
-n [ --nopreview ] [=arg(=1)] (=0) Do not show a preview window
-p [ --preview ] arg (=0,0,0,0) Set the preview window dimensions, given as x,y,width,height e.g. 0,0,640,480
-f [ --fullscreen ] [=arg(=1)] (=0) Use a fullscreen preview window
--qt-preview [=arg(=1)] (=0) Use Qt-based preview window (WARNING: causes heavy CPU load, fullscreen not
supported)
--hflip [=arg(=1)] (=0) Request a horizontal flip transform
--vflip [=arg(=1)] (=0) Request a vertical flip transform
--rotation arg (=0) Request an image rotation, 0 or 180
--roi arg (=0,0,0,0) Set region of interest (digital zoom) e.g. 0.25,0.25,0.5,0.5
--shutter arg (=0) Set a fixed shutter speed. If no units are provided default to us
--analoggain arg (=0) Set a fixed gain value (synonym for 'gain' option)
--gain arg Set a fixed gain value
--metering arg (=centre) Set the metering mode (centre, spot, average, custom)
--exposure arg (=normal) Set the exposure mode (normal, sport)
--ev arg (=0) Set the EV exposure compensation, where 0 = no change
--awb arg (=auto) Set the AWB mode (auto, incandescent, tungsten, fluorescent, indoor, daylight,
cloudy, custom)
--awbgains arg (=0,0) Set explict red and blue gains (disable the automatic AWB algorithm)
--flush [=arg(=1)] (=0) Flush output data as soon as possible
--wrap arg (=0) When writing multiple output files, reset the counter when it reaches this
number
--brightness arg (=0) Adjust the brightness of the output images, in the range -1.0 to 1.0
--contrast arg (=1) Adjust the contrast of the output image, where 1.0 = normal contrast
--saturation arg (=1) Adjust the colour saturation of the output, where 1.0 = normal and 0.0 =
greyscale
--sharpness arg (=1) Adjust the sharpness of the output image, where 1.0 = normal sharpening
--framerate arg (=-1) Set the fixed framerate for preview and video modes
--denoise arg (=auto) Sets the Denoise operating mode: auto, off, cdn_off, cdn_fast, cdn_hq
--viewfinder-width arg (=0) Width of viewfinder frames from the camera (distinct from the preview window
size
--viewfinder-height arg (=0) Height of viewfinder frames from the camera (distinct from the preview window
size)
--tuning-file arg (=-) Name of camera tuning file to use, omit this option for libcamera default
behaviour
--lores-width arg (=0) Width of low resolution frames (use 0 to omit low resolution stream
--lores-height arg (=0) Height of low resolution frames (use 0 to omit low resolution stream
--mode arg Camera mode as W:H:bit-depth:packing, where packing is P (packed) or U
(unpacked)
--viewfinder-mode arg Camera mode for preview as W:H:bit-depth:packing, where packing is P (packed)
or U (unpacked)
--buffer-count arg (=0) Number of in-flight requests (and buffers) configured for video, raw, and
still.
--viewfinder-buffer-count arg (=0) Number of in-flight requests (and buffers) configured for preview window.
--no-raw [=arg(=1)] (=0) Disable requesting of a RAW stream. Will override any manual mode reqest the
mode choice when setting framerate.
--autofocus-mode arg (=default) Control to set the mode of the AF (autofocus) algorithm.(manual, auto,
continuous)
--autofocus-range arg (=normal) Set the range of focus distances that is scanned.(normal, macro, full)
--autofocus-speed arg (=normal) Control that determines whether the AF algorithm is to move the lens as quickly
as possible or more steadily.(normal, fast)
--autofocus-window arg (=0,0,0,0) Sets AfMetering to AfMeteringWindows an set region used, e.g.
0.25,0.25,0.5,0.5
--lens-position arg Set the lens to a particular focus position, expressed as a reciprocal distance
(0 moves the lens to infinity), or "default" for the hyperfocal distance
--hdr [=arg(=auto)] (=off) Enable High Dynamic Range, where supported. Available values are "off", "auto",
"sensor" for sensor HDR (e.g. for Camera Module 3), "single-exp" for PiSP based
single exposure multiframe HDR
--metadata arg Save captured image metadata to a file or "-" for stdout
--metadata-format arg (=json) Format to save the metadata in, either txt or json (requires --metadata)
--flicker-period arg (=0s) Manual flicker correction period
Set to 10000us to cancel 50Hz flicker.
Set to 8333us to cancel 60Hz flicker.
-q [ --quality ] arg (=93) Set the JPEG quality parameter
-x [ --exif ] arg Add these extra EXIF tags to the output file
--timelapse arg (=0ms) Time interval between timelapse captures. If no units are provided default to
ms.
--framestart arg (=0) Initial frame counter value for timelapse captures
--datetime [=arg(=1)] (=0) Use date format for output file names
--timestamp [=arg(=1)] (=0) Use system timestamps for output file names
--restart arg (=0) Set JPEG restart interval
-k [ --keypress ] [=arg(=1)] (=0) Perform capture when ENTER pressed
-s [ --signal ] [=arg(=1)] (=0) Perform capture when signal received
--thumb arg (=320:240:70) Set thumbnail parameters as width:height:quality, or none
-e [ --encoding ] arg (=jpg) Set the desired output encoding, either jpg, png, rgb/rgb24, rgb48, bmp or
yuv420
-r [ --raw ] [=arg(=1)] (=0) Also save raw file in DNG format
--latest arg Create a symbolic link with this name to most recent saved file
--immediate [=arg(=1)] (=0) Perform first capture immediately, with no preview phase
--autofocus-on-capture [=arg(=1)] (=0)
Switch to AfModeAuto and trigger a scan just before capturing a still
--zsl [=arg(=1)] (=0) Switch to AfModeAuto and trigger a scan just before capturing a still
Zo kom je bijvoorbeeld te weten dat je met de optie -v 0
minder meldingen krijgt, die eigenlijk bestemd zijn voor de ontwikkelaar of bij problemen:
pi@raspberrypi:~ $ rpicam-still -o Foto.jpg -v 0
Video opnemen
Om een filmpje op te nemen, gebruiken we een gelijkaardige opdracht, rpicam-vid, op de volgende manier:
pi@raspberrypi:~ $ rpicam-vid -o Video.h264 -v 0
[libx264 @ 0x5555bea38b20] using cpu capabilities: ARMv8 NEON
[libx264 @ 0x5555bea38b20] profile High, level 3.0, 4:2:0, 8-bit
Output #0, h264, to 'Video.h264':
Stream #0:0: Video: h264, yuv420p(tv, smpte170m/smpte170m/bt709), 640x480, q=2-31, 30 fps, 30 tbr, 1000k tbn
[libx264 @ 0x5555bea38b20] frame I:5 Avg QP:15.25 size: 27712
[libx264 @ 0x5555bea38b20] frame P:85 Avg QP:16.98 size: 3760
[libx264 @ 0x5555bea38b20] frame B:60 Avg QP:18.42 size: 598
[libx264 @ 0x5555bea38b20] consecutive B-frames: 20.0% 80.0%
[libx264 @ 0x5555bea38b20] mb I I16..4: 10.2% 37.6% 52.2%
[libx264 @ 0x5555bea38b20] mb P I16..4: 2.2% 4.1% 0.9% P16..4: 46.3% 0.0% 0.0% 0.0% 0.0% skip:46.5%
[libx264 @ 0x5555bea38b20] mb B I16..4: 0.3% 0.7% 0.1% B16..8: 7.7% 0.0% 0.0% direct: 9.8% skip:81.3% L0:23.2% L1:74.9% BI: 1.9%
[libx264 @ 0x5555bea38b20] 8x8 transform intra:48.8% inter:34.6%
[libx264 @ 0x5555bea38b20] coded y,uvDC,uvAC intra: 70.9% 69.7% 41.1% inter: 10.7% 17.3% 0.4%
[libx264 @ 0x5555bea38b20] i16 v,h,dc,p: 52% 13% 17% 17%
[libx264 @ 0x5555bea38b20] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 14% 28% 3% 12% 8% 6% 4% 7%
[libx264 @ 0x5555bea38b20] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 34% 23% 14% 3% 6% 5% 5% 4% 7%
[libx264 @ 0x5555bea38b20] i8c dc,h,v,p: 36% 24% 25% 15%
[libx264 @ 0x5555bea38b20] kb/s:839.08
Standaard wordt daarmee ook vijf seconden aan video opgenomen. De video speel je af met:
pi@raspberrypi:~ $ ffplay -autoexit Video.h264
ffplay version 5.1.5-0+rpt1+deb12u1 Copyright (c) 2003-2024 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=0+rpt1+deb12u1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-mmal --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sand --enable-sdl2 --disable-sndio --enable-libjxl --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, h264, from 'Video.h264': 0KB vq= 0KB sq= 0B f=0/0
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (High), yuv420p(tv, smpte170m/smpte170m/bt709, progressive), 640x480, 1000k tbr, 1200k tbn
nan M-V: nan fd= 72 aq= 0KB vq= 0KB sq= 0B f=0/0
De foto's en video's worden standaard in de thuismap van de Pi gebruiker opgeslagen. Start in de grafische omgeving van de Pi de Bestandsbeheerder en dubbelklik op de foto om deze weer te geven. De standaard mediaspeler (VLC), speelt de video Video.h264 zonder problemen af. Voor sommige mediaspelers, moet je deze eerst converteren naar een MP4 bestand (mp4 bepaalt hoe de video in het bestand is opgenomen, h264 is de manier waarop is gecodeerd).
Video streamen
Je kunt de videobeelden ook streamen over een netwerk naar een programma op een ander apparaat. Start daarvoor de volgende opdracht:
pi@raspberrypi:~ $ rpicam-vid -t 0 --codec mjpeg --inline --listen -o tcp://0.0.0.0:8080 -v 0
Start VLC Media Player op en start in het menu Media de opdracht Netwerkstream openen...
Geef als netwerk-url tcp/mjpeg://raspberrypi.local:8080
op en klik op de knop Afspelen.
Vervang daarbij raspberrypy.local
door de hostname of het IP adres van jouw eigen Raspberry Pi.
Indien je VLC op de Raspberry Pi zelf gebruikt, staat het afspeelvenster van VLC achter het venster met de voorvertoning van de camera.
Stop je het afspelen, dan wordt automatisch het streamen gestopt.
Je kunt dit ook testen in een tweede terminal met de opdracht:
pi@raspberrypi:~ $ ffplay tcp://raspberrypi.local:8080 -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop -hide_banner -loglevel error
Programmeren
Als je wat meer met de Pi Camera wilt doen, kan je gebruik maken van Bash scripts.
Voorvertoning
Zorg dat je grafisch op de Raspberry Pi kunt werken (VNC, RDP of fysiek aangesloten op toetsenbord, muis en scherm). Start via het Menu in de groep Programmeren de applicatie Geany.
Geany start steeds met de programmabestanden waaraan je werkte.
Bij de eerste start, krijg je automatisch een nieuw bestand.
Elk nieuw programma dat je schrijft, sla je eerst op via het menu Bestand en de opdracht Opslaan als....
Geef jouw programma de naam camera.sh
.
Om een voorvertoning 10 seconden op het scherm te bekijken, typ de volgende programmacode:
timeout=10
preview="0,50,640,360"
rpicam-hello -t $((timeout*1000)) -p $preview
De eerste regel is steeds een Shebang en deze bevat het programma die het script moet uitvoeren, in ons geval /bin/bash.
De variabele timeout
zorgt dat de voorvertoning 10 seconden actief blijft.
De variable preview
bepaalt waar het venster met de voorvertoning op het scherm zal verschijnen, tegen de linkerkant (0), 50 beeldpunten van boven, 640 beeldpunten breed en 360 beeldpunten hoog.
Variabelen zorgen ervoor dat de programmacode duidelijker is en eenvoudig kan aangepast worden.
Zo heeft de opdracht rpicam-hello de activiteitsduur in milliseconden nodig, we berekenen deze met $((timeout*1000))
waarbij alles wat tussen dubbele haken staat wordt berekend (* staat voor vermenigvuldigen).
Het $
-teken zorgt dat de variabelen timeout
en preview
gebruikt worden en deze woorden niet als opdracht worden uitgevoerd.
Sla de programmacode op met de sneltoets Ctrl+s
Om een script in Raspberry Pi OS (Linux) te kunnen starten, moet je het één keer uitvoerrechten geven. Je geeft het script uitvoerrechten door in de terminal de volgende opdracht uit te voeren:
pi@raspberrypi:~ $ chmod +x camera.sh
En start in Geany het programma met F5.
Ondertussen heb je waarschijnlijk gemerkt dat het venster niet correct gepositioneerd is, dit is te wijten aan de nieuwe grafische omgeving van de Raspberry Pi. De grafische omgeving bepaald nu waar vensters terecht komen, niet de programma's of scripts.
Praktijk opdracht
Opgelet, de programmacode in de opgaven is niet volledig. Enkel de relevante code wordt getoond. M.a.w. indien jouw script niet werkt, controleer het dan grondig en pas het aan tot het werkt.
- Als het beeld ondersteboven staat, kan je het beeld draaien door een variabele toe te voegen en de opdracht aan te passen:
rotation=180
Test dit. Je kunt het beeld 180 graden roteren, of terug standaard zetten met 0.
rpicam-hello -p $preview --rotation $rotation - Afhankelijk van de snelheid waarmee de lichtsensoren van Pi Camera klaar zijn om een foto te nemen, kan je de wachttijd sterk inkorten:
output="Desktop/Foto.jpg"
De
rpicam-still --nopreview -o $outputoutput
variabele, samen met de-o
optie bij de rpicam-still opdracht zorgen dat de foto wordt opgeslagen op het bureaublad (Desktop map). De--nopreview
toont geen voorvertoning waardoor de foto wordt aangemaakt vanaf het moment dat de sensor klaar is. De foto kan je openen door er dubbel op te klikken. - Om een foto met een bepaalde resolutie te nemen, gebruiken we de opties
--width
en--height
en bijpassende variabelen. Voor een foto met een resolutie van 1280x720 pas je het script aan:width=1280
height=720
rpicam-still -p $preview -o $output --width $width --height $height - Zonder de opties
--width
en--height
maakt rpicam-still foto's met de maximale resolutie van de Pi Camera. Pas het script aan:output="Desktop/Max.jpg"
Open de pas aangemaakte foto en noteer de resolutie van jouw camera: .........x......... (zie zijbalk).
rpicam-still -p $preview -o $output - Pas het script nu zelf aan om een miniatuur afbeelding te maken met een resolutie van 64x64 en sla deze op het bureaublad op met de naam Min.jpg
- Wil je de foto in een niet verlieslatend formaat opslaan om deze later zonder kwaliteitsverlies te bewerken, sla je de foto op in het PNG formaat.
Pas daarvoor het script als volgt aan:
output="Desktop/Foto.png"
encoding="png"
rpicam-still -p $preview -o $output -e $encoding - Met een lus kan je vijf foto's na elkaar nemen:
for i in {1..5}
De variabele
do
output=$(printf "Desktop/Foto%0*d.jpg" 2 $i)
rpicam-still -p $preview -o $output
donei
bevat het huidige lusnummer, van 1 tot en met 5, de foto's worden dus opgeslagen als Foto01.jpg, Foto02.jpg en zo verder. Deoutput
variabele wordt telkens aangemaakt op basis van het huidige lusnummer$i
en moet steeds uit2
cijfers bestaan. Daar zorgt%0*d
voor. Probeer dit uit. - Nu je foto's kunt nemen, is het tijd om te kijken hoe je video's maakt.
Terug willen we de resolutie beperken tot 1280x720, een compromis tussen kwaliteit en opslagruimte (eveneens de Youtube standaard resolutie):
width=1280
Test het programmma waarbij 10 seconden video wordt opgenomen. Test of je de opgenomen video kunt afspelen.
height=720
timeout=10
output="Desktop/Video.h264"
rpicam-vid -t $((timeout*1000)) -o $output --width $width --height $height - Om tekst aan een foto toe te voegen, gaan we de hulp inroepen van de beeldbewerker ImageMagick.
Installeer ImageMagick met de opdracht:
pi@raspberrypi:~ $
sudo apt install imagemagick
Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd... Klaar De statusinformatie wordt gelezen... Klaar De volgende extra pakketten zullen geïnstalleerd worden: imagemagick-6.q16 libnetpbm11 netpbm Voorgestelde pakketten: imagemagick-doc autotrace cups-bsd | lpr | lprng enscript gimp gnuplot grads graphviz hp2xx html2ps libwmf-bin mplayer povray radiance texlive-base-bin transfig ufraw-batch De volgende NIEUWE pakketten zullen geïnstalleerd worden: imagemagick imagemagick-6.q16 libnetpbm11 netpbm 0 opgewaardeerd, 4 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd. Er moeten 2.615 kB aan archieven opgehaald worden. Na deze bewerking zal er 26,7 MB extra schijfruimte gebruikt worden. Wilt u doorgaan? [J/n] Ophalen:1 http://deb.debian.org/debian bookworm/main arm64 imagemagick-6.q16 arm64 8:6.9.11.60+dfsg-1.6+deb12u1 [340 kB] Ophalen:2 http://deb.debian.org/debian bookworm/main arm64 imagemagick arm64 8:6.9.11.60+dfsg-1.6+deb12u1 [122 kB] Ophalen:3 http://deb.debian.org/debian bookworm/main arm64 libnetpbm11 arm64 2:11.01.00-2 [167 kB] Ophalen:4 http://deb.debian.org/debian bookworm/main arm64 netpbm arm64 2:11.01.00-2 [1.986 kB] 2.615 kB opgehaald in 0s (6.801 kB/s) Voorheen niet geselecteerd pakket imagemagick-6.q16 wordt geselecteerd. (Database wordt ingelezen ... 147905 bestanden en mappen momenteel geïnstalleerd.) Uitpakken van .../imagemagick-6.q16_8%3a6.9.11.60+dfsg-1.6+deb12u1_arm64.deb wordt voorbereid... Bezig met uitpakken van imagemagick-6.q16 (8:6.9.11.60+dfsg-1.6+deb12u1) ... ... Voorheen niet geselecteerd pakket netpbm wordt geselecteerd. Uitpakken van .../netpbm_2%3a11.01.00-2_arm64.deb wordt voorbereid... Bezig met uitpakken van netpbm (2:11.01.00-2) ... Instellen van libnetpbm11:arm64 (2:11.01.00-2) ... Instellen van netpbm (2:11.01.00-2) ... Instellen van imagemagick-6.q16 (8:6.9.11.60+dfsg-1.6+deb12u1) ... update-alternatives: /usr/bin/compare-im6.q16 wordt gebruikt om in de automatische modus in /usr/bin/compare (compare) te voorzien update-alternatives: /usr/bin/compare-im6.q16 wordt gebruikt om in de automatische modus in /usr/bin/compare-im6 (compare-im6) te voorzien update-alternatives: /usr/bin/animate-im6.q16 wordt gebruikt om in de automatische modus in /usr/bin/animate (animate) te voorzien ... update-alternatives: /usr/bin/montage-im6.q16 wordt gebruikt om in de automatische modus in /usr/bin/montage-im6 (montage-im6) te voorzien update-alternatives: /usr/bin/mogrify-im6.q16 wordt gebruikt om in de automatische modus in /usr/bin/mogrify (mogrify) te voorzien update-alternatives: /usr/bin/mogrify-im6.q16 wordt gebruikt om in de automatische modus in /usr/bin/mogrify-im6 (mogrify-im6) te voorzien Instellen van imagemagick (8:6.9.11.60+dfsg-1.6+deb12u1) ... Bezig met afhandelen van triggers voor desktop-file-utils (0.26-1) ... Bezig met afhandelen van triggers voor hicolor-icon-theme (0.17-2) ... Bezig met afhandelen van triggers voor gnome-menus (3.36.0-1.1) ... Bezig met afhandelen van triggers voor libc-bin (2.36-9+rpt2+deb12u7) ... Bezig met afhandelen van triggers voor man-db (2.11.2-2) ... Bezig met afhandelen van triggers voor mailcap (3.70+nmu1) ... - We kunnen een foto nu voorzien van een tekst door deze na te bewerken met convert, een opdracht van het pakket ImageMagick.
Probeer het volgende:
output="Desktop/Tekst.jpg"
De tekst wordt in het midden bovenaan de foto geplaatst (
rpicam-still -p $preview -o $output
convert $output -gravity North -pointsize 90 -undercolor "rgba(0,0,0,0.5)" -fill yellow -annotate +0+0 ' Pi Camera ' $output-gravity North
). De lettergrootte bedraagt 90 (-pointsize 90
). Met een halfdoorzichtie zwarte achtergrond (-undercolor "rgba(0,0,0,0.5)"
). En een opvallende gele tekstkleur (-fill yellow
). De tekst op de foto wordt "Pi Camera" (-annotate +0+0 ' Pi Camera '
. Je kunt zelf de mogelijkheden ontdekken in de handleiding op het internet. - Je kunt de helderheid instellen van -1.0 (minimale helderheid) tot 1.0 (maximale helderheid).
Standaard wordt 0 gebruikt.
Neem een foto met de volgende helderheid:
output="Desktop/Overbelicht.jpg"
brightness=0.5
rpicam-still -p $preview -o $output --brightness $brightness - Om een overzicht te krijgen van de helderheidsinstelling nemen we die op in een lus.
We maken dus een foto's met verschillende helderheidsinstellingen (telkens met 0.2 hogere helderheid) en plaatsen deze in de map PiCamera op het Bureaublad.
Daarna maken we van de foto's een film met ffmpeg waarbij de foto's in elkaar overvloeien om deze uiteindelijk af te spelen:
directory="Desktop/PiCamera"
mkdir -p $directory
filenr=0
for i in $(LC_ALL="en_US.UTF-8" seq -1 0.2 1)
do
output=$(printf "$directory/Foto%0*d.jpg" 3 $filenr)
filenr=$((filenr + 1))
rpicam-still --brightness $i -t 1000 -o $output --nopreview
done
duration=0 #duration in seconds
crossfadeDuration=1 #crossfade duration in seconds
width=640
height=360
videooutput="$directory/PiCamera.mp4"
ffmpeg -y -i $directory/Foto%3d.jpg -vf zoompan=d=$(((duration+crossfadeDuration)/crossfadeDuration)):s=${width}x$height:fps=$((1/crossfadeDuration)),framerate=25:interp_start=0:interp_end=255:scene=100 -c:v mpeg4 -maxrate 5M -q:v 2 $videooutput
ffplay -autoexit $videooutput - Probeer iets gelijkaardigs voor het contrast (regelbaar vanaf 0 = weinig contrast over 1 = standaard contrast en meer):
- Pas daarvoor de lus aan zodat deze telt van 0 tot 2 in stapjes van 0.2.
- Vervang in de rpicam-still opdracht de brightness optie door de contrast optie.
- Je kunt ook nabewerken met rpicam zelf.
Daarvoor gebruik je een configuratiebestand met de bewerkingen (en de volgorde waarin) die uitgevoerd moeten worden.
M.a.w. je kunt combineren.
De configuratie voor de nabewerking (postProcess) definiëren we eerst in een variabele die bestaat uit meerdere regels (Heredoc).
Zo'n variabele begint en eindigt steeds met hetzelfde stopwoord (in ons geval EOF).
Deze variabele schrijven we dan weg naar een tijdelijk bestand (postProcess.json) waardoor het beschikbaar wordt voor de opdracht rpicam-hello.
Onderstaand voorbeeld zorgt voor een negatief beeld:
negate=$(cat << EOF
{
"negate":
{
}
}
EOF
)
echo $negate > postProcess.json
rpicam-hello --post-process-file postProcess.json - Een complexere nabewerking, is DRC (Dynamic Range Compression)..
Om het verschil beter te kunnen beoordelen, maken we een twee foto's: één met HDR nabewerking en één zonder.
Daarna laten we beide foto's op het scherm weergeven om ze te vergelijken:
drc=$(cat << EOF
De opdrachten om de foto's weer te geven, staan tussen haken en eindigen op & zodat het script verder kan werken zonder dat Eye Of Mate voltooid (afgesloten) is. M.a.w. multitasking.
{
"hdr" :
{
"num_frames" : 1,
"lp_filter_strength" : 0.2,
"lp_filter_threshold" : [ 0, 10.0 , 2048, 205.0, 4095, 205.0 ],
"global_tonemap_points" :
[
{ "q": 0.1, "width": 0.05, "target": 0.15, "max_up": 1.5, "max_down": 0.7 },
{ "q": 0.5, "width": 0.05, "target": 0.5, "max_up": 1.5, "max_down": 0.7 },
{ "q": 0.8, "width": 0.05, "target": 0.8, "max_up": 1.5, "max_down": 0.7 }
],
"global_tonemap_strength" : 1.0,
"local_pos_strength" : [ 0, 6.0, 1024, 2.0, 4095, 2.0 ],
"local_neg_strength" : [ 0, 4.0, 1024, 1.5, 4095, 1.5 ],
"local_tonemap_strength" : 1.0,
"local_colour_scale" : 0.9
}
}
EOF
)
echo $drc > postProcess.json
output="Desktop/DRC.jpg"
rpicam-still -o $output --post-process-file postProcess.json --nopreview
(eom $output) &
output="Desktop/Foto.jpg"
rpicam-still -o $output --nopreview
(eom $output) & - HDR en DRC worden dikwijls verward en de termen worden regelmatig door elkaar gebruikt.
Maar wat is nu het verschil, we bepalen dit door de vorige nabewerking te vervangen door:
hdr=$(cat << EOF
Pas het script aan waar nodig en zorg ervoor dat ook de reeds aangemaakte DRC foto wordt weergeven.
{
"hdr" :
{
"num_frames" : 8,
"lp_filter_strength" : 0.2,
"lp_filter_threshold" : [ 0, 10.0 , 2048, 205.0, 4095, 205.0 ],
"global_tonemap_points" :
[
{ "q": 0.1, "width": 0.05, "target": 0.15, "max_up": 5.0, "max_down": 0.5 },
{ "q": 0.5, "width": 0.05, "target": 0.45, "max_up": 5.0, "max_down": 0.5 },
{ "q": 0.8, "width": 0.05, "target": 0.7, "max_up": 5.0, "max_down": 0.5 }
],
"global_tonemap_strength" : 1.0,
"local_pos_strength" : [ 0, 6.0, 1024, 2.0, 4095, 2.0 ],
"local_neg_strength" : [ 0, 4.0, 1024, 1.5, 4095, 1.5 ],
"local_tonemap_strength" : 1.0,
"local_colour_scale" : 0.8
}
}
EOF
)
echo $hdr > postProcess.json
output="Desktop/HDR.jpg" - Nog een leuke toepassing is bewegingsdetectie:
timeout=15
De instelling
motion=$(cat << EOF
{
"motion_detect" :
{
"roi_x" : 0.1,
"roi_y" : 0.1,
"roi_width" : 0.8,
"roi_height" : 0.8,
"difference_m" : 0.1,
"difference_c" : 10,
"region_threshold" : 0.005,
"frame_period" : 5,
"hskip" : 2,
"vskip" : 2,
"verbose" : 1
}
}
EOF
)
echo $motion > postProcess.json
rpicam-hello -t $((timeout*1000)) --lores-width 128 --lores-height 96 --post-process-file postProcess.json"verbose" : 1
zorgt ervoor dat er in de terminal meldingen verschijnen. Daar bewegingsdetectie zeer intensief gebruik maakt van de rekenkracht van de processor gebruiken we lage resolutiebeelden (128x96). Lage resolutiebeelden volstaan om beweging te detecteren (vergelijk met dieren met een op beweging gespecialiseerd zicht). - Sommige foto-toepassingen vergen een aangepaste sluitertijd (exposure).
Zo kan je enkel snelle bewegingen, zoals in de sport, enkel goed fotograferen met een korte sluitertijd.
Nachtbeelden van statische scenes hebben een lange sluitertijd nodig.
De witbalans (hoeveelheid opgevangen licht) wordt daarbij automatisch gecorrigeerd.
Er zijn 3 vooringestelde sluitertijden:
normal
,sport
enlong
. Om deze sluitertijden te beoordelen, gebruiken we terug een lus, maar deze keer met termen:exposures=("normal" "sport" "long")
for exposure in ${exposures[@]};
do
output="Desktop/$exposure.jpg"
rpicam-still -o $output --exposure $exposure --nopreview
(eom $output) &
done - Programmeer zelf een lus om de verschillende voorgeprogrammeerde witbalansen te beoordelen.
De beschikbare
--awb
rpicam opties zijn:auto
,incandescent
,tungsten
,fluorescent
,indoor
,daylight
,cloudy
. - Alle mogelijkheden van de rpicam vind je terug in de documentatie op internet.
- Schakel de Raspberry Pi uit.
- Gebruik het experimenteerbord en draadverbindingen om een drukknop op de Pi aan te sluiten.
De 0,1µF condensator dient enkel om de schakelaar te ontstoren (dender) en is optioneel:
- Start de Raspberry Pi terug.
- Gpio (General Purpose In/Out) is de dubbele rij aansluitingen op de Raspberry Pi waarop je verschillende in- en uitvoerapparaten kunt aansluiten.
In ons geval een drukknop (invoerapparaat).
Een GPIO pin kan twee toestanden hebben: 0 (low) indien deze dezelfde spanning heeft als massa (ground) of 1 (high) als er een spanning van +3,3 volt t.o.v de massa op staat.
Aangezien we de drukknop gebruiken om de pin kort te sluiten naar massa, geven we GPIO pin standaard een spanning van 3,3 volt (Pull Up).
We configureren GPIO 8 als ingang met een spanning van 3,3 volt met de opdracht
pinctrl set 8 ip pu
. De toestand van de GPIO 8 lees je in met de opdrachtpinctrl get 8
. Het script bevat commentaarregels (beginnen met #) met uitleg:#!/bin/bash
preview="0,50,640,360"
width=1280
height=720
output="Desktop/Afdrukken.jpg"
# Drukknop is aangesloten op GPIO 8 en massa
buttonPin=8
# Gebruikte GPIO pin wordt als ingang gebruikt en krijgt standaard 3,3 volt toegewezen (Pull Up)
pinctrl set $buttonPin ip pu
# Start de voorvertoning met instructies in de titelbalk.
helloInfo="Druk op de knop om een foto te maken"
(rpicam-hello -t 0 -p $preview --width $width --height $height --info-text "$helloInfo") &
# Start van de oneindige lus
while true; do
# Lees de toestand van de gebruikte GPIO pin in
button=$(pinctrl get $buttonPin)
if [[ $button == *"lo"* ]]; then # Drukknop ingedrukt dan
# Stop de voorvertoning
killall rpicam-hello
# Neem de foto met instructies in de titelbalk.
fotoInfo="De foto wordt voorbereid... en aangemaakt..."
rpicam-still -o $output -p $preview --width $width --height $height --info-text "$fotoInfo"
# Verlaat de oneindige lus
break
fi
done - Wil je zelf op de foto staan, dan moet er na het afdrukken 3 seconden wachttijd ingesteld worden.
Dit kan door voor het nemen van de foto de opdracht
sleep 3
te plaatsen. Zorg er wel voor dat de voorvertoning tijdens de 3 seconden blijft staan, anders sta je misschien niet op de foto! - Door afzonderlijke foto's van licht aangepaste situaties in een video op te nemen, maak je een stop motion animatie.
Pas de programmacode aan zodat bij elke druk op de drukknop een nieuwe foto wordt gemaakt:
#!/bin/bash
De
preview="0,50,640,360"
width=1280
height=720
# Bash instellen om te reageren op een toetsaanslag
# Let op: dit werkt alleen als het terminalvenster waarin het script gestart is actief is, m.a.w op de voorgrond staat.
if [ -t 0 ]; then
SAVED_STTY="`stty --save`"
stty -echo -icanon -icrnl time 0 min 0
fi
keypress=''
# Alle foto's komen terecht in deze reeds aangemaakte map
directory="Desktop/PiCamera"
# Maak de doelmap leeg
rm $directory/*
# Drukknop is aangesloten op GPIO 8 en massa
buttonPin=8
# Gebruikte GPIO wordt als ingang gebruikt en krijgt standaard 3,3 volt toegewezen (Pull Up)
pinctrl set $buttonPin ip pu
# Zet de foto teller op 0
count=0
fotoInfo="De foto wordt voorbereid... en aangemaakt..."
# Start de voorvertoning
helloInfo="Druk op de knop om een foto te maken"
(rpicam-hello -t 0 -p $preview --width $width --height $height --info-text "$helloInfo") &
# Bij het indrukken van een toets wordt de lus onderbroken
while [ "x$keypress" = "x" ]; do
# Lees de toestand van de gebruikte GPIO pin in
button=$(pinctrl get $buttonPin)
if [[ $button == *"lo"* ]]; then # Drukknop ingedrukt
# Stel de bestandnaam van de foto samen
output=$(printf "$directory/Foto%0*d.jpg" 3 $count)
# Stop de voorvertoning
killall rpicam-hello
# Neem de foto
rpicam-still -o $output -p $preview --width $width --height $height --info-text "$fotoInfo"
echo "De terminal blijft 5 seconden actief om de opnames te stoppen met een druk op een toets en de Stop Motion video aan te maken."
sleep 5
# Herstel de voorvertoning
(rpicam-hello -t 0 -p $preview --width $width --height $height --info-text "$helloInfo") &
# Verhoog de foto teller
count=$((count + 1))
fi
# Controleer of er een toets werd ingedrukt
keypress=$(cat -v)
done
# Stop de voorvertoning
killall rpicam-hello
# Bash terug herstellen om tekst in te kunnen typen
if [ -t 0 ]; then stty "$SAVED_STTY"; fi
# De bestandnaam van de aan te maken video
videooutput="$directory/PiCamera.mp4"
# Maak de Stop motion video aan
ffmpeg -r 10 -i $directory/Foto%03d.jpg $videooutput
# Speel de Stop motion video af
ffplay -autoexit $videooutputwhile
lus stopt enkel bij het drukken op een toets. Dit werkt echter alleen als het script toetsenbordinformatie kan ontvangen (focus). Dus het Terminal-venster moet actief zijn (focus geven) om het script met een toets te stoppen.Foto%0*d.jpg" 3 $count
zal elke foto opslaan met de naam Foto gevolgd door 3 cijfers met voorloopnullen: 001, 002, 003, enz. Daardoor kunnen ze eenvoudig in de juiste volgorde in de video opgenomen worden. Maak ten minste 25 foto's voor een korte stop motion video met allerhande materiaal (gebruik je fantasie). Wie thuis nog LEGO of ander oud speelgoed heeft, kan ook daarmee artistiek aan de slag. Je kunt de beeldfrequentie aanpassen via-r 10
(hier 10 beelden per seconde). - Sluit een USB webcam aan en zoek uit hoe je die met de opdracht fswebcam kunt gebruiken.
Ziehier wat extra informatie:
- Eerst installeren we fswebcam:
pi@raspberrypi:~ $
sudo apt install fswebcam
Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd... Klaar De statusinformatie wordt gelezen... Klaar De volgende NIEUWE pakketten zullen geïnstalleerd worden: fswebcam 0 opgewaardeerd, 1 nieuw geïnstalleerd, 0 te verwijderen en 21 niet opgewaardeerd. Er moeten 45,7 kB aan archieven opgehaald worden. Na deze bewerking zal er 126 kB extra schijfruimte gebruikt worden. Ophalen:1 http://deb.debian.org/debian bookworm/main arm64 fswebcam arm64 20140113-2 [45,7 kB] 45,7 kB opgehaald in 0s (1.134 kB/s) Voorheen niet geselecteerd pakket fswebcam wordt geselecteerd. (Database wordt ingelezen ... 148754 bestanden en mappen momenteel geïnstalleerd.) Uitpakken van .../fswebcam_20140113-2_arm64.deb wordt voorbereid... Bezig met uitpakken van fswebcam (20140113-2) ... Instellen van fswebcam (20140113-2) ... Bezig met afhandelen van triggers voor man-db (2.11.2-2) ... - Daarna moeten we de gebruiker (hier pi) toegang geven tot het videosysteem:
pi@raspberrypi:~ $
Dit controleren we met de volgende opdracht:sudo usermod -a -G video pi
pi@raspberrypi:~ $
Om zeker te zijn dat de mogelijkheden van de gebruiker uitgebreid werden, herstart je de Raspberry Pi.groups
pi adm dialout cdrom sudo audio video plugdev games users input render netdev lpadmin gpio i2c spi - Controleer of de webcam door Raspberry Pi OS werd herkend:
pi@raspberrypi:~ $
Hieruit blijkt dat de webcam via de apparaatbestanden /dev/video8, /dev/video9 en /dev/media4 bereikbaar is. Elk apparaatbestand heeft echter zijn eigen functie, zo zal één apparaat instaan voor de beelden en een ander voor de webcam microfoon geluiden en één voor de bediening (instellingen). Dit ga je proefondervindelijk moeten vaststellen.v4l2-ctl --list-devices
pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media0 /dev/media1 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media2 rpivid (platform:rpivid): /dev/video19 /dev/media3 USB 2.0 Camera: HD 720P Webcam (usb-xhci-hcd.0-2): /dev/video8 /dev/video9 /dev/media4 - Met de volgende opdracht maak je een foto met de webcam:
pi@raspberrypi:~ $
Daarbij zorgt de optiefswebcam --skip 5 -r 1280x720 --device /dev/video8 image.jpg
--- Opening /dev/video8... Trying source module v4l2... /dev/video8 opened. No input was specified, using the first. --- Capturing frame... Skipping 5 frames... Capturing 1 frames... Captured 6 frames in 0.20 seconds. (30 fps) --- Processing captured image... Writing JPEG image to 'image.jpg'.--skip 5
dat pas de zesde foto wordt opgeslagen. Dit geeft de tijd aan de webcam om de sensor klaar te maken voor een goede foto. Je kunt deze waarde aanpassen om betere resultaten te bekomen.
De optie-r 1280x720
stelt de resolutie in op 1280x720.
Het te gebruiken apparaatbestand stel je in met de optie--device /dev/video8
. Pas dit proefondervindelijk aan tot het werkt. - Zorg dat een eerder gemaakt script werkt met de USB webcam.
- Eerst installeren we fswebcam:
- Misschien heb je tijdens deze les inspiratie gekregen om zelf een eigen toepassing te schrijven. Niemand houdt je tegen.
- Wie een kant en klare toepassing wil, kan eens kijken naar RaspiCam.