Debido a la inseguridad que existe en nuestro país, nace la necesidad de crear un artículo de bajo costo que tenga la capacidad de monitorear y dar aviso de cualquier evento que suceda en los lugares donde el usuario prefiera. Dicho artículo debe de tener un alto nivel de desempeño, y la opción de permitirle al usuario acceder al vídeo de la cámara desde cualquier ubicación mediante la red.
Se utilizará un Raspberry Pi debido a que es de bajo costo y la cámara del mismo permite obtener imágenes y video con muy buena resolución. Además permite configurarlo de manera sencilla para el uso que se le quiere dar y permite acceder al mismo de manera remota.
El programa ZoneMinder tiene la ventaja de que se puede accesar desde cualquier computadora e inclusive algunos dispositivos móviles, además de que es de licencia libre por lo que cualquier persona lo puede utilizar. También permite grabación, detección de movimiento, análisis y monitoreo en una misma cámara, por lo que su uso puede ser muy versátil (sistema de seguridad, monitoreo de negocios, etc.).
Para este proyecto se utilizó un Raspberry Pi con nuevo módulo de cámara adherido y se instaló el sistema operativo Raspbian.Para instalar Raspbian se deben seguir los siguientes pasos:
startx
La esencia de ZoneMinder es la captura y el análisis de imágenes, por esto existe una considerable cantidad de parámetros que se pueden configurar para asegurar la eliminación de falsos eventos, mientras se mantiene un registro de cualquier situación que se quiera tener capturada en video. Para esto se pueden definir zonas para cada cámara que pueden tener distintas sensibilidades y funciones. Esto permite eliminar regiones que no se quieren monitorear o definir áreas que van crear una señal de alarma si varias zonas en conjunto se activan.
Para este proyecto se va a utilizar una computadora portátil con el sistema operativo Debian como servidor para monitorear una cámara de vigilancia hecha con el Rpi. La instalación de ZoneMinder en Debian se puede utilizar el paquete actual que existe para Debian o se puede instalar manualmente la última versión de Zoneminder que se descarga de su página http://www.zoneminder.com/downloads.
En Debian existe un paquete de ZoneMinder que se puede instalar directamente ejecutando el comando:
sudo aptitude install zoneminder
Con esto se instalarán todos los paquetes y dependencias del programa. Entre las dependencias, se encuentra el programa MySQL que requiere que se defina un nombre de usuario y una contraseña que se utilizará en caso de que se quiera accesar a MySQL en el futuro.
Antes de comenzar la instalación de ZoneMinder se deben instalar los paquetes necesarios para que este funcione correctamente utilizando el comando:
aptitude install acpid build-essential linux-headers-`uname -r` automake perl libauthen-pam-perl apache2 libpam-runtime libio-pty-perl libmysqlclient-dev php5 php5-cli libapache2-mod-php5 php5-mysql libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libjpeg62 libmime-perl libstdc++6 libwww-perl zlib1g zip unzip patch ntp openssl libpcre3-dev libssl-dev libjpeg-progs libcurl4-gnutls-dev munin munin-node libmime-lite-perl netpbm libbz2-dev subversion yasm libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions git-core mysql-server mysql-client
Para el paquete que dice linux-headers-'uname -r' se debe encontrar la versión correcta a instalar haciendo en consola:
uname -r
que lo que hace es devolver la versión del kernel de Debian que se tiene actualmente instalado, en el nombre del paquete se debe intercambiar esta versión por la expresión 'uname-r'. También se debe instalar el software ffmpeg en caso de que la computadora que se vaya a utilizar no lo tenga instalado.
Una vez instalados los paquetes necesarios se procede a la instalación del programa ZoneMinder:
tar -xzvf ZoneMinder-1.26.3.tar.gz
mv ZoneMinder-1.26.3.tar.gz zm
./configure --with-webdir=/var/www/zm --with-cgidir=/usr/lib/cgi-bin ZM_DB_HOST=localhost ZM_DB_NAME=zm ZM_DB_USER=zmuser ZM_DB_PASS=zmpass ZM_SSL_LIB=openssl --enable-debug=no --with-webgroup=www-data --with-webuser=www-data --enable-mmap=yes CPPFLAGS="-D__STDC_CONSTANT_MACROS ${CPPFLAGS}"
autoreconf -i
autoconf aclocal automake make
mysqladmin -u root -p -f drop zm mysql -u root -p < db/zm_create.sql
grant select,insert,update,delete on zm.* to 'zmuser'@localhost identified by 'zmpass'; quit mysqladmin -u root -p reload
make install make clean
sudo nano -w /etc/init.d/zm
El código es el que aparece a continuación:
#!/bin/sh ### BEGIN INIT INFO # Provides: ZM # Required-Start: $network mysql $local_fs # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: <Enter a short description of the sortware> # Description: <Enter a long description of the software> # <...> # <...> ### END INIT INFO prog=ZoneMinder ZM_PATH_BIN="/usr/local/bin" command="$ZM_PATH_BIN/zmpkg.pl" start() { echo -n "Starting $prog: " $command start RETVAL=$? [ $RETVAL = 0 ] && echo success [ $RETVAL != 0 ] && echo failure return $RETVAL } stop() { echo -n "Stopping $prog: " $command stop RETVAL=$? [ $RETVAL = 0 ] && echo success [ $RETVAL != 0 ] && echo failure } status() { result=`$command status` if [ "$result" = "running" ]; then echo "ZoneMinder is running" RETVAL=0 else echo "ZoneMinder is stopped" RETVAL=1 fi } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'status') status ;; *) echo "Usage: $0 { start | stop | restart | status }" RETVAL=1 ;; esac exit $RETVAL
sudo chmod 755 /etc/init.d/zm sudo chown www-data:www.data -R /tmp/zm
Para cualquiera de las dos instalaciones (mediante paquetes o manual) se deben hacer las siguientes modificaciones, de lo contrario el sistema ZoneMinder no funcionará correctamente.
Alias /zm /var/www/zm #Se debe poner el directorio donde se encuentra la carpeta de ZoneMinder <Directory /var/www/zm> php_flag register_globals off Options Indexes FollowSymLinks <IfModule mod_dir.c> DirectoryIndex index.php </IfModule> </Directory>
<option value="<?= $contentValue ?>"<?php if ( $value == $contentValue ) \{ ?> selected="selected"<? } ?>><?= validHtmlStr($contentText) ?></option>
<option value="<?= $contentValue ?>"<?php if ( $value == $contentValue ) \{ ?> selected="selected"<?php } ?>><?= validHtmlStr($contentText) ?></option>
sudo /etc/init.d/apache sudo /etc/init.d/mysql sudo /etc/init.d/zm(zoneminder)
Ahora se puede abrir la consola de ZoneMinder en algún buscador entrando a localhost/zm y todo debería funcionar correctamente.
La prueba más recomendable para saber si ZoneMinder funciona correctamente es agregar la cámara de la computadora que se está utilizando; en caso de que esta no tenga, se puede agregar una webcam conectada a la computadora.
La configuración más común es la siguiente:
Estas configuraciones se encuentra en la pestaña Source del monitor que se está modificando. Para más información sobre como utilizar ZoneMinder visitar la página http://www.zoneminder.com/wiki/index.php/Documentation.
Para hacer streaming es necesario que el Rpi esté conectado a internet, además la cámara del mismo debe estar funcionando correctamente. Para habilitar la cámara en el Rpi se siguen los siguientes pasos:
sudo apt-get update sudo apt-get upgrade
sudo raspi-config
Una vez hecho esto, la cámara debe funcionar correctamente. Para probar la cámara se puede usar el comando raspivid; para más información visitar la página oficial del Raspberry Pi www.raspberrypi.org/camera.
Para probar el streaming del Rpi se utilizó Raspivid junto con NetCat en el Raspberry Pi lo que va a transmitir video a través de un puerto específico y en una computadora, con NetCat y algún reproductor de video como MPlayer o VLC, se puede ver el video que se transmite en tiempo real.
raspivid -t 0 -o - | nc -l 5001
El 5001 es un puerto que se escoje para hacer la transmisión, se puede escoger cualquier otro puerto, de preferencia de 4 dígitos porque los puertos de menos dígitos generalmente están reservados para alguna función. El -l transmite a cualquier computadora que esté “escuchando” a ese puerto en específico.
nc [dirección IP del Rpi] 5001 | mplayer -fps 200 -demuxer h264es -
El comando demuxer h264es descomprime la imagen proveniente del Rpi para que se pueda ver correctamente.
La instalación del Raspberry Pi y el módulo de la cámara se hizo sin mayores problemas. La transmisión de video se obtuvo con una excelente resolución mediante el uso de NetCat, con esto se cumple el objetivo de obtener una cámara de seguridad con alta definición. Esto presenta una opción que en el mercado sólo se presenta en cámaras muy costosas.
Por otra parte la instalación de ZoneMinder fue un poco más dificultosa. Inicialmente, luego de hacer la instalación, en la mayoría de los casos, el programa no funciona como es esperado. Se investigó, en distintas páginas relacionadas con ZoneMinder y en foros que hablaran al respecto, sobre posibles problemas en la instalación del programa; las más comunes son las mencionadas anteriormente de los archivos apache.conf y functions.php.
Se lograron realizar los objetivos propuestos para el proyecto a pesar de las dificultades que se presentaron. Más adelante se implementará el sistema de seguridad completo con un sistema robusto y eficiente.
ZoneMinder es una buena opción para un sistema de seguridad de bajo costo debido a que es de acceso libre. Además la posibilidad de hacer monitoreo desde cualquier lugar lo hace muy versátil y altamente eficiente. Este programa tiene, por defecto, la opción de detección de movimiento lo que una gran alternativa para un sistema de seguridad. Además, al utilizar Raspberry Pi como las cámaras, se puede montar un sistema completo con un presupuesto relativamente bajo.