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.
He encontrado algunos sitios donde hablan de motion [1] [2], también en bulma, aunque lo mejor para profundizar es la propia guía de motion.
Motion esta empaquetado en .deb i en .rpm, y tiene las siguientes dependencias:
| Librerias necesarias | Paquetes RPM | Paquetes Debian |
| libm, libresolv, libdl, libpthread, libc, ld-linux, libcrypt, and libnsl | glibc glibc-devel | libc6 libc6-dev libglib1.2 |
| libjpeg | libjpeg libjpeg-devel | libjpeg62 libjpeg62-dev ( opcional libjpeg-mmx-dev ) |
| libz | zlib zlib-devel | zlib1g zlib1g-dev |
Una vez instalado motion desde apt o como se prefiera, vamos a configurarlo, para explicar como, comentaré todo el archivo de configuración.
/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. Piensa que si pones un tamaño muy grande de frame, las imágenes pesan más, y la larga, si hay mucho movimiento, puede ser problemático.
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. Lo probé, pero daba saltos de casi blanco a casi negro. Aunque seguramente mi webcam no lo soporte.
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 entiendo que 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 vas usar la opción webcam y tienes un ancho de banda limitado, no te pases con 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 queremos 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 nos 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 queremos capturar antes y después de la detección.
Podeis probar ejecutando...
motion -n
...si funciona todo correctamente, el parametro -n es para que motion arranque en modo non-daemon.
|