Raspberry Pi vigilante

raspberryPicameraEste post se empiezo con una pregunta sencilla, ¿Sabéis lo que pasa en vuestra casa cuando no estáis? Esta pregunta peliaguda me surgió a mi hace tiempo por unos robos que hubo cerca de donde vivía. La solución que en su momento se me ocurrió fue pensar en un sistema de alarma con seguridad integral y todas esas cosas, pero a la hora de mirar el coste, rápidamente recule. Entonces, en mi vena de, por mis narices, me plantee hacer un sistema de vigilancia propio. Lo primero en lo que pensé fue en comprar una cámara IP, pero también me pareció un poco desproporcionado. Por lo que pensé en la raspberry pi que tenía en casa muerta de risa. Mire por internet lo que costaba el módulo de la cámara y premio, menos de 15€. De esta manera iba a poder matar 2 pájaros de un solo disparo, jugar con la raspberry y hacer un sistema de vigilancia.

La instalación de la cámara es bien sencilla, el cable de conexiones que trae se encaja en el conector que está más cerca de los USBs y luego se tiene que habilitar en el propio sistema. Para habilitarla, los pasos que seguí fueron, primero conectarme a la pi mediante ssh, después actualizar la raspberry (sudo aptitude update && sudo aptitude upgrade –y) y seguido, entrar en la configuración de la raspberry (sudo raspi-config). Una vez en este menú habilitamos el módulo de la cámara. El proceso es sencillo y únicamente hay que hacer lo más difícil del mundo, leer. Al reiniciar, que nos lo pide el propio menú, ya tendríamos el módulo de la cámara activo. Para ver si funciona, existen aplicaciones ya instaladas que nos pueden permitir comprobarlo. Estos comandos nos generan, en el lugar en el que estamos, el recurso que hemos obtenido de la cámara. Con esto ya tenemos funcionando la cámara.

raspistill –o imagen.jpg (captura una imagen, foto)
raspivid –o video.h264 (captura un video en formato h264 de 5 segundos)
raspivid –o video.h264 –t 15000 (captura un video en formato h264 de 15 segundos)

Ahora queda lo más difícil, hacer un sistema de vigilancia. Para eso puedes utilizar el software motion. Este software sirve para detectar el movimiento dentro de las imágenes y grabar. Además se encuentra dentro de los repos de la pi, por lo que con sudo aptitude install motion, ya lo tienes en tu raspberry. Motion no dispone de todas las herramientas necesarias para trabajar con el módulo de la cámara, por lo que es necesario instalar ciertos paquetes para que funcione correctamente. Estos paquetes pueden sufrir variaciones por las versiones, pero lo importante es tenerlos instalados.

sudo aptitude install -y libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev libavutil51 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev

Una vez que tenemos el motion instalado y las dependencias solucionadas, existe una versión de motion que funciona muy bien y es la que yo he utilizado.  La descomprimimos en una carpeta específica. En ella tenemos el binario del motion y la configuración para usarlo. Solo nos faltaría configurar la herramienta motion. El archivo de configuración del motion del sistema se encuentra en /etc/motion/motion.conf. Podeis revisarlo si queréis, pero nosotros vamos a utilizar el que viene en lo que hemos descargado. Este archivo contiene muchos parámetros para la configuración, pero yo solo me he centrado en unos pocos. Estos son anchura (width), altura (height), umbral para empezar a capturar (threshold),  intervalo de captura de imágenes (snapshot_interval), destino de las capturas (target_dir) y destino del log de motion (logfile). Podéis ponerles los valores que creáis oportunos, pero con una anchura y altura demasiado grandes, las capturas necesitaran más procesamiento, con un umbral muy pequeño saltara casi todo el rato y para el almacenamiento de las capturas, yo os recomendaría que las almacenaseis en un disco externo porque si no os vais a quedar sin espacio rápidamente. Aquí es donde tenéis que jugar un poquito. El archivo de configuración también nos permite asignar scripts a ciertas acciones. Por ejemplo, una vez que termine de grabar, que envíe el video por mail, o que lo suba a drive o a Dropbox o cualquier virguería que se os ocurra. En ese aspecto, cada uno es libre de jugar como quiera y lo que quiera.

Con el archivo de configuración que tenemos, editado o no, lo tenemos que lanzar con el motion, para ello primero renombramos el archivo motion que hemos descargado para que no se confunda con el del sistema, por ejemplo a motion_propio. Después ejecutamos el comando ./motion_propio –n –c configuración-editada.conf. Estos parámetros sirven para ejecutar la herramienta como demonio y con la configuración que deseamos. Hay veces que se obtiene un error de que la fuente desde la cual se debería de obtener las imágenes no existe (esto se ve en el log). Para ello, la solución que he encontrado es ejecutar el comando sudo modprobe bcm2835-v4l2. Con este comando se genera un entrada nueva en /dev que accede a la cámara. El problema es que lo vamos a tener que ejecutar cada vez que reiniciemos la pi para poder grabar. La opción para no tener que hacer esto es escribir este script en /etc/rc.local y, de esta manera, se generará la entrada video0 cada vez que arranquemos la raspberry.

Estamos listos, ahora se está ejecutando la herramienta motion que captura el video y lo almacena en la carpeta que hemos dicho en la configuración. Pero además de almacenarlo, también podemos ver en directo lo que está viendo la cámara. Para ello solo necesitamos un navegador e ir a la dirección IP de la pi, en el puerto 8081. Aquí podremos ver si la cámara realmente funciona.

Os dejo las fuentes de las cuales me he servido para realizar estas pruebas: 1,2,3,4,5

Patxi Galan García
Acerca de
Investigador de S3lab
Expertise: Natural Language Processing, Android, Cyberbullying