Voor de Raspberry Pi zijn camera-modules beschikbaar, maar je hebt dan natuurlijk niet de kwaliteit en mogelijkheden van een digitale camera, zoals een spiegelreflex. Aan de andere kant kun je een dergelijke camera weer niet programmeren. Door nu met de Raspberry Pi je digitale camera te bedienen, kun je eenvoudig veel meer uit je digitale camera halen. We doen dat in dit artikel door een timelapse video te maken. 

Bij een timelapse video maak je een serie foto’s met een bepaalde vaste tussentijd. Die foto’s zet je dan achter elkaar om er een film van te maken. Met gPhoto bedienen we de camera en nemen we zo’n reeks foto’s. Natuurlijk kan dit ook op je PC, maar de Raspberry Pi is compact en zuinig. Als je een lange timelapse maakt van meerdere uren of zelfs dagen, is bovendien je PC niet bezet.

Maak de Rasberry klaar

Wij gebruiken de Raspberry Pi 3 met daarop het standaard Raspbian besturingssysteem. Steek het microSD-kaartje in de PC en download het image bestand. Momenteel is dat 2018-06-27-raspbian-stretch.zip. Pak dit uit en zet het image op het microSD-kaartje. In ons geval is dat het device /dev/mmcblk0 (gebruik bijvoorbeeld het commando lsblk):

sudo dd bs=4M if=2018-06-27-raspbian-stretch.img of=/dev/mmcblk0

Plaats daarna de microSD in de Raspberry Pi en start hem op. De eerste keer stelt Raspbian je nog enkele vragen om de installatie af te ronden. Open tenslotte een terminal via het icoontje linksboven en installeer gphoto2 en ffmpeg:

sudo apt-get install gphoto2 ffmpeg

Met ffmpeg zetten we straks de foto’s om naar video.

Contact met je camera

Voor dit artikel gebruiken we een Nikon D3200 spiegelreflex camera. Controleer allereerst of gPhoto de camera ondersteunt:

gphoto2 –list-cameras | grep D3200

Vervang hierbij D3200 door jouw cameramodel. Mocht je geen resultaat zien, dan heb je waarschijnlijk of een heel oud model of juist de allernieuwste. 

Verbind nu de Raspberry Pi via een USB-kabel met je camera en zet je camera aan. Check daarna of gPhoto je camera daadwerkelijk herkent:

gphoto2 –auto-detect 

Neem de eerste foto

Test nu of je met de Raspberry Pi een foto kunt nemen:

gphoto2 –capture-image

Mogelijk klaagt gPhoto dat hij de USB-poort niet kan claimen. Dan heeft waarschijnlijk de file manager de camera automatisch gemount. Zorg dat in de instellingen van de file manager de auto-mount optie uitgeschakeld is. Zet vervolgens je camera uit en weer aan, en probeer het nogmaals.

De foto staat nu op de camera. Maar let op, afhankelijk van de camera komt de foto in het interne RAM, maar niet op het geheugenkaartje, zoals hier:

gphoto2 –get-config capturetarget
Current: Internal RAM
Choice: 0 Internal RAM
Choice: 1 Memory card

Je ziet bij de regel Current dat het RAM gebruikt wordt. Dit maakt het downloaden sneller, maar als je de camera uitzet, ben je de foto’s kwijt. Om de foto permanent op het geheugenkaartje op te slaan, verander je de configuratie als volgt:

gphoto2 –set-config-index capturetarget=1

Het getal 1 betekent Choice1. Er is overigens nog een andere manier om een foto te nemen:

gphoto2 –trigger-capture

Dit gaat een stuk sneller dan de optie –capture-image, maar functioneert helaas niet op alle camera’s. Als je de foto juist wel meteen wilt downloaden naar de Raspberry, gebruik dan het commando als volgt:

gphoto2 –capture-image-and-download

gPhoto verwijdert hierbij meteen de foto van de camera. Voeg de optie –keep toe om dat te verhinderen.

Achteraf foto’s downloaden

Als je de foto’s op de camera hebt laten staan, kun je ze nog altijd achteraf naar de Raspberry overzetten. Haal een overzicht van de foto’s op je camera op met:

gphoto2 –list-files

Je krijgt per folder te zien welke bestanden op het geheugenkaartje staan. Het nummer voor de bestandsnaam gebruik je om de foto’s te downloaden, bijvoorbeeld:

gphoto2 –get-file 1-10

Hiermee haal je de foto’s 1 tot en met 10 op en verplaats je ze naar de Raspberry. Met de optie –get-all-files download je alle foto’s in één keer.

Je camera instellen

Hierboven zag je al de optie –get-config capturetarget om te bepalen of de foto in het RAM wordt opgeslagen. Een lijst van alle configuratie-opties haal je als volgt op:

gphoto2 –list-config

/main/actions/bulb
/main/actions/autofocusdrive

De beschikbare opties hangen sterk af van de camera. De lijst kan er daardoor bij jou dus heel anders uitzien. Voor de timelapse video is een vaste witbalans aan te raden. Hiermee voorkom je kleurverschuivingen in je video tijdens het verstrijken van de tijd. Controleer die eerst:

gphoto2 –get-config whitebalance

Current: Automatic

Choice: 0 Automatic

Choice: 1 Daylight

Zoals je ziet, staat die nu op automatisch. Zet de witbalans op Daylight:

gphoto2 –set-config-index whitebalance=1

Kijk ook meteen op het display van je camera, waar je ziet dat gPhoto de camera-instelling inderdaad aanpast. Verder willen we geen RAW, maar JPEG-bestanden. Regel dit op dezelfde manier voor de configuratie-optie imagequality.

Time-lapse foto’s maken

Neem nu een serie foto’s:

gphoto2 –capture-image-and-download –frames 6 –interval 10

Je krijgt nu 6 foto’s met een tijdsinterval van 10 seconden. Mocht een bestandsnaam al voorkomen in de download directory, dan vraagt gPhoto wat je wil en blijft wachten tot je een beslissing neemt. Door de optie –force-overwrite overschrijft gPhoto het betreffende bestand en gaat vervolgens verder. Een alternatief is om unieke bestandsnamen te maken met de optie –filename, zoals deze:

–filename frame_%Y-%m-%d@%H:%M:%S.jpg

Nu krijg je bestandsnamen met een timestamp, bijvoorbeeld frame_2018-09-14@16:31:42.jpg.

Een andere methode is door het gebruiken van een cron job, zoals deze om elke dag om 12 uur ‘s middags een foto te nemen:

0 12 * * * cd <download_dir> && gphoto2 –capture-image-and-download

Een cron job is ook handig voor een timelapse van een vroege zonsopkomst zonder dat je je bed uit hoeft.

En combineren tot video

Om de foto’s te verwerken tot het videobestand timelapse.mp4 gebruiken we ffmpeg:

ffmpeg -r 2 -pattern_type glob -i ‘DSC_*.jpg’ -s 1080×752 timelapse.mp4

Elke foto zie je een halve seconde (2 frames per seconde, optie -r) en is verkleind tot 1080 bij 752 pixels (optie -s). De optie –pattern_type zorgt dat ffmpeg het sterretje in de invoer (optie -i) herkent als wildcard.

En verder

Zoals je ziet is het aansturen van je digitale camera met een Raspberry Pi helemaal niet zo moeilijk. Probeer ook eens een reeks foto’s met verschillende sluitertijden voor een HDR-opname. Als je handig bent met scripts, kijk dan eens naar de optie –hook-script om bijvoorbeeld iedere foto meteen veilig te stellen op je NAS of in de cloud.