20 diciembre, 2011

VIDEOVIGILANCIA AUTOMATICA (Motion-Bluetooh-Ubuntu)



VIDEOVIGILANCIA CON MOTION (LINUX-UBUNTU) Y UTILIDAD DEL BLUETOOH DE UN CELULAR

I. OBJETIVO.-Explicar còmo implementar un sistema de video-vigilancia sobre linux.

Después de utilizar el script de presencia para kbluetooth de gallir, para conectar y desconectar las sesiones del kopete, me preguntaba para que mas podria servir este engendro y resulta que a alguien se le ocurrió la idea de utilizarlo para activar y desactivar un sistema de vigilancia con una webcam. Así, mediante el bluetooth de un Celular, cuando uno abandona la casa (para ir al trabajo, estudiar u otras actividades), el compuador sabrà que uno ha avandonado la casa y activa la vigilancia. Cuando la persona retorna, inmediatamente la econoce y la desactiva.

La aplicación que es utilizada para las imágenes y la detección de movimiento es motion (software libre), èsta se relaciona con la webcam. Cuando detecta un movimiento (variacion de pixeles) en las imágenes produce un nuevo evento. Motion su configuracion es muy basta, puedes capturar las imágenes, producir un video con las imágenes y lo más interesante, ejecutar lo que quieras. Gracias a esto propusieron un script de atención a un evento.

En el script se ejecuta un sonido aleatorio entre 10 posibles, que en muchas ocaciones puede resultar muy ùtil. La utilizaciòn de èste depende del usuario, si la quiere o no es desicion propia, mas que eso es la idea de dar a conocer la posibilidad de poder ejecutar este script.

Iniciemos por aprender a hacer funcionar la webcam en linux, después se explicarà el funcionamiento y configuración de motion, para acabar con la parte del script de atención a evento y del script de presencia en kbluetoothD.



II. MATERIALES Y METODOLOGIA
Materiales:

   Hardware

  • Un Computador
  • Una webcam compatible con linux
  • Un adaptador bluetooth usb
  • Un Celular con bluetooth

   Software

  • Motion
  • Script de presencia en kbluetoothD
  • Script de atenció a evento


Metodologia

   Webcam en linux

Para inciar puedes adquirir una webcam Logitech de las mas comodas, que dependiendo de las especificaciones el driver a utilizar puede ser descargado de spca5xx: descargar y instalar según las instrucciones del propio driver. O si tienes un poco de suerte es detectada automaticamente por linux (ubuntu 11).
Para probar el funcionamiento de la webcam se puede utilizar cheese(instalable desde el centro de software de ubuntu), un visualizador empaquetado en debian.

 

Motion

Motion es el encargado de muchas cosas en este sistema, procesa las imágenes recibidas de la webcam, detecta si ha habido variaciones entre dos consecutivas y si esas variaciones alcanzan un "valor" lanzan un evento. Después guarda esas imágenes, y hace un video con ellas. Además he hecho que lance un script cuando se produce un evento.
A continuacion se muestran enlaces con informacion importante sobre Motion
"http://www.linuca.org/body.phtml?nIdNoticia=189
"http://www.funix.org/fr/linux/webcam.htm",
"http://bulma.net/body.phtml?nIdNoticia=1383", aunque lo mejor para profundizar es la propia guía de motion.


centro de sofware de UBUNTU
Motion puede ser instalado directamente del centro de software de ubuntu (tener en consideracion que este programita no tiene interfaz grafica), tambien se puede obtener como empaquetado en .deb y en .rpm.




Una vez instalado motion desde apt o como se prefiera (màs cencillo desde el centro de software), pasamos a configurarlo.

Iniciamos escribiendo en el terminal y activar las opciones según como se va indicando.

/etc/motion/motion.conf

daemon on 
quiet on
Estas dos opciones están en off por defecto, pero es conveniente ponerlas a on. La primera hace que se ejecute motion como daemon, obligatorio para que después funcione correctamente con los scripts (de presencia y de atención a evento). Y la segunda es para que no suelte unos "beeps" cuando detecte un movimiento.
videodevice /dev/video0
Le decimos cual es el dispositivo de la webcam. (puede variar)
width 320 
height 240
Tamaño de frame, hay algunas webcams que soportan 640x480 o incluso más, pero la mía no. Tener en cuenta que si se pone un tamaño muy grande de frame, las imágenes seràn más pesadas, y si hay mucho movimiento, puede ser problemático a la larga.
framerate 25
Numero máximo de frames que podrá capturar la cámara por segundo. Un valor muy grande, problemático de nuevo, por lo mismo que antes.
quality 85
Calidad de los frames en tanto por ciento, para los jpg's que guarda. 85 es el valor por defecto.
auto_brightness off
Puede ser una opción para los que tengan una webcam con auto brightness, esta opción regula automáticamente la luminosidad de las imagenes. Sin embargo no todas las webcam la soportan.
threshold 4500 
noise_level 64
Threshold y noise_level son parámetros que utiliza motion para calibrar la variación (en las imágenes) necesaria para lanzar un evento.
Threshold representa el número de pixeles que tienen que diferir de la anterior captura después del proceso al cual somete a las imágenes. El valor de 4500 es equivalente a decir que la imagen difiera en un 6% aprox. respecto de la anterior.
Noise_level es la cantidad de variación que se necesita, para que un pixel sea contado en el threshold.
Existen más parámetros de este tipo (Masking y despeckle).
brightness 200 
contrast 80 
saturation 0 
hue 0
Parámetros (por orden) de luminosidad, contraste, saturación y tono, serán variables dependiendo de donde este colocada la webcam, yo coloqué la webcam y haciendo prueba/error saqué esos valores.
ffmpeg_cap_new on 
ffmpeg_video_codec mpeg4
El primero para usar la librería ffmpeg para encodear al vuelo los videos, a partir de las imágenes. Y el segundo para escoger el codec con el que comprimirá el video.
target_dir /home/user/Desktop/Video_Vigilancia
Directorio donde guardar las imágenes y los videos producidos. (Comprobar permisos de escritura)
webcam_port 0 
webcam_localhost on 
webcam_quality 50 
webcam_maxrate 8
Los parámetros webcam_* hacen referencia a la posibilidad de habilitar un puerto para acceder con un navegador a lo que esta viendo la webcam.
  • port, es el número del puerto que queremos asignarle, si el puerto es 0, la opción queda deshabilitada.
  • localhost es para limitar el acceso. Si on, exclusivamente podrá acceder localhost. - quality es la calidad de los frames enviados al web. Si se va a usar la opción webcam y se tiene un ancho de banda limitado, no exeder este valor.
  • maxrate, cuando no ha detectado movimiento, envía solamente 1 frame por segundo al web. En caso contrario, envia como máximo este valor.
on_event_start sh /etc/motion/att-evento 
# on_event_end sh /etc/motion/end
Una de las mejores, cuando detecta un movimiento, ejecuta el valor, aquí lo uso para ejecutar el script de atención a evento. También existe la posibilidad de ejecutar algo cuando ya acabado ese evento.
gap 20
Es el tiempo en segundos que se quiere que espere desde que detecta el último movimiento, para que de por finalizado el evento, y pase a otro. El valor por defecto es 60. Nota: Para cada evento crea un video diferente, un valor como 20, es muy bajo y se producen gran cantidad de videos, pero así consigo que pase corto tiempo entre dos eventos eventualmente diferentes y poder antender los dos con el script.
post_capture 5 
pre_capture 5
Número de frames que se quiere capturar antes y después de la detección.
Se puede probar ...
motion -n
...si funciona todo correctamente, el parametro -n es para que motion arranque en modo non-daemon.

Pausa para disfrutar de un buen anticucho, un ceviche o una papa a la Huancaina y tomar un buen vaso de Chicha de Jora!

Ahora proseguimos

Script de atención a evento

En este apartado se presenta el primer script (de atenciòn a evento), aunque en lugar de reproducir sonidos, cada uno es libre de hacer mil mil variaciones, como por ejemplo: enviar un sms, reproducir video, enviar un email o porque no, href="http://www.regaletes.com/lanzador-misiles-p-320.html".
#! /bin/sh
 
SOUNDS="/etc/motion/sonidos" 
rango=10 
numero=$RANDOM 
let "numero %= $rango" 
case $numero in 
 
   0) play $SOUNDS/sirenas.mp3;;
  1) play $SOUNDS/horror1.mp3;; 
   2) play $SOUNDS/horror2.mp3;; 
   3) play $SOUNDS/horror3.mp3;; 
  4) play $SOUNDS/horror4.mp3;; 
   5) play $SOUNDS/horror5.mp3;; 
   6) play $SOUNDS/grito1.mp3;; 
   7) play $SOUNDS/grito2.mp3;;
   8) play $SOUNDS/disparos.mp3;; 
   9) play $SOUNDS/grito2.mp3;; 
 
esac

Aunque seguramente se pueda hacer mejor, este script ejecuta aleatoriamente uno de "http://shark.is-a-geek.com/ext/sonidos.tar.gz" . Estos mp3 (bajar y descomprimir en /etc/motion)

Script de presencia

Con el script de presencia se consigue activar motion automáticamente cuando cuando uno avandona la casa o departametno y que se desactive cuando uno retorna. No se profundiza en la configuración de Kdebluetooth (si se desea profundizar mas ir a http://gallir.wordpress.com/).
#!/bin/sh 
 
 
# This script connect/disconnect all Kopete sessiones   
# and execute motion for a capture  
# events cam, when the selected device is 
# visible/invisible.  
# Author: Mariano Lujàn (from Custom_Job) Modified: Shark 
#  
# This script will be called with one single parameter:  
# "run": The script should be executed  
# "configure": Lets the user configure the script. 
 
 
case "$1" in 
     run)
     if [ "x$FOUND_DEVICES" != "x" ] ; then
        killall motion 
                kdialog --passivepopup "Desactivada" 2 --title "Video Vigilancia" 
               dcop kopete KopeteIface connectAll || /bin/true 
               kdialog --passivepopup "Conectando" 2 --title "Kopete" 
 
           elif [ "x$LOST_DEVICES" != "x" ] ; then 
                dcop kopete KopeteIface disconnectAll || /bin/true 
                #dcop kmail MainApplication-Interface quit || /bin/true  
                kdialog --passivepopup "Desconectado" 2 --title "Kopete"  
               kdialog --passivepopup "Activada" 2 --title "Video Vigilancia" 
               motion 
           fi 
           ;; 
    configure) 
            # Simply run kedit let the user edit this script. 
            # A more sophisticated solution might use kdialog to hide  
            # the shell script from the user
            kedit "$JOB_PATH" 
            ;;
esac

III. Conclusiones (experiencia personal)

Motion es una gran aplicación que recomiendo probar si tienen ocasión, puede ser muy útil para algunos, estoy seguro.
Me he divertido muchísimo, tanto probando y instalando el sistema, como riendome de las caras que ponen "los intrusos" de mí habitación. Solo decir gracias a San Google por ayudarme a escribir esto.