Jonas@pi

Bloggade nörderier.

Intervallfoto 2.0

I förra inlägget berättade jag hur jag och min bror biologen styrde min Raspberry pi-kamera via en webbserver. Nästa steg är att på ett enkelt sätt få den att ta intervallbilder för att skapa en enkel stop-motion-film. Tanken är förstås att kunna placera ut Pi:n på ett lämpligt ställe, kolla att allt ser bra ut genom att ta en bild och sedan sätta igång intervallfotot. För att göra det enklare ska vi också låta Pi:en räkna ut hur många bilder den behöver ta för att skapa en film av en viss längd.

Första steget är att ändra den ursprungliga webbsidan något så att det blir möjligt att ange under vilken tidsperiod kameran ska fotografera och hur lång den slutliga filmen ska bli.

Ungefär så här blir koden till sidan då:

<html><form method="get" action="/cgi-bin/kamera.cgi"><input type="submit" value="Ta bild"></form>
<br><br>
<form method="get" action="/cgi-bin/timelaps.cgi">Film längd: <input type="text" name="film_langd" value="1"min<br>
Inspelnings längd: <input type="text" name="insp_tid" value="1"h<br><input type="submit" value="intervallfoto"></form
</html>

Nästa steg är att se till att det finns ett perl-script som kan hämta värdena som matats in i webbformuläret och be kameran att starta intervallfotot. I exemplet har vi döpt den filen till timelaps.cgi. Koden i filen ser ut så här:

#! /usr/bin/perl
use strict;
print "Content-type: text/html\n\n";
my $film_langd;
my $insp_tid;
if ($ENV{'QUERY_STRING'} =~ /film_langd=([0-9\.]+)/) { $film_langd=$1; }
if ($ENV{'QUERY_STRING'} =~ /insp_tid=([0-9\.]+)/) { $insp_tid=$1; }
print "<html>";
$insp_tid *= 3600000;
my $intervall= $insp_tid/($film_langd*60*24);
print "<p>sudo /usr/bin/raspistill -o \"/var/www/pictures/ivbild%i.jpg\" -t $insp_tid -vf -hf -w 1920 -h 1080 -tl $intervall -n</p>";
system "sudo /usr/bin/raspistill -o \"/var/www/pictures/ivbild%i.jpg\" -t $insp_tid -vf -hf -w 1920 -h 1080 -tl $intervall -n";
print "<p>H&auml;r &aumlr din.</p>";
print '<a href="/pictures/film.h264">film!</a>';
print "</html>";

Koden räknar ut hur många bilder som ska tas för att det ska gå att skapa en film av önskad längd med 24 bilder per sekund. Om man väljer för kort filmtid i förhållande till inspelningstiden blir det problem eftersom kameran inte hinner ta bilderna tillräckligt fort. I praktiken är det dock knappast ett problem.

Jag passade också på att lägga in en knapp för att slå av pi:n när plåtandet är klart. Den koden finns här:

#! /usr/bin/perl 
system "sudo /sbin/shutdown -h now";

Glöm inte att köra chmod +x på alla filerna med kod så att webservern kan starta dem.

Här är resultatet av mitt första test. Jag har använt programmet mencoder för att foga samman bilderna till en film, kolla den här texten om du vill veta hur.

Comments