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


Comments

35 respuestas a «Video Vigilancia con el Raspberry Pi»

  1. […] Otra brillante función gracias a los experimentos de los usuarios. Podemos conectar una webcam a la placa y utilizarla de sistema de vídeo vigilancia con emisión remota vía streaming. Varios usuarios han realizado diversas pruebas con varios modelos de cámaras de gama baja. ¡Incluso se han aventurado con la EyeToy de la consola Playstation! […]

  2. […] Another brilliant use discovered by the experiments of other users. You can connect a webcam to the mini-PC and use it as a video surveillance system with remote broadcast via streaming. Several users have carried out different tests with various low-end camera models. They’ve even tried it with Playstation’s Eye Toy! […]

  3. […] 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.  […]

  4. […] bueno, mi Raspberry Pi pasa todo el día conectado monitoreando la casa, y como durante el día no hay nadie, la conexión de internet pasa completamente […]

  5. Avatar de carlos
    carlos

    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

  6. Avatar de admin
    admin

    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

  7. Avatar de Jesús
    Jesús

    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.

  8. Avatar de admin
    admin

    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.

  9. Avatar de Juan
    Juan

    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.

  10. Avatar de admin
    admin

    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.

  11. Avatar de Laura
    Laura

    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

  12. Avatar de admin
    admin

    De lo que veo, primero asegurate que estén instalados los módulos de google para tu instalación de python. Puedes revisar este link para eso https://code.google.com/p/gdata-python-client/wiki/GettingStarted

    Del primer punto, parece que es un error de código. Bajaste el uploader.py de este sitio y lo copiaste directo en tu raspberry?

  13. Avatar de jesus
    jesus

    Me sale el mismo error que carlos

    [‘MotionUploader instance has no attribute _create_gdate_cliente’] –

  14. Avatar de admin
    admin

    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

  15. Avatar de Patricio
    Patricio

    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.

  16. Avatar de admin
    admin

    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

  17. Avatar de Manuel
    Manuel

    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!!!

  18. Avatar de admin
    admin

    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.

  19. Avatar de Manuel
    Manuel

    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.

  20. Avatar de trigadi
    trigadi

    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

  21. Avatar de admin
    admin

    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.

  22. 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

  23. Avatar de admin
    admin

    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.

  24. Avatar de Raul
    Raul

    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.

  25. Avatar de admin
    admin

    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.

  26. Avatar de Juan
    Juan

    Buenas estimado:

    Buen proyecto me corre a la perfección.

    Pero tengo problemas cuando al activar el on_picture_save /etc/motion/new
    para guardarlo en algun lugar fisico (no cloud)
    me da un error por denegación de permiso.

    Como lo podria corregir?

  27. Avatar de admin
    admin

    Hola Juan

    Quizás el problema que tengas es con los permisos de escritura de la carpeta donde estás guardando las imágenes.

    Podrías copiarme acá el error que te presenta?

  28. Avatar de Pol Farràs
    Pol Farràs

    Hola,

    Em podries ajudar a configura l’arxiu uploader.py, estic tenim problema perquè no ho se quin parametras s’han posar i ha on.

    Gracies,

  29. Avatar de Ernesto Beltran
    Ernesto Beltran

    Buen dia, ojala no sea tarde para publicar, empece a realizar este proyecto, pero tengo un problema, no con el software sino mas bien con el ambiente y no he dado con una solucion buena jajaj, tengo pensado poner la camara en el pasillo de mi edificio, lo malo es cuando cae la noche se activan los sensores de movimiento del edificio y cada vez que alguien pasa, enciende las luces y ese cambio de iluminacion lo detecta la camara como movimiento, pueden pasar en el 3 piso y enciende las luces de los 8 pisos, alguien sabe como se podria solucionar? Gracias

  30. Avatar de admin
    admin

    Ernesto, quizás la opción que podrías probar, es colocar unos leds infrarojos para tratar de «iluminar» para la cámara los pasillos en las noches . Ahí se reducirá un poco el cambio entre la oscuridad y el momento que se enciendan las luces

  31. Avatar de isaac
    isaac

    Hola estoy realizando el proyecto pero al darle los permisos de ejecuciom dice que no puede acceder al fichero de «/etc/motion/*.py» me podrias ayudar en esa parte

  32. Avatar de admin
    admin

    Hola! Asegúrate que estos 3 archivos

    uploader.py
    uploader.cfg
    envia_email.py

    los haz copiado dentro de la carpeta /etc/motion/ , caso contrario, tienes que copiarlos en esa ubicación para poder darles permisos

  33. Avatar de isaac
    isaac

    Y si no me deja copiarlos si me dice Error al mover el archivo /home/pi/Downloads/envia_email.py: Permiso denegado ¿que le hago?

  34. Avatar de admin
    admin

    Quizas te pida ser root, debes usar el comando sudo para poder realizarlo, también asegúrate de que la carpeta /etc/motion esté creada previamente

Responder a admin Cancelar la respuesta