Gestire una webcam con un webserver apache

Da Linux User Group Scandiano.

In questa guida sono descritti i passaggi necessari per configurare una webcam collegata ad un webserver GNU/Linux in grado di acquisire immagini ad una cadenza definita. Successivamente viene descritto come autamatizzare la gestione di un archivio storico delle immagini. Per la presente guida è stata utilizzata una webcam Logitech QuickCam S5500 la quale funziona out of the box su Ubuntu 8.10. Nello specifico è stata effettuata una installazione di Ubuntu mini 8.10 e successivamente, attraverso lo strumento tasksel, è stato installato un server LAMP.

Gestire la webcam

Un utile strumento per gestire la webcam si chiama: webcam. Una volta lanciato il comando, senza opzioni, il programma andrà a leggere il file di configurazione dell’utente ~/.webcamrc

Ecco una configurazione possibile del file:

[grab]
device = /dev/video0
text = “La mia webcam %Y-%m-%d %H:%M:%S”
archive = /var/www/archivio/%Y%m%d%H%M.jpg
fg_red = 255
fg_green = 255
fg_blue = 255
width = 640
height = 480
delay = 2
wait = 0
rotate = 0
top = 0
left = 0
bottom = -1
right = -1
quality = 85
trigger = 0
once = 0
level_day = 50
diff_trig_day = 3.0
diff_trig_night = 2.0

[ftp]
dir  = /var/www
file = webcam.jpeg
tmp = uploading.jpeg
passive = 1
debug = 0
auto = 0
local = 1
ssh = 0

La sezione [grab] del file di configurazione definisce le modalità di produzione ed elaborazione delle immagini acquisite con al webcam. La maggior parte delle opzioni sono autoesplicative. Di particolare importanza è la voce delay che indica l’intervallo di acquisizione delle immagini espresso in secondi. archive è la posizione dell’archivio storico delle immagini. Nell'esempio alle immagini viene assegnato un nome che corridponde alla data e all’ora di acquisizione (es. 200917021112.jpg). Con il file .webcamrc così configurato viene effettuata una acquisizione ogni due secondi, ma nell’archivio viene conservata una immagine al minuto.

La sezione [ftp] indica le politiche di upload dei file al server. Nel mio caso, con l’opzione local=1 non viene fatta alcuna connesione remota è i file vengono depositati sull’host locale.

E’ possibile a questo punto avviare webcam in background e iniziare il lavoro di acquisizione

$ webcam &

Automatizziamo la gestione dell’archivio

Prepariamo uno scrip bash (nel mio caso “gestionearchivio”) al quale faremo creare ogni notte una cartella nella quale raccogliere le immaigni del giorno precedente. Lo script si occuperà anche di eliminare le cartelle del mese precedente.

#!/bin/bash

IERI=$(date -d “yesterday” +”20%y%m%d”)
mkdir /var/www/archivio/_$IERI
mv /var/www/archivio/$IERI* /var/www/archivio/_$IERI

MESESCORSO=$(date -d “1 month ago” +”20%y%m%d”)
rm -rf /var/www/archivio/_$MESESCORSO

Rendiamo lo script eseguibile per l’utente root e copiamolo in /usr/local/sbin

$ sudo chmod 700 gestionearchivio

$ sudo cp gestionearchivio /usr/local/sbin/

Automatizziamo il processo con cron editando il file /etc/cronttab aggiungendo la seguente riga che manderà in esecuzione il comando ogni notte alle 01:01.

01 1    * * *    root    /usr/local/sbin/archiviowebcam

Può essere importante accertarsi dell’esattezza dell’ora della nostra macchina quindi, sempre in /etc/cronttab possiamo aggiungere la riga seguente per fare sincronizzare l’orologio ogni ora con quello di time.ien.it

12 *    * * *    root    ntpdate time.ien.it

Avvio del programma allo startup

Per fare avviare il programma allo startup del pc è necessario editare il file /etc/init.d/bootmisc.sh. All’interno della funzione do_start(), delimitata dalle parentesi graffe aggiungiamo la riga seguente. Il posto più indicato all’interno della funzione è alla fine, cioè appena prima della chiusura delle parentesi graffe:

# Aggiungo la webcam specificando il file di configurazione
webcam /root/.webcamrc &

Riavviamo il PC e tutto dovrebbe funzionare a dovere!

Approfondimenti