Video Sorveglianza a costo zero

In questo articolo vedremo come installare un server basato su Debian Squeeze con il supporto Video4Linux per l'integrazione di schede di acquisizione video.

In particolar modo utilizzeremo la seguente scheda di acquisizione video ad 8 ingressi supportata dal driver bttv (incompatibile con mainboard basate su chipset VIA

Qualora si dovessero avere problemi di stabilità si consiglia di utilizzare una versione più recente del kernel ad esempio la 2.6.35-7.

Procedere con installazione di un sistema Debian Squeeze seguendo la seguente tabella delle partizioni

Eseguire una installazione minimale depennando tutte le voci nel menu tasksel

Terminata l'installazione del sistema base sistemare /etc/apt/source.list come segue

deb http://ftp.it.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.it.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
# squeeze-updates, previously known as 'volatile'
deb http://ftp.it.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.it.debian.org/debian/ squeeze-updates main contrib non-free

Creare utenti e gruppi necessari al funzionamento di Argus

root@argus:~# groupadd surveillance
root@argus:~# useradd -g surveillance -G video dvr
root@argus:~# useradd -g surveillance -G video motion
root@argus:~# apt-get install sudo

Installare sudo ed abilitare gli utenti al suo utilizzo modificando il file /etc/sudoers

Installare apache, php e mysql e programmi vari con il seguente comando

root@argus:~# apt-get install php5-mysql apache2 libapache2-mod-php5 mysql-server ntpdate ffmpeg anacron postfix at libmysqlclient-dev libavformat-dev libavcodec-dev libjpeg62-dev lynx php5-cli php5-gd php-mail php-mail-mime php-mail-mimedecode php- net-smtp php-net-socket php-pear php5-common daemontools-run libswscale-dev libavdevice-dev console-tools git-svn dialog autoconf automake

root@argus:/var/www/video2# chown dvr:surveillance /usr/bin/ffmpeg
root@argus:/var/www/video2# chmod +s /usr/bin/ffmpeg

Terminare l'installazione dei pacchetti utilizzando le configurazioni di default. 

Commentare la riga contenente l'utente www-data nel file /etc/at.deny per garantire l'esecuzione dei relativi job.

Modificare i seguenti file impostando il parametro max_execution_time = 0

/etc/php5/apache2/php.ini

/etc/php5/cli/php.ini

e riavviare apache abilitando la nuova configurazione .

Siamo pronti a scaricare ed installare il front end web di argus.

Scaricare e decomprimere Argus_web.tar.gz sulla document root di Apache e creare i seguenti link simbolici

root@argus:/var/www# ls
Argus_web.tar.gz index.html video2
root@argus:/var/www# tar -xzf Argus_web.tar.gz
root@argus:/var/www# ln -s /var/www/video2 /video
root@argus:/var/www# ln -s /var/www /www

Cambiare la document root di Apache a /var/www/video2 oppure creare un virtual host alternativo.

Creazione del database

root@argus:/var/www/video2/database# ls
argus_template.sql
root@argus:/var/www/video2/database# mysqladmin -uroot -proot create video
root@argus:/var/www/video2/database# mysql -uroot -proot video < argus_template.sql

Editare il file /var/www/video2/config.php per definire il numero di telecamere e la partizione di spool

DEFINE("NUMERO_CAMERE",8);
DEFINE("DISCO","/dev/sda4");

Creare il file /etc/modprobe.d/bttv.conf inserendo le seguenti righe

options bttv card=102,102,102,102,102,102,102,102
options i2c-algo-bit bit_test=1

Editare il file /lib/udev/rules.d/91-permissions.rules e cambiare il gruppo da video a surveillance per il SUBSYSTEM video4linux 

# video devices
SUBSYSTEM=="video4linux", GROUP="surveillance"

Creare il file /etc/udev/rules.d/10-discoesterno-argus.rules con le seguenti regole per eseguire l'automount di un dispositivo esterno usb storage con uid 33 (www-data) 

SUBSYSTEMS=="usb", KERNEL=="sd*", NAME="PENNA%n", RUN+="/bin/mkdir 
/var/www/video2/PENNA"
SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/mount -t auto -o rw,nosuid,nodev,uid=33,gid=33 /dev/PENNA1 /var/www/video2/PENNA"
SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/rm -rf /var/www/video2/PENNA"
SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/umount -l /var/www/video2/PENNA"

 Eseguire il seguente comando per aggiornare il comportamento di udev a runtime

root@argus:~# udevadm control --reload-rules

Installare vloopback dal repository debian squeeze http://www.lavrsen.dk/foswiki/bin/view/Motion/VideoFourLinuxLoopbackDevice

root@argus:/usr/src# apt-get install vloopback-source linux-headers-2.6.32-5-686root@argus:/usr/src# tar -xvjf vloopback.tar.bz2
root@argus:/usr/src# cd modules/vloopback/
root@argus:/usr/src/modules/vloopback# make && make install && depmod -ae

Creare il file /etc/modprobe.d/vloopback.conf con le seguenti opzioni

options vloopback dev_offset=8 pipes=8

Permettere al sistema di caricare il driver appena compilato al boot inserendo la riga vloopback in /etc/modules.

Caricare i driver

root@argus:~# modprobe -r bttv && modprobe -r i2c_algo_bit
root@argus:~# modprobe bttv
root@argus:~# modprobe vloopback

Installazione Motion

Motion è un programma scritto in C e rilasciato sotto licenza GPL (General Public License) e si può liberamente scaricare dal sito http://motion.sourceforge.org.

Motion supporta ingressi video da dispositivi standard Video4Linux, USB Webcam e Network camera.

Per ulteriori informazioni consultare il sito del progetto http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome.

Per il funzionamento della componente monitor di Argus è necessario utilizzare una versione leggermente modificata del Motion che mette a disposizione lo stream video su di una unix_socket che verrà poi utilizzata dal programma argus monitor per visualizzare le immagini direttamente a monitor.

root@argus:~# mkdir /var/src
root@argus:~# cd /var/src/
root@argus:/var/src# tar -xzf motion_argus.tar.gz
root@argus:/var/src# cd NEW_MOTION/
root@argus:/var/src/NEW_MOTION# mkdir /etc/motion
root@argus:/var/src/NEW_MOTION# ./configure --prefix=/usr --sysconfdir=/etc/motion

Editare il Makefile ed aggiungere “unix_socket.o” alla lista dei target object

OBJ = motion.o logger.o conf.o draw.o jpegutils.o vloopback_motion.o $(VIDEO_OBJ)
netcam.o netcam_ftp.o unix_socket.o netcam_jpeg.o netcam_wget.o track.o
alg.o event.o picture.o rotate.o webhttpd.o
stream.o md5.o ffmpeg.o
root@argus:/var/src/NEW_MOTION# make uninstall && make clean root@argus:/var/src/NEW_MOTION# make && make install

Copiare la configurazione

root@argus:/var/www/video2/conf_file# cp *.conf /etc/motion/
root@argus:/var/www/video2/conf_file# cp motion_init /etc/init.d/motion
root@argus:/var/www/video2/conf_file# chmod 755 /etc/init.d/motion
root@argus:/var/www/video2/conf_file# update-rc.d motion defaults
root@argus:/var/www/video2/conf_file# mkdir -p /var/run/motion
root@argus:/var/www/video2/conf_file# chown -R motion:surveillance /var/run/motion
root@argus:/var/www/video2/conf_file# chown -R motion:surveillance /etc/motion/ && chmod -R 775 /etc/motion/
root@argus:/var/www/video2/conf_file# cp onStart /etc/init.d/onStart
root@argus:/var/www/video2/conf_file# chmod 755 /etc/init.d/onStart
root@argus:/var/www/video2/conf_file# update-rc.d onStart defaults
root@argus:/var/www/video2/conf_file# cp gestione
gestioneDisco gestioneMotion
root@argus:/var/www/video2/conf_file# cp gestione* /etc/cron.hourly/
root@argus:/var/www/video2/conf_file# chmod 755 /etc/cron.hourly/gestione*

Riavviare il sistema.

L' installazione dovrebbe essere completa e sarà possibile raggiungere argus tramite browser all'indirizzo http://$ARGUS oppure http.//$ARGUS/web-mobile per la versione mobile.

Fare riferimento alla guida per ulteriori delucidazioni.

Installazione monitor (Opzionale)

L'applicazione monitor di Argus permette di ottenere la visualizzazione real time delle telecamere installate, le registrazioni e gli allarmi direttamente a video.

L'applicazione è sviluppata in GTK con binding su directfb di conseguenza fare riferimento alla home page del progetto http://directfb.org/wiki/index.php/Projects:GTK_on_DirectFB#Debian.

L'installer di Debian fino alla precedente versione stabile “Lenny” era sviluppato con le libgtk-directfb, a partire dal primo rilascio di “Squeeze” questa tecnologia è stata abbandonata a favore di un installer basato su X11.

Purtroppo il repository di “Squeeze” non ha più alcun riferimento a pacchetti installabili libgtk-directfb di conseguenza esistevano due possibilità.

La prima era quella di ricostruire i pacchetti debian o comunque compilare gtk con il supporto a directfb (--with-gdktarget=directfb) ed utilizzare il codice monitor esistente; la seconda soluzione consisteva nell'eseguire un porting del codice monitor a X11.

Per utilizzare la versione stabile del monitor scaricarla da qui (Funzionante al 100% su Debian Lenny).

Le librerie GTK Directfb pacchettizzate in debian lenny hanno un bug che provoca memory leak in quanto le finestre create non vengono effettivamente distrutte (http://ftp.acc.umu.se/mirror/gnome.org/sources/gtk+/2.15/gtk+-2.15.5.changes fare riferimento a Bug 533456)

Chiunque volesse utilizzare la versione per lenny puo' utilizzare questi pacchetti per architettura amd64 che risolvono il precedente problema (link ai pacchetti *.deb contenuti nell'archivio)

In questo HOWTO procederemo con una versione alternativa del monitor compatibile con Debian Squeeze anche se il porting realizzato non risulta ancora stabile.

Si spera che il contributo della comunità ed un po' di tempo libero a nostra disposizione possa permettere di portare avanti il progetto con una versione stabile del monitor basata su X11.

Qualora si desiderasse utilizzare una versione del monitor stabile fare riferimento al seguente link (link a preinstallato) oppure eseguire una installazione di Argus sulla precedente versione stabile di Debian (Lenny).

Dobbiamo dunque procedere con l'installazione di un Windows Desktop Environment; per la realizzazione di questo howto ho preferito utilizzare xfce che è parecchio leggero ed efficiente.

root@argus:/var/src# apt-get install xfce4

Questo comando installerà tutte le dipendenze necessarie

Scaricare il file argus_monitor.tar.gz ed estrarlo in /usr/share/monitor/ oppure modificare opportunamente il file config.h e rc_file.

Per l'integrazione di un telecomando si procede con l'installazione di LIRC (www.lirc.org)

root@argus:/var/src# git clone git://lirc.git.sourceforge.net/gitroot/lirc/lirc
Cloning into lirc...
remote: Counting objects: 13436, done.
remote: Compressing objects: 100% (3474/3474), done.
remote: Total 13436 (delta 10406), reused 12732 (delta 9826)
Receiving objects: 100% (13436/13436), 2.59 MiB | 570 KiB/s, done.
Resolving deltas: 100% (10406/10406), done.
root@argus:/var/src# cd lirc
root@argus:/var/src/lirc# ./autogen.sh
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
configure.ac:17: installing `./compile'
configure.ac:24: installing `./config.guess'
configure.ac:24: installing `./config.sub'
configure.ac:10: installing `./install-sh'
configure.ac:10: installing `./missing'
daemons/Makefile.am: installing `./depcomp'
Makefile.am: installing `./INSTALL'
Creating setup-driver.sh ...
root@argus:/var/src/lirc# ./setup.sh
root@argus:/var/src/lirc# ./configure --prefix=/usr --sysconfdir=/etc --sysconfdir=/etc
--with-driver=serial --with-port=0x3f8 –with-irq=4
root@argus:/var/src/lirc# make && make install

Copiare il file di init presente nell'archivio monitor_argus in /etc/init.d/lirc ed i file di configurazione che dovranno essere editati per cambiare la mappatura del telecomando o i driver da utlizzare.

root@argus:/var/src/monitor_argus# cp lirc_file/lirc.init.d /etc/init.d/lirc
root@argus:/var/src/monitor_argus# chmod 755 /etc/init.d/lirc
root@argus:/var/src/monitor_argus# chmod 755 /etc/init.d/lirc
root@argus:/var/src/monitor_argus# update-rc.d lirc defaults
update-rc.d: using dependency based boot sequencing
root@argus:/var/src/monitor_argus# mkdir /etc/lirc/
root@argus:/var/src/monitor_argus# cp lirc_file/*.conf /etc/lirc/

Si suppone che si stia utilizzando il telecomando URC6211 (codice programmazione 21214 ) ed un ricevitore collegato a porta seriale analogo a questo http://www.lirc.org/receivers.html.

Compilazione monitor

root@argus:/usr/share/monitor# cp ffmpeg_header/* /usr/include/libavcodec/
root@argus:/usr/share/monitor# make && cp main /usr/bin/monitor

Aprire il Desktop Envoronment con startxfce4 ed eseguire il seguente comando da xterminal

root@argus:/usr/share/monitor#monitor 8

Per aprire il programma appena installato.