www.errorediridondanzaciclicodotcom

  • Home
  • raspilapse
  • BACK P.P.
  • timelapse col raspberry

    In questa pagina spiego come ho costruito con il raspi una videocamera per effettuare ogni giorno dei video panoramici in timelapse. Il progetto è nato dopo avere visto le immagini che si possono scaricare dal sito di astrogeo: http://www.astrogeo.va.it Per la costruzione ho seguito fino ad un certo punto quanto riportato sul bellissimo sito di Meteoliri.
    Ho seguito quanto fatto da Rossano Scala fino alla raccolta delle immagini. Poi però ho preferito, a differenza di quanto suggerito da Meteroliri, di non caricare i video su un sito esterno ma di creare sullo stesso raspi un web-server. Fino al sistema di raccolta automatica delle immagini ho seguito quanto suggerito e questo mi ha veramente semplificato la vita anche perchè ero praticamente a digiuno di PHP.

    Partiamo dai materiali:

    - un raspberry pi (nel mio caso B+) con pi cam
    - un
    contenitore stagno per videocamera (FuturaShop)
    - una coppia di iniettori POE

    Qui sotto potete vedere i componenti assemblati. Nella versione definitiva però ho messo il raspi in un contenitore di plastica chiuso per preservarlo da (spero) eventuale condensa. L'ho anche spruzzato, dopo aver mascherato i contatti aperti, con una vernice trasparente apposita.







    come si può vedere ci sono due iniettori della TP-Link, il primo, alimentato, unisce dati e potenza sul cat-5. Il secondo, messo nella videocamera, separa i dati dall'alimentazione, riducendo quest'ultima a 5volt. Questo accorgimento si è reso necessario in quanto il raspberry non è predisposto per accettare il POE (48volt!!).
    Il contenitore stagno è del tipo più semplice ed economico ed è dotato di tre fori per la ventilazione. Volendo, ma si deve portare l'alimentazione, c'è una versione riscaldata ed una anche ventilata.

    Prima di installare i vari script suggeriti da Meteoliri ho preparato il raspi per diventare un web-server. Quindi solita procedura di Apache, Php, Mysql, configurazione Virtual Host, ecc.
    Quando si è finito con il web-server si può passare ad installare i vari .php e .sh per generare i timelapse.
    Come si può vedere dal sito i file necessari sono, prima di tutto, il file scatto1.sh che però nel mio caso ho utilizzato solo per gli scatti diurni.
    Poi c'è il file ridu.php che ho settato per ridurre gli scatti da 1920x1080 a 1280x720.
    Riguardo il file dn.php, che serve a specificare quando iniziare e quando finire le riprese automaticamente (nel file originale serviva a passare dal giorno alla notte), qui sotto c'è il mio script:

    #!/usr/bin/php
    <?php
    $lat=yourlatitude;
    $long=yourlongitude;
    date_default_timezone_set('Europe/yrlocation');
    $uT=time()+3600;
    $sun_info = date_sun_info($uT, $lat,$long);
    $sunrise = $sun_info['civil_twilight_begin']+3600;
    $sunset = $sun_info['civil_twilight_end']+3600;
    $alba = $sunrise;
    $tramonto = $sunset;
    if ($uT>$alba && $uT<$tramonto) echo "1";
    else
    echo "2";
    ?>


    Come si può vedere si deve settare la propria latitudine e longitudine per avere i dati di alba e tramonto del luogo in cui viviamo.
    Poi si deve definire l'ora per la nostra zona. Per questo motivo ho preso la uTime ed ho aggiunto 3600 secondi cioè Greenwich + 1 ora. A questo punto si definisce la sun_info cioè i dati relativi alla posizione del sole per la nostra latitudine. Questo dato fa di nuovo riferimento alla uT. Ora si definisce l'ora dell'alba e del tramonto o meglio l'ora in cui inizia la luce e l'ora in cui finisce. Quindi si setta la "civil_twilight_begin" riferita alla sun_info (cioè a quella data lat e long) e si aggiunge un'ora.
    Per ultimo la condizione if per testare se ci si trova tra le prime luci dell'alba e le ultime luci del tramonto si fa partire gli scatti ogni minuto. In caso contrario (echo2) non fa niente.

    Per verificare quanto messo nello script, ho utilizzato un convertitore. Infatti tutti questi dati sono ottenuti in formato data Unix, un contatore che ha iniziato a girare dal 1.1.1970 e genera un numero progressivo che identifica il momento preciso nel tempo.
    Su questo
    sito potete trovare un convertitore per fare il check di quanto impostato nello script.

    Passiamo ora allo script stillmovie.sh per creare un video timelapse da immagini.

    #!/bin/bash

    dat1x=$(php /var/www/dat1x.php)
    ls /var/www/timelapse/image$dat1x*.jpg > /var/www/timelapse/stills.txt
    mv /var/www/timelapse/stills.txt /var/www/timelapse/stills.$dat1x.txt
    cd /var/www/timelapse
    mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf
    //scale=1280:720 -o /var/www/timelapse/tlcam.avi -mf type=jpeg:fps=24 mf://@stills.$dat1x.txt
    mv /var/www/timelapse/tlcam.avi /var/www/timelapse/video/tlcam$dat1x.avi
    exit 0


    Qui si tratta di uno script bash. In pratica viene inizializzata la variabile dat1x che non è altro che il risultato dello script php dat1x. Si tratta semplicemente della data odierna.
    La riga successiva cerca (con ls) nella directory /var/www/timelapse (non scordiamo che stiamo lavorando in un web server) tutte le immagini che hanno la stessa data di oggi.
    Con il carattere > andiamo a scrivere nel file di testo stills.txt queste immagini. Quindi con mv rinominiamo il file stills.txt in stills."data di oggi".txt per distinguerlo dai giorni seguenti.
    Entriamo ora nella directory /var/www/timelapse e da lì (è importante essere nella stessa directory) lanciamo mencoder che creerà il video timelapse.
    Due cose sul file: ho scelto il .avi codec .mp4 perchè mi è sembrato essere quello più compatibile. Per mia personale scelta preferisco il 16:9 ed ho scalato a 1280x720 (HD) per avere dei video non pesantissimi ma decenti da tenere se particolarmente interessanti. Sui fps=24 potete fare le vostre scelte per avere video più o meno veloci.
    Questo codice crea un generico tlcam.avi che, nella riga successiva, viene nominato tlcam."data di oggi".avi

    A questo punto abbiamo un video timelapse disponibile su un webserver che non ci resta altro che scaricare (ovviamente dovete impostare l'accesso con un dns dinamico se non avete un ip statico).
    Personalmente non ho voluto spendere troppo tempo però ora c'è un problema, noto a tutti, della visualizzazione dei filmati sul browser. In poche parole quando accedete al vostro video via browser (firefox ad es.) non potrete vedere il video in streaming. Non è un problema solo mio, lo assicuro, e lo potete verificare andando in altri siti che offrono timelapse di meteo.
    Semplicemente si tratta di salvare il video sul computer e vederlo successivamente.
    Una piccola nota: provando a scaricare (più di una volta) i miei timelapse sia con una fibra telecom a 28 e passa mbs in down (speedtest costante) sia con il mio eolo 10 mbs (speedtest costante), con la telecom ci vogliono per 35mb circa 5-6 minuti(!), con eolo 15 secondi(!).

    Per ultimo vi spiego come ho automatizzato il tutto, cancellazione dei file obsoleti inclusa.
    Ho utilizzato crontab (che ho scoperto essere utilizzato dalla stessa time machine in osx).
    La prima riga mi prende gli scatti ogni minuto (ovviamente a mia personale scelta) cioè lancia ogni 60 secondi scatto1.sh.
    La riga successiva lancia stillmovie.sh per creare il filmato alle 23 e 26 di ogni giorno.
    A questo punto seguono due righe per fare pulizia ogni tot. Alla 1 ed 1 minuto di tutti i giorni esegue ciò:

    find /var/www/timelapse/*.jpg /var/www/timelapse/*.txt -mtime +3 -delete

    In poche parole cerca i file jpg e txt più vecchi di 3 giorni e li deleta.
    L'ultima riga fa come sopra me ogni 7 giorni per i file .avi.

    Qui sotto uno dei video che ho catturato dalla mia raspicam.