Sistema de vigilancia mediante una WebCam y Motion

Motion es un programa GPL que funciona con v4l, nos permite usar nuestra WebCam como dispositivo de vigilancia. Esta disponible para Linux, BSD y MacOSX (!windows jeje).

En este artículo vamos a aprender cómo crear un pequeño sistema de videovigilancia con nuestra cam. Este sistema sólo capturará vídeo cuando detecte movimiento, y lo almacenará en formato avi a un directorio que luego podremos consultar. Además crearemos un pequeño servidor web de streaming con el que podremos visualizar nuestra Cam desde cualquier lugar del mundo.

Entre todo esto tambien se explicará brevemente como hacer funcionar nuestra cam, y se expondrán varios programas para utilizarla.

Instalación de la WebCam

Aqui teneis un buen link para la instalación de la WebCam: http://tldp.org/HOWTO/html_single/Webcam-HOWTO

  • Primero veamos que chip lleva nuestra cam con: lsusb
  • Ahora vamos a instalar el driver correspondiente, buscad en estas direcciones:
  1. Podemos utilizar los de Michel Xhaard que soportan 235 webcams: http://mxhaard.free.fr/spca5xx.html
  2. CPiA http://webcam.sourceforge.net/#cams
  3. QCE (Quick Cam express) http://qce-ga.sourceforge.net/#supported
  4. Para philips http://www.smcc.demon.nl/webcam
  5. Google.com ;-)

Recomiendo que utilizeis la primera opción en caso de que sea posible. Yo tengo una Logitech, Inc. Quickcam Express y utilizo el driver gspca que es un derivado del spca de Michel Xhaard.

  • Ahora cargamos el módulo que hayamos instalado: modprobe gspca
  • Deberiamos tener el archivo /dev/video0
  • También necesitamos que el Xorg tenga soporte para v4l (video4linux)

Software para probar la webcam

Aqui teneis una pequeña recopilación que he hecho de programas para webcam

camorama

Aplicación Gnome para webCams

Permite ver video mediante tu webcam y aplicar varios filtros de imagen. También puede subir capturas a un server ftp.

web: http://camorama.fixedgear.org

camstream

Nos permite:

* Utilizar un cómodo GUI

* Realizar capturas cada X tiempo

* Grabar imagenes y subirlas a un servidor Sus propositos:

* Video conferencia

* Grabar peliculas AVI y QuickTime

* Sistema de seguridad

web: http://www.smcc.demon.nl/camstream

xawtv

Es un conjunto de aplicaciones que originalmente fueron creadas para televisión, pero hoy en dia también soporta webcams.

Algunas de ellas son:

* streamer: permite grabar imagenes y peliculas

* webcam: captura imagenes y las sube a un servidor ftp o ssh

* pia: un simple reproductor de video

El binario "xawtv" es un pequeño gui que nos permite utilizar la mayoría de estas aplicaciones

web: http://linux.bytesex.org/xawtv

SDLcam

* Entorno gráfico (GUI)

* Aplicar varios filtros

* Subir las capturas a un servidor ftp

* Autocapturar imagenes

* Capturar video

web: http://sdlcam.raphnet.net

gqcam

Visualizar nuestra cam y guardar capturas

web: http://www.wirelesscouch.net/software/gqcam/

Otros

came: xawtv reescrito y con nuevas posiblidades http://linuxbrit.co.uk/camE
camsource: grabar imagenes de la webcam http://camsource.sourceforge.net
camserv: streaming mediante web http://cserv.sourceforge.net
spcaview: un simple programa para ver las webcam soportadas por el driver spca5xx

Enpezando con Motion

La web oficial de motion es: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome

Algunas de sus posiblidades son:
- Realizar capturas del movimiento
- Manejar multitud de camaras
- Hacer streaming a tiempo real
- Crear videos mpeg utilizando ffmpeg
- Realizar capturas cada X tiempo
- Ejecutar comandos al detectar movimiento
- Si la camara lo permite, seguir el movimiento
- Utilizar bases de datos MYSQL o PostgresQL para guardar las capturas
- Controlarlo mediante un navegador web
- Definir el nivel de CPU consumida
- Definir el nivel de sensiblidad de movimiento

Motion no dispone de entorno gráfico, supongo que esto hechará atrás a mucha gente, pero antes de ello debo decir que no es nada complicado hacerlo funcionar, y el hecho de que solo sea un pequeño demonio que corre en background le da una mayor flexiblidad. Yo por ejemplo lo tengo instalado en mi pequeño servidor linux que no dispone de X, y de esta manera puedo vigilar mi habitación desde cualquier lugar del mundo.

Instalación de Motion

Motion esta en la mayoría de los repositorios de las distintas distribuciones, pero yo recomiendo compilarlo e instalarlo manualmente.

Descargamos el paquete del código fuente desde: http://www.lavrsen.dk/twiki/bin/view/Motion/DownloadFiles

Requisitos

Necesitamos tener instalados las siguientes librerias:
libm, libresolv, libdl, libpthread, libc, ld-linux, libcrypt, libnsl, libjpeg, libz
En ubuntu y debian los paquetes necesarios son: libc6 , libc6-dev ,libglib1.2, libjpeg62, libjpeg62-dev, zlib1g, zlib1g-dev

Para poder grabar peliculas mediante ffmpeg necesitamos: libavcodec, libavframe
Y los paquetes son: ffmpeg ,libavcodec1,libavcodec1-dev

Compilación e instalación

tar xvzf motion-*
cd motion-*
./configur

Al final nos dira algo como:

OS : Linux
pthread Support: Yes
jpeg Support: Yes
V4L included: Yes
FFmpeg Support: Yes
MYSQL Support: Yes
PostgreSQL Support: No

Si algo aparece como NO y lo queremos, tendremos que instalarlo primero y luego repetir el configure
También es recomendable hecharle un vistazo a: ./configure --help

Ahora compilamos:

make

Si nos dice: "Build complete, run "make install" to install Motion!" Ha funcionado bien.
Entonces instalamos:

make instal

Configuración

Motion es muy configurable. La configuración que vamos a seguir es para conseguir un pequeño sistema de vigilancia con una WebCam.
Motion captura 1 frame cada X tiempo, y lo compara con el anterior, si se detecta que X píxels son distintos, considera que hay movimiento. Entonces, en nuestro caso, mientras dure el movimiento grabará un vídeo en formato avi. Además cada 10 minutos hará una captura de la imagen, esto nos servirá para asegurarnos de que motion ha estado funcionando correctamente.
También activaremos un pequeño servidor http de streaming con el que podremos ver en cada momento que esta pasando desde cualquier sitio del mundo donde haya internet.

Como ya he dicho no dispone de GUI, así que la configuración debe ser editando el archivo /usr/local/etc/motion.conf
Tenemos un ejemplo de archivo de configuración que renombraremos para utilizarlo como base:
cp /usr/local/etc/motion-dist.conf /usr/local/etc/motion.conf

Ahora lo editamos. Como podremos ver, esta todo bien explicado, asi que recomiendo una lectura entera del archivo. Seguidamente comentaré las opciones más interesantes, pero podemos verlas todas mejor explicadas en la web oficial: http://www.lavrsen.dk/twiki/bin/view/Motion/MotionGuideGettingItRunning

Configuración básica

daemon on Si queremos que inicie en modo demonio (background), para las primeras veces que lo ejecuteis mejor ponerlo a off para ver la salida
setup_mode off Si queremos que arranque en modo configuración, recomendable para la primera vez
videodevice /dev/video0 Nuestra camara
input 8 El tipo de dispositivo que estamos usando. 8 es para cámaras USB
rotate 0 Si queremos rotas la imagen, va en grados: 90, 180, 270...
width 320 La anchura. Esto dependera de lo que soporte nuestra cam. Para ello recomiendo probar con uno de los prgramas antes mencionados y ver hasta que tamaño podemos llegar.
height 240 La altura.
framerate 30 Los frames por segundo que se capturaran. Eso dependerá de la cualidad que le querais dar a la imagen de video. Yo utilizo 30.

Configuración de los filtros

Esots parámetros son muy importantes para conseguir una captura nítida y de buena calidad. Recomiendo que utiliceis un programa de los antes mencionados (camorama por ejemplo) para probar los distintos valores y encontrar el mejor para nuestra camara.

auto_brightness off Si queremos que motion regule el brillo de la camara. Recomendable no activarlo.
brightness 0 El brillo. Si tenemos auto_brightness activado, sera el valor medio en que se basará motion
contrast 0 El contraste. Si es 0, se utiliza el propio de la camara
saturation 0 La saturación. Si es 0, se utiliza el propio de la camara

Opciones de detección movimiento

threshold 1500 El número de pixels que deben cambiar para considerar movimiento
night_compensate on Para detectar movimiento en frames oscuros
pre_capture 20 El número de frames que queremos que se guarden anteriores al detectar movimiento
post_capture 20 El número de frames que queremos que se guarden posteriores al detectar movimiento
max_mpeg_time 0 Máximo tiempo seguido de captura de video
low_cpu 3 El número de frames que queremos que capture mientras no detecte movimiento. Recomendable un valor pequeño para CPU's lentas.

Imagen

output_normal off
Puede ser on, off, best, first
- off: no guarda imagenes al detectar movimiento
- first: solo guarda el primer frame
- best: solo guarda el de mayor movimiento
- on: guarda todas los frames donde se detecta movimiento

output_motion off Guardar las imagenes del movimiento. Estas constan sólo de los pixels donde se detecta movimiento. Puede ser curioso, pero no recomiendo activarlo.
quality 75 la cualidad de la imagen jpeg

Video

ffmpeg_cap_new on Utilizar ffmpeg para las capturas de vídeo
ffmpeg_cap_motion off Guardar el video de los pixels donde se detecta movimiento
ffmpeg_bps 400000 El bitrate de la captura de vídeo. Como más alto más calidad.
ffmpeg_video_codec mpeg4 El códec a utilizar

Snapshots

snapshot_interval 600 Guardará una imagen, aunque no haya movimiento, cada 600 segundos

Directorios

target_dir /var/motion El directorio donde motion guardará los videos y las imagenes

Servidores

- Servidor de straming: Un pequeño servidor http que nos permitirá ver en tiempo real la webcam
webcam_port 8081 El puerto donde escuchará el servidor
webcam_quality 50 La cualidad en que se mostrarán las imágenes
webcam_maxrate 8 El número máximo de frames que se mostrarán para los vídeos en streaming
webcam_localhost off Si queremos restringir el uso del servidor para uso local solo

- Servidor de control: Este es un pequeño servidor http que nos permite configurar motion en vivo.
control_port 8080 El puerto donde escuchará el servidor
control_localhost on Si queremos restringir el uso del servidor de control para el uso local
control_html_output on Para que la salida sea en formato html
control_authentication usuario:tu_pass Para definir el usuario y el password

Otros

on_event_start comando El comando que se ejecutará al detectar movimiento

Probando los resultados

Ahora solo nos queda iniciar motion: /usr/local/bin/motion -c /usr/local/etc/motion.conf
Como veremos se iniciará y mostrará lo siguiente (en el caso que no este configurado como demonio)

[0] Processing thread 0 - config file /usr/local/etc/motion.conf
[0] Thread 1 is from /usr/local/etc/motion.conf
[1] Thread started
[0] motion-httpd/3.2.7 running, accepting connections
[0] motion-httpd: waiting for data on port TCP 8080
[1] Started stream webcam server in port 8081

Cuando detecte movimiento mostrará un mensaje como

[1] File of type 8 saved to: /tmp/motion/01-20070707234646.avi

Y guardará el vídeo en el directorio que le hayamos indicado en la configuración

Si nos conectamos con nuestro navegador web al puerto 8081 veremos a tiempo real la WebCam
Y si nos conectamos al pueto 8080 tendremos un menú de configuración.

¡Cuidado! Es peligroso y poco recomendable dejar estos servicios abiertos al exterior, ya que se han detectado diversos bugs.
Una posible opción es utilizar apache. Le decimos a motion en la configuración que el tarjet_dir sea un directorio dentro de la raiz del apache (/var/www/motion). Luego dejamos apache corriendo y lo configuramos para que pida user y pass al intentar entrar en dicho directorio. Esto esta explicado en el siguiente link de esta misma web: Zona privada con apache

Conclusiones

Motion nos ofrece un entorno muy poderoso y ámplio. Podemos desde hacer un pequeño sistema de vigilancia como el explicado anteriormente, o un complejo sistema con varias cámaras (incluidas netcams), y una base de datos como Mysql o Postgresql para almacenar todo el contenido. El hecho de que nos permita ejecutar comandos al detectar movimiento, lo hace todavía más poderoso. Podemos crear un script por ejemplo que envie un mail, un sms, llame por telefono o incluso active una alarma.
Supongo que en el futuro alguien creará un GUI para la configuración del programa, ya que editar el archivo manualmente es un poco engorroso.

Un saludo

Via | dabax.net

No hay comentarios:

Tira Ecol

Tira Ecol

Contabilizando Visitas..... y tu eres una de ellas.....Gracias XD

 
ir arriba