raspberry_pi_motion

Proyecto vídeo vigilancia con Raspberry Pi y Motion

He ayudado, un poco, a preparar un proyecto de vídeo vigilancia para detectar intrusiones.
Solo contaré aquí la parte correspondiente a la Raspberry Pi, hay otra parte adicional que consiste en un servidor con Nagios que monitoriza si hay nuevas imágenes en la carpeta dónde se guardan éstas cuando se detecta movimiento.

Para ello se dispuso de:

  • Sistema Operativo montado en Raspberry Pi (a partir de ahora RPi) -> Raspbian en su versión 1.3.10 con fecha 12.09.2014. En caso de querer cambiar alguna configuración del sistema operativo: sudo raspi-config
  • IP del sistema = necesitamos que sea una IP fija
  • Usuarios utilizados:
    • Pi -> con permisos de sudo
    • Root -> usuario root de la máquina

Las imágenes con movimiento detectado se guardan en /var/www/pi/

Directorios y ficheros importantes del dispositivo:

  • /tmp/motion/
  • /home/pi/img-seguridad/
  • /home/pi/img-cifradas/
  • /home/pi/script/
  • /home/pi/cp-seg-img/ (aquí van las archivos que se traen del servidor para comprobar que se han pasado correctamente)
  • /home/pi/encriptador.rpi
  • /home/pi/img-cifradas/verificacion-md5.asc
  • /etc/motion/copias

Servicios, paquetes instalados y necesarios para el cometido:

  • Motion (servicio para videocámara)
  • Postfix (para poder mandar correos)
  • gpg2 (para encriptar ficheros)
  • md5sum (para asegurar la integridad de los ficheros)
  • crontab (pone los horarios para activar el servicio motion)
  • ffmpeg (utilizado por motion para crear los archivos de vídeo)

Configurando Motion

Una vez instalados se configura el archivo motion.conf que se encuentra en el directorio /etc/motion/. Los parámetros que tienen que ser modificados son:

  • Daemon -> cambiamos daemon off por on
  • target_dir [path] -> se añade el path el cual queremos que vaya guardando las capturas
  • snapshot_filename -> cambia el nombre con el que se guardan las capturas
  • jpeg_filename -> cambia el nombre con el que se guardan las capturas con movimiento detectado. Por ejemplo: evento-fecha-numero_frame.jpg
  • webcam_port -> puerto por el cual se puede acceder a las capturas que se están haciendo en el momento. Por ejemplo: 8001
  • control_localhost -> lo ponemos a off para que no conecte únicamente con localhost y podamos hacerlo en remoto
  • on_motion_detected [path] -> en caso de detectarse movimiento (cambio de valores entre píxeles) se ejecutará el script cuyo path ha sido facilitado.
  • ffmpeg_cap_new -> lo ponemos a on para que cree archivos de vídeo cuando capte movimiento
  • ffmpeg_video_codec -> en que formato queremos que se guarden los vídeos

Para activar servicio en modo debug: sudo motion -n Para activar el servicio: sudo service motion start Para parar el servicio: sudo service motion stop

Script para el proceso tras la detección

Nagios estará monitorizando el estado del directorio /home/pi/img-seguridad/ y /home/pi/video-seguridad/, tras varias comprobaciones de la existencia de un nuevo archivo ejecutará el script /home/pi/encriptador.rpi, tenemos que pasarle un argumento, –imagenes o –videos para encriptar y mandar uno u otros archivos. Este programa copia los archivos del directorio a /home/pi/img-cifradas/ o /home/pi/video-cifrados donde los encripta, crea un fichero md5 para mantener la integridad y los envía a raspi@ip_fija_sistema:/var/www/pi/imagenes o a /videos.

Luego, para desencriptar las imágenes, se debe ejecutar el script descript que se encuentra en el directorio /var/www/script/, igualmente hay que indicarle si queremos imágenes(–imagenes) o vídeos(–videos). Este comprueba la integridad de los ficheros, y en el caso de ser fiables los desencriptará, por otro lado, si no se ha mantenido la integridad de estos los dejará tal cual y avisará al usuario de ello.

Los nombres de los archivos seguirán el siguiente patrón:

  • Imágenes: LOCAL-img-FECHA|HORA.jpg
  • Vídeos: LOCAL-mov-FECHA|HORA.avi

Con Crontab podemos controlar las horas a las que funciona el servicio motion. Y hacer una limpieza periódica de temporales, por ejemplo: borrar cada minuto los archivos con extensión jpg que haya en /tmp/motion/

Los scripts están en GitHub con el twitter del autor y lo más importante:

Gracias a @bollit0

  • Kilian

    Me interesaria encontrar el tutorial completo de este trabajo si es posible. Gracias

    • Esto es todo lo que hay, en el GitHub hay más información con todo lo necesario.

  • Marta Serrano Canet

    Quiero hacer un sistema de vigilancia/seguridad para la puerta de mi casa como proyecto de investigacion en mi instituto. Buscando he encontrado esta pagina pero no me da el codigo. No tengo el suficiente tiempo para aprender el codigo y escribirlo por lo tanto, tengo que encontrar alguno colgado. Me podrias decir alguna pagina para conseguirlo.
    Gracias

    • El código está en GitHub, en esta página si la lees verás los enlaces.

  • Israel Alvarado

    amigo pero tengo algunas dudas y la principal la camara web la tienes conectada directamente al raspberry pi??

    • Claro que sí. Se trata de eso, de convertir una cámara USB en una cámara web o IP.