Table of Contents
Introducción
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.).
Objetivos
- Configurar ZoneMinder en una computadora desde la que se puedan revisar las cámaras de vigilancia.
- Realizar streaming en alta definición con un Raspberry Pi y una Raspcam por la red.
Raspbian en el Raspberry Pi
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:
- Descargar la imagen de Raspbian de la página oficial http://www.raspberrypi.org/downloads.
- Colocar la imagen en un tarjeta SD (preferiblemente de 4GB o mayor capacidad).
- Se introduce la tarjeta en el Rpi (Raspberry Pi) y se siguen los pasos de instalación del sistema operativo.
- Por último hacer “login” con el usuario y clave que se creó.
- Una vez en el escritorio, abrir una consola y ejecutar el comando para iniciar la interfaz gráfica.
startx
ZoneMinder
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.
Instalación de ZoneMinder en el servidor
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.
Instalación utilizando el paquete de Debian
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.
Instalación manual
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:
- Descargar el comprimido de la versión que se quiera de la página http://www.zoneminder.com/downloads. (En este caso se utilizó la versión 1.26.3)
- Descomprimir el archivo con el comando,
tar -xzvf ZoneMinder-1.26.3.tar.gz
- Cambiar el nombre a la carpeta descomprimida.
mv ZoneMinder-1.26.3.tar.gz zm
- Abrir la carpeta recién nombrada y ejecutar el comando:
./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}"
- En caso de que en la carpeta no aparezca el ejecutable configure se tienen dos opciones:
- Si aparece un archivo llamado bootstrap.sh, ejecutarlo y deben aparecer varios documentos nuevos en la carpeta, entre ellos configure.
- Si no hay ningún archivo .sh se debe ejecutar el comando que copia los archivos auxiliares que hagan falta en la carpeta.
autoreconf -i
- Se generan los scripts de configuración, el archivo aclocal.m4, los “makefiles” y se definen las partes que se deben recompilar.
autoconf aclocal automake make
- Se debe crear la base de datos en MySQL necesaria para ZoneMinder. La contraseña que se solicita es la que se estableció durante la instalación de MySQL y los demás paquetes al inicio de la instalación.
mysqladmin -u root -p -f drop zm mysql -u root -p < db/zm_create.sql
- Dentro de MySQL se utilizan los datos ingresados en la configuración de ZoneMinder (es importante recordar el ; al final de cualquier comando dentro de MySQL) y se vuelve a cargar MySQL.
grant select,insert,update,delete on zm.* to 'zmuser'@localhost identified by 'zmpass'; quit mysqladmin -u root -p reload
- Se termina de compilar y se instala ZoneMinder.
make install make clean
- Por último se debe crear un script que inicializará ZoneMinder.
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
- Una vez guardado el código se da permisos de ejecución a este y se le asigna un usuario específico al directorio /tm/zm.
sudo chmod 755 /etc/init.d/zm sudo chown www-data:www.data -R /tmp/zm
Configuraciones Adicionales
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.
- Se debe copiar el archivo apache.conf al directorio /etc/apache/sites-enabled.
- Para la configuración con el paquete de Debian, este archivo se encuentra en el directorio /etc/zm o /etc/zoneminder.
- Para la configuración manual, este archivo se encuentra (generalmente) en el directorio /var/www/zm. En caso de que no se encuentre, se puede crear el archivo manualmente en el directorio indicado.
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>
- En el archivo functions.php que se encuentra en el directorio includes de ZoneMinder, la línea 651 del código se debe agregar el php que aparece en la segunda línea, que es la modificada.
<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>
- Para la configuración con paquetes de Debian, el archivo se encuentra en el directorio /usr/share/zoneminder/includes
- Para la configuración manual, el archivo se encuentra en el directorio /var/www/zm/includes
- Por último se deben reiniciar ZoneMinder, MySQL y Apache.
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.
Configuración de cámaras en ZoneMinder
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:
- Formato: NTSC
- Paleta de captura: YUYV
- Espacio de color: 24 bits
- Ancho de captura: 320 pixeles
- Altura de captura: 240 pixeles
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.
Streaming del Raspberry Pi hacia el servidor a través de la red
Activación de la Cámara
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:
- Se hace un “update” y un “upgrade” en el Pi.
sudo apt-get update sudo apt-get upgrade
- Se accede a la configuración del Rpi y se activa el soporte para la cámara con el comando:
sudo raspi-config
- Luego de activar se debe reiniciar el Rpi.
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.
Streaming usando NetCat
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.
- Para transmitir video se ejecuta en un consola en el Rpi el comando:
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.
- Una vez ejecutado este comando, la cámara debería estar funcionando continuamente (luz roja de la cámara encendida).
- Ahora, para ver el video desde la computadora se ejecuta el comando:
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.
Resultados
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.
Conclusiones
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.