Stream di immagini dalla webcam ogni minuto con GNU/Linux
Attenzione
Questo articolo è stato pubblicato più di un anno fa, potrebbero esserci stati sviluppi.
Ti preghiamo di tenerne conto.
Di recente mi è stato chiesto come si potesse fare per organizzare uno stream webcam che dovesse controllare le condizioni meteo di una data zona. Le immagini dello stream devono poi essere piazzate in una pagina dedicata di un sito. Purtroppo (o per fortuna) mi sono dovuto scontrare con un grosso problema che all’inizio mi pareva insormontabile: la webcam è collegata in locale, il server su cui risiede il sito è remoto.
Questo piccolo particolare stava per farmi desistere, quando mi sono ricordato dell’esistenza di “Curlftpfs” (ci cui abbiamo già parlato) per montare l’FTP remoto visto dal sistema come se fosse una risorsa locale. Una vera manna dal cielo.
Il resto è stato facile. Il software utilizzato è “Curlftpfs“, “Crontab“, “Streamer“. Per semplicità ho organizzato lo stream in modo che l’immagine venisse sovrascritta da quella nuova ogni minuto. In questo modo salviamo le risorse del server, anche se non riusciremo a tenere una traccia storica dei movimenti di fronte alla webcam. Ripeto che si tratta di una webcam piazzata per scopi meteorologici, sicuramente questa procedura non è utile per il telecontrollo.
Di seguito elenco i passaggi più importanti.
I tre programmi risiedono nei repository delle principali distribuzioni, ognuno usi il suo gestore di pacchetti per installarli.
Streamer
Per prima cosa occorre testare l’efficacia di “Streamer“. Lanciamo il comando:
streamer -o /home/user/images/image.jpeg
ed andiamo a controllare che nella directory “/home/user/images/” sia stato creato il file “image.jpeg“. Se tutto fila liscio il programma avrà creato la sua prima foto.
Curlftpfs
A questo punto dobbiamo montare l’FTP remoto con “Curlftpfs“:
curlftpfs -o user="user:pwd" ftp.miosito.it /mnt/miosito.it/
Se tutto fila liscio andando nella directory “/mnt/miosito.it/” dovremmo vedere i file presenti sul server (c’è ovviamente un leggero ritardo nella risposta, ricordo che stiamo sempre operando in remoto).
A questo punto suggerisco, più per ordine che per altro, di creare una directory locale ed una remota chiamate “webcam“.
Crontab
Qui entra in gioco “Crontab“. Si deve fare carico di “scattare una foto” e spostarla nella directory “/mnt/miosito.it/” ogni minuto. Apriamo il file “/etc/crontab“:
[user@localhost:~]$ sudo nano /etc/crontab
e aggiungiamo le seguenti righe dopo gli ultimi comandi già inseriti nel file:
* * * * * joe streamer -o /home/user/Immagini/webcam/w_image.jpeg * * * * * joe cp /home/user/Immagini/webcam/w_image.jpeg /mnt/miosito.it/webcam/
Gli asterischi all’inizio della riga sono molto importanti, in pratica dicono a “Cron” di avviare il programma specificato ogni minuto.
Abbiamo praticamente finito. Non ci rimane che testare il funzionamento della procedura (basterà attendere un minuto) controllando che l’immagine venga effettivamente caricata, ed includerla nella pagina.
Consiglio inoltre di impostare un refresh automatico ogni minuto nella pagina di destinazione della foto. In questo modo chi guarda lo stream non dovrà ricaricare ogni volta la pagina. Per il refresh in php includere le righe seguenti subito dopo il tag “<html>”:
<?php header("Refresh: 60;"); ?>
E questo è uno screenshot del risultato, un po’ spartano ma funzionante:
2 commenti
TheJoe · 4 Gennaio 2012 alle 12:02 PM
Tutto dipende dal livello d’accesso che hai al server remoto, alle librerie e ai programmi installati.
Intanto prova a dirmi com’è configurata la rete. Le immagini vengono “scattate” dalla webcam tramite il tuo pc locale se non ho capito male, verranno poi salvate in una directory locale e successivamente trasferite al server remoto (quello che vedi digitando “http://*.*.*.*:445/snapshot.cgi”.
Ho capito bene, oppure l’ip che digiti è il tuo locale (o quello globale che rimanda al tuo pc)?
Ultima cosa: do per scontato che sul computer che “scatta” le foto sia installata una qualsiasi distribuzione linux.
Claudio · 4 Gennaio 2012 alle 11:16 AM
Ciao io ho due webcam semplicissime e dovrei fare la stessa cosa solo che posso farla solo lato web sai dirmi come posso ottenere lo stesso risultato??
Mi spiego meglio
la cam la posso vedere da http://*.*.*.*:445/snapshot.cgi che mi restituisce l’ immagine io a questa dovrei aggiungere data ora e un logo.
E’ possibile farlo lato web nel senso che la cam è installata e raggiungibile tramite un ip il sito è hostato su un server remoto che va a pescarsi le info su http://*.*.*.*:445/snapshot.cgi
Grazie mille
Ciao