Video Vigilancia con el Raspberry Pi

Dado que mi pequeño Raspberry Pi se encontraba algo desatendido, decidí darle una prueba al paquete Motion, que es utilizado para la captura y detección de movimiento para ambientes Linux.

La instalación de Motion es bastante sencilla. Para esto, previamente debemos tener instalado Raspbian en nuestro Pi (es con lo que lo he venido probando desde hace algún tiempo), y bajo la consola de terminal, simplemente ejecutamos los siguientes comandos (asegurándonos de estar conectados al internet)

sudo apt-get update

sudo apt-get motion

El primer comando se encargará de actualizar todos los paquetes nuevos de nuestro Linux, y luego descargará el paquete Motion, directamente.

Para la captura de video, estoy usando la PS3 Eye Cam, que utilicé en la Plataforma Stewart presentada anteriormente. Esta cámara fué detectada por el Raspberry sin problema, y de lo que he leído por ahí, existe gran compatibilidad con distintas cámaras, así que la configuración de la misma sobre el Raspbian es algo trivial.

Una vez instalado  Motion, hay que proceder a configurarlo. Para esto, es necesario editar el archivo motion.conf ubicado en /etc/motion.

En este archivo, vamos a editar algunos parámetros que nos van a ayudar a cumplir nuestro objetivo, que será (al menos en mi caso) capturar una imágen cada minuto y almacenarla en Google Drive, y además, el momento que se detecte un movimiento, así mismo subir dicha imágen  a la nube, y enviar un email de aviso.

Lo primero que debemos configurar es el tamaño de la captura. Como el Raspberry Pi no es lo suficientemente potente para procesar imágenes de alta resolución, vamos a cambiar el tamaño de la imágen a 320×240, editando estas líneas en el archivo motion.conf

width 320
height 240

Otro parámetro con el que debemos jugar, es el threshold, que es el umbral de cambio de la imágen para que se pueda hacer una llamada a la detección de movimiento. El valor default es 1500, pero yo lo subí un poco, para evitar falsos disparos (sobre todo por la mascota nuestra, que siempre ronda la casa)

threshold 3000

Para nuestra aplicación, vamos a necesitar guardar una captura de imagen cada 60 segundos, esto lo logramos usando el parámetro snapshot_interval, que permite configurar el tiempo en segundos en el que se va a guardar una imágen de captura de video.

snapshot_interval 60

Ahora, a lo importante del asunto. Motion permite disparar comandos, dependiendo del evento que sea lanzado por la aplicación. Para nuestra aplicación, vamos a utilizar 2 eventos: on_picture_save  que se lanzará al guardar una imágen cada 60 segundos (configurados en el parámetro anterior), y on_motion_detected que nos lanzará el evento al detectarse movimiento en la cámara.

Previo a esto, vamos a necesitar 3 archivos adicionales, que debemos crear (o descargar) para poder finalizar nuestra aplicación.

El archivo uploader.py (creado por Jeremy Blythe), se encarga de conectarse con los servicios de google drive, y almacena las imágenes guardadas dentro de una carpeta de GDrive. Este archivo, necesita del archivo de configuración uploader.cfg, donde se incluirá todos los datos de conexión de la cuenta de gmail a usar.

El archvo envia_email.py es una modificación realizada por mi, para que únicamente se envíe un email a una dirección determinada, lo que usaremos cuando se haya detectado movimiento frente a la cámara

Con lo comentado anteriormente, deberemos editar los parámetros del archivo motion.conf, modificando las siguientes líneas (puede que los parámetros indicados a continuación estén comentados, así que será necesario quitar el # para que funcione correctamente)

on_picture_save /etc/motion/uploader.py /etc/motion/uploader.cfg %f

on_motion_detected /etc/motion/envia_email.py

el %f en el primer parámetro, se refiere al nombre del archivo grabado ese instante.

Con los archivos guardados correctamente, debemos darles los respectivos permisos de ejecución, así que debemos ejecutar el siguiente comando:

sudo chmod +x /etc/motion/*.py

y luego, podremos iniciar Motion ejecutando

sudo motion

De esta manera, se empezarán a cargar las imágenes en nuestro GDrive, y recibiremos notificaciones de detección de movimiento. Nada mal para un sistema de video seguridad por menos de $100.

Captura

26 comentarios en “Video Vigilancia con el Raspberry Pi

  1. disculpa estoy haciendo el proyecto pero cuando cargo el scritp envia_email.py me sale un error: [‘MotionUploader instance has no attribute _create_gdate_cliente’] espero que me puedas ayudar gracias

  2. Tienes que asegurarte de tener los extras de google para python. Quizás por eso te presente ese error. Busca “python gmail access” en google y seguro encontrarás el procedimiento para solucionar el error

  3. He leído en un post que podrías ayudar para generar una base de datos con mysql y datos de sensores con raspberry. ¿Me podrías orientar?

    Gracias de antemano.

  4. La verdad todo depende de tu aplicación.

    Lo que te recomendaría es que toda el módulo de sensores lo manejes con un arduino, para mantener aislados los sensores de la placa del Raspberry (por seguridad mas que nada), y mediante un script de python podrias leer esos datos desde el puerto serie que emula el arduino, y guardarlos en una base mysql. La ventaja de esto es que puedes diseñar tu aplicación en una PC normal (arduino + scripts de python) y cuando esté listo, solo se lo copia al Raspberry y funciona.

    En estos días (quizas antes de fin de año, que tengo unos días de vacación) podría publicar algun ejemplo de eso, mantente conectado.

  5. Hola, tengo un trabajo en el que tengo que enlazar mi sistema de videovigilancia con mi página web, si me podrías dar alguna ayuda ps sería genial, gracias.

  6. Si estas usando motion, lo que podrías hacer, es que el momento que se detecte movimiento, o cuando llegue el intervalo de captura de imágen (cada 2 minutos lo tengo yo), se guarde esa imágen y se suba a tu servidor ftp de tu sitio web mediante un script de python.

    Una vez ahí, podrás hacer un script en cualquier lenguaje que estés usando para la web, para que busque la última imágen cargada (ordenando por fecha) y la visualice en pantalla.

    Hay que programar un poco, pero no es nada complicado.

  7. Hola, estoy haciendo el proyecto, y al ejecutar el Motion y detectar el movimiento, me salen dos errores:
    – SyntaxError: Non-ASCII character ‘\xc3’ in file /etc/uploader.py on line 18, but no encoding declared.

    – File “/etc/envia_email.py”, line 11, in import gdata.data
    ImportantError: No module named gdata.data

    ¿Me podrias ayudar a resolverlo?

    Muchas grácias

  8. Me sale el mismo error que carlos

    [‘MotionUploader instance has no attribute _create_gdate_cliente’] –

  9. puedes copiarme aca el contenido de tu uploader.py para ver por que puede ser el error? igual que en el caso anterior parece ser algún problema de la instalación de los módulos de google

  10. Hola, me sale el problema del import gdata.data, mire lo del code de google y esta la solucion para ubuntu, pero python para raspbian no tiene la carpeta gdata. No me funciona en mi raspberrypi. No se como solucionarlo. El envi_mail.py de aca lo descargue.
    Saludos.

  11. El problema que veo es que no tienes instaladas correctamente las librerías de google para python. Puedes mirar esta página para guiarte

    https://developers.google.com/gdata/articles/python_client_lib?csw=1

    En realidad, lo mas simple es descargar archivo de las librerias gdata de https://code.google.com/p/gdata-python-client/downloads/list descargar la última version, descomprimirla en tu raspberry y ejecutar ./setup.py desde la línea de comandos, en la carpeta donde se descomprimió el archivo descargado

  12. Hola, interesante tutorial, me viene de perlas para un trabajo que estoy realizando pero también me sale el error de gdata, he instalado las librerias esas de google pero me sigue saliendo el error no sé por qué. Sería de gran utilidad alguna ayuda por favor. Y si pudiera ser para que también mandara una foto cuando se detecte el movimiento, he mirado por muchos sitios y no consigo nada, muchas gracias saludos!!!

  13. Te cuento que lo de la foto si lo probé, tenia la misma idea, pero resulta que de la forma que estaba configurado motion, se disparaban 20 eventos seguidos cuando detectaba movimiento, y el raspberry se moría hasta tomar las fotos, y enviarlas por email jejeje. Lo único que tendrias que hacer es adjuntar la imagen generada al email que se envia y ya está 🙂

    Respecto a las pruebas, lastimosamente por temas de estuvio me cambié de continente ejejeje. Estoy por comprar un raspberry nuevo acá, y cuando lo tenga instalado veré que pasa con las liberias de gdata, que veo que alguna gente tiene problemas con eso.

  14. Gracias por tu comentario admin.

    Si por lo visto las librerias esas dan muchos dolores de cabeza jaja.

    Y es cierto lo que dices, con otro script que solo manda un aviso por correo, cada vez que detecta movimiento manda un montonazo de mails. Lo que no sé es como adjuntar la fotografía.

    Un saludo.

  15. hola buena tarde

    quisiera ver si me puedes apoyar con este problema lo que pasa es que cada que detecta movimiento me envía un email y me satura mi correo quisiera restringir esa parte podrias ayudarme con esto

  16. Yo tenía el mismo problema, pero jugando un poco con el umbral de detección puedes evitar ese inconveniente. Prueba modificando el valor

    threshold 3000

    en motion.conf, quizas si lo bajas un poco podrás solucionar el problema.

  17. Hola saludos!! yo voy a implementar este sistema me gusto, de antemano sé que voy a tener que liar con esos famosos archivos que describen en los comentarios pero igual de antemano gracias por el tutotial, espero que aun sirva, bueno con eso de que luego actualizan y renombran las aplicaciones y luego desactivan funciones o las renombran jaja, pero gracias 🙂 por compartir

  18. Gracias por el comentario Pablo. En estos dias voy a probar todo de nuevo para asegurarme que el tutorial funcione como indica. Mi raspberry sufrió un pequeño “percance” y tengo que reinstalar todo.

  19. Hola Gente, voy a meterme a fondo con esto, recien voy a iniciar espero que este tema siga en pie por algunas dudas o problemas que tenga, un saludo a todos y gracias por compartir este material.

  20. Claro Raul. Yo compré una raspberry 2, y voy a probar nuevamente todo el proceso. Sé que google ha cambiado un poco el proceso de subir archivos al drive mediante python, pero iré publicando cualquier novedad por aca.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *