TheJoe.it Into the (open) source

1lug/102

Stream di immagini dalla webcam ogni minuto con GNU/Linux

Attenzione!

Questo articolo è stato scritto nel 2010, potrebbero esserci stati sviluppi circa l'argomento trattato.
In caso di dubbi lasciate un commento in fondo all'articolo.
Grazie.

webcam_streaming

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:

About

Mantengo questo blog a livello amatoriale dal 2009. Sono appassionato di grafica, tecnologia, software Open Source. Fra i miei articoli non sarà difficile trovarne circa la musica, ed alcuni di riflessioni personali, ma preferisco indirizzare la linea del blog principalmente verso la tecnologia. Per informazioni contattami.

Commenti (2) Trackback (0)
  1. 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.

  2. 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


Leave a comment

Ancora nessun trackback.