Recientemente he adquirido una tarjeta capturadora de vídeo de bajo coste en Ebay con la cual he ampliado el sistema de video pajarovigilancia de casa. Lo que empezó con una cámara en el comedero de pajaros de la terraza, ahora incluye las salamanquesas del jardín, una de las cajas nido y una vista general del jardín.

Evidentemente el coste de montar este tinglado puede aumentarse todo lo que se quiera, pero si no necesitais una calidad impresionante y os dais un poco de maña con el soldador de estaño podeis ahorrarse un dinero considerable y montar un sistema de videovigilancia con detección de movimiento muy versatil por poco dinero.

Como me consta que nos visitan algunos tentados de montarse un sistema casero os comento por aquí como lo hice en mi caso/casa y algunos aspectos acerca de los materiales y sus precios.

Idea: montar un sistema de videovigilancia casero, de hasta 4 videocamaras y conectadas a un ordenador personal con Linux/openSuSe y Motion como software de detección de movimientos y grabación.

Observaciones: Creo (?¿) que la legislación española impide la grabación de la vía pública por estos sistemas de videovigilancia privados, sin autorización y sin advertencia pública de que se está grabando. Desconozco si esto es así ó los aspectos concretos del tema puesto que no es mi intención grabar la calle ó algúna zona pública (solamente la cámara que tengo enfocada al jardín podría tener algún tipo de impedimento, pero tengo intención de quitarla de ahí en breve). Asi es que si pretendeis grabar vuestro jardín, terraza, balcón u otros, enterarse antes de los aspectos legales del asunto.

Hardware: Tarjeta capturadora de vídeo

Capturadora de vídeo 4 puertos

Posiblemente este sea el aspecto más delicado de cara a montar este sistema en un PC con GNU/Linux. Solo hay que tener la precaución de adquirir una tarjeta capturadora de vídeo compatible.
La opción mas segura y barata es adquirir una tarjeta capturadora “genérica” con chipset BT878. En Ebay podeis encontrarlas por unos 20 euros.
Aspectos a tener en cuenta con estas tarjetas:

  • Suelen necesitar 4 adaptadores (uno por cada entrada de vídeo) de BNC a RCA. Normalmente suelen ir incluidos en el pack, sino podeis solicitarselo al vendedor o comprarlos en algún centro de electrónica especializado.
  • Suelen dar una tasa de 30 fps (fotogramas por segundo) EN TOTAL. Es decir, si conectais una sola cámara la vereis a 30 fps, si conectais dos cámaras la tasa se reparte (aprox 10-12 por cámara) y si conectais 4 cámaras pues vereis cada una de ellas a unos 5 fps. Esta última no es como para hacer grandes películas, pero para detectar movimiento, tomar fotogramas sueltos ó realizar pequeños vídeos puede ser suficiente.
  • La parte importante de estas tarjetas es el chip que incorporan. El más fiable y compatible son los bt848, bt878 ó bt878A. Dependiendo del número de chip que incorpore la tarjeta más cámaras soporta y mayor FPS alcanza. Las teneis con 2 chips que soportan 8 cámaras ó con 4 chips para 16 cámaras.
  • Si quereis tener varias cámaras y necesitais asegurar una tasa de FPS alta, podeis instalar varias tarjetas, claro, siempre y cuando tengais puertos PCI libres. Con 2 tarjetas de estas podriais conectar hasta 8 cámaras ó 4 con un FPS decente.
  • El chip Bt878 suele ser el que llevan las tarjetas de TV mucho más fáciles de encontrar (y normalmente más caras). Quizás podais comprar alguna de segunda mano. Estas tarjetas para ver TV en el ordenador suelen disponer de una entrada de vídeo analógico que permiten conectar un aparato de video a través de ella.

Hardware: Las cámaras

IMG_0638

Entre las cámara teneis montones donde elegir: cámaras CMOS con cables ó sin cables, a color ó B/N, con infrarrojos ó sin infrarrojos, microcámaras ó enormes. Podeis encontrar cámaras decentes por unos 30 euros ó menos. Casi todas incluyen micrófono, un transformador de 8-9-12 V y un cable con conectores RCA que casi con seguridad es corto.

He probado una de estas cámaras sin cables pero el resultado no era bueno. La cobertura sin interferencias era de unos 12-15 metros en linea recta. Puesto que la cámara pretendemos que está monitorizada por un detector de movimiento, las distorsiones graves en la imagen deben ser mínimas de lo contrario se detectarán movimientos inexistentes. Una vez decidido que la cámara iba a estar conectada por cable con el ordenador, estaba fuera de lugar aquellas cámaras equipadas con una pila de 9V como fuente de alimentación (una vez que tengo que tirar de cable, lo mismo me dá tirar un cable de 2 hilos o de 3 ), pero es esta una opción interesante: cámara inalambrica con pila de 9V, lo que permitiría colocarla casi en cualquier sitio (con vistas al futuro me gustaría tratar de instalar cámaras inalambricas en las cajas-nido y alimentadas por pequeñas placas solares situadas sobre las propias cajas-nido. De esta manera podría colocar un par de cámaras sin mantenimiento, autónomas los 365 dias del año y en un lugar de dificil acceso).

La instalación de las cámaras no tiene secretos, pero si alguna recomendación:

  • Tratad de situarlas con la fuente de luz arriba/derecha. Es bueno que los objetos produzcan sombras visibles desde la posición de cámara. La luz desde detras reduce estás sombras y dificulta la visión y la apreciación de profundidad.
  • Si la luz incide sobre el objetivo de la cámara, sería interesante procurarle un “parasol” que evite destellos en la imagen y redución del contraste. Un tubito de carton arrollado al objetivo suele ser suficiente.
  • Si ván a estar poco accesibles tratad de ubicarlas donde se ensucien poco, especialmente la lente. Alejadas de salpicaduras de agua, tierra, etc…
  • Siempre protegedlas de la lluvia, incluso cuando la cámara diga que es resistente al WeatherProof, es mentira. Nunca va llover tanto como cuando os dejeis la cámara al aire libre.
  • La mayoría de las cámaras traen el objetivo atornillado y enfocado a infinito. Ajustad el enfoque antes de colocar la cámara, si es necesario aflojando el tornillo.
  • Ancladlas bien. Parece mentira lo que el viento puede llegar a mover un chisme tan pequeño.
  • La mayoría dan corriente cuando las tocas. Poco pero desagradable. No le paseis la lengua.

Hardware: Cableado y transformadores

Aunque parezca mentira esta es la parte que más trabajo me ha dado: encontrar un cable apropiado y a un precio razonable y soldarlo. Despues de dar muchas vueltas creo que la opción más económica es comprar este tipo de cable preparado. Las alternativas al por mayor que he encontrado rondan los 0,6 – 0,7 euros/metro a lo que hay que sumar los conectores RCA y la mano de obra de soldadura (si sacais cuentas vereis que sale casi igual)

Creo que sale rentable comprarlos preparados, si bien es cierto que dependiendo de vuestra instalación y de los terminales de la cámara es posible que os veais obligados a cortar y cambiar RCA macho por RCA hembra, ó similar.

Si os decidis a comprar el cable a medida, buscad un cable lo más fino y maleable posible con tres hilos: Rojo y negro para la alimentación y Amarillo para vídeo (si quereis audio sumad un hilo más).

De las 3 cámaras conectadas por cable que tengo instaladas, la más alejada se conecta mediante un cable de 30 metros (camara 3: 2 porciones de 15+15 mts), otra de 25 ( camara 2: 1 tirada) y otra de 20 (camara 4: 15+5) y la unica reducción de calidad viene dada por que las cámaras 2 y 3 comparten el mismo transformador de 8V (produce una ligera banda horizontal en ambas imágenes).

Cada uno optará por la considere su mejor solución. Puesto que mis cámaras están instaladas en sitios alejados de la corriente eléctrica y para evitar tener trasnformadores expuestos a la intemperie (con su correspondiente enchufe y alargador de enchufe), todas las cámaras reciben un cable alargador a través del cual les llega sus 8-12V y emiten señal de vídeo/audo. De esta manera quedan junto al ordenador los transformadores y las entradas de cables de vídeo/audio de todas las cámaras y fuera de la habitación solo se reparten cables fijados con abrazaderas de plástico. Es bastante más limpio y ordenado.

Software: Activar la capturadora de vídeo

Screenshot capturando cámaras

Una vez conectada la tarjeta capturadora es probable que vuestro Linux se pase un rato en el primer inicio tratando de encontrar el módulo que debe cargar, y probablemente lo haga mal. Estas tarjetas “genéricas” suelen ser del tipo PICO 2000 compatible y debeis especificar manualmente que módulos se han de cargar para acceder a ellas.
Para hacer esto (todas estas acciones se realizan como administrador/root):

  • Asegurate de descargar el módulo bttv si estuvise cargado (en consola: rmmod bttv)
  • Crea un archivo llamado bttv con una línea de texto en la que aparece: options bttv card=77
  • Guardalo en /etc/modprobe.d/
  • Con la línea options bttv card=77 le decimos al sistema cual es el modelo de nuestra tarjeta ( 77=GrandTec Multi Capture Card (Bt878) ). La lista de opciones podemos ampliarla añadiendo tambien si nuestra tarjeta dispone o no de sintonizador (“tuner”) o corrigiendo aspectos de vídeo como contraste, brillo, gamma, etc….
  • La lista completa de tarjetas reconocidas por el módulo Bttv.
  • La lista de opciones que podeis incorporar la obteneis haciendo modinfo bttv en una consola.
  • De esta manera si queremos decirle al modulo que nuestra tarjeta no dispone de sintonizador (y que no pierda el tiempo buscandolo) bastaría con poner en /etc/modprobe.d/bttv el contenido options bttv card=77 tuner=-1
  • Si disponeis de varias tarjetas controladas por el módulo Bttv (como es mi caso) podeis especificarlo con options bttv=10,77 tuner=4,-1
    De este modo especificamos que el primer chip es un 10=Hauppauge (bt878) y el segundo un 77=GrandTec Multi Capture Card (Bt878). Un identificador por cada chip
  • Una vez creado el correspondiente archivo bttv con las opciones del módulo, procede a cargarlo con modprobe bttv. Al terminar haz: dmesg | grep bttv , deberías ver algo como:

bttv: Bt8xx card found (0).
bttv0: Bt878 (rev 17) at 0000:01:07.0, irq: 19, latency: 32, mmio: 0xec100000
bttv0: detected: Hauppauge WinTV [card=10], PCI subsystem ID is 0070:13eb
bttv0: using: Hauppauge (bt878) [card=10,insmod option]
bttv0: gpio: en=00000000, out=00000000 in=00ffffdb [init]
bttv0: Hauppauge/Voodoo msp34xx: reset line init [5]
bttv0: Hauppauge eeprom indicates model#44804
bttv0: tuner type=55
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: PLL: 28636363 => 35468950 .. ok
bttv: Bt8xx card found (1).
bttv1: Bt878 (rev 17) at 0000:01:08.0, irq: 16, latency: 32, mmio: 0xec102000
bttv1: using: GrandTec Multi Capture Card (Bt878) [card=77,insmod option]
bttv1: gpio: en=00000000, out=00000000 in=00f360ff [init]
bttv1: tuner absent
bttv1: registered device video1
bttv1: registered device vbi1

Según lo anterior, puedes ver que la primera PCI se ha identificado como una bttv0: detected: Hauppauge WinTV [card=10] y la segunda como bttv1: using: GrandTec Multi Capture Card (Bt878) [card=77,insmod option], y que se han registrado los dispositivos como video0, vbi0, video1, vbi1

La primera PCI (10, Hauppauge) dispone de un puerto de captura, la segunda (77) dispone de 4 puertos de entrada que puedes visualizar conmplayer -tv device=/dev/video1:input0:driver=v4l2 tv://
mplayer -tv device=/dev/video1:input1:driver=v4l2 tv://
mplayer -tv device=/dev/video1:input2:driver=v4l2 tv://
mplayer -tv device=/dev/video1:input3:driver=v4l2 tv://

Software: Conectar con Motion

Una vez realizados estos pasos, conectadas las cámaras y probadas, podemos añadirlas a Motion y dejar a su cargo la “vigilancia” de eventos.
Sobre la configuración y funcionamiento de Motion podeis consultar
los apuntes anteriores al respecto.

Software: Conectar con las cámaras via vloopback

Al ejecutar Motion el flujo de datos de las cámaras queda bloqueado por el programa y no es accesible por ningun otro, con lo cual no es posible ver las imágenes que están emitiendo las cámaras y está procesando Motion a no ser lo hagamos accesible desde una página web.
Para solventar esto, el equipo de Motion desarrolló un módulo que se encarga de recibir el flujo de imágenes despues de ser tratadas por Motion y ponerlas nuevamente disponibles como si se tratase de un nuevo dispositivo.

Para esto lo que hariamos sería crear dos nuevos dispositivos de vídeo por cada cámara. Es decir, si tenemos una tarjeta instalada con 4 cámaras conectadas, deberemos tener /dev/video0. Para poder acceder a esas 4 cámaras creamos 8 nuevos dispositivos de vídeo así (como administrador/root):mknod /dev/video1 c 81 1
mknod /dev/video2 c 81 2
mknod /dev/video3 c 81 3
mknod /dev/video4 c 81 4
mknod /dev/video5 c 81 5
mknod /dev/video6 c 81 6
mknod /dev/video7 c 81 7
mknod /dev/video8 c 81 8

Probablemente debas aplicar los permisos correctos, tu usuario debería pertenecer al grupo video y hacer chown :video /dev/video* y chmod g+rw /dev/video*

El modulo vloopback que vamos a instalar utilizará los video1, video3, video5, video7 para introducir el flujo de las 4 cámaras devuelto por Motion y este flujo, ahora sí, podrás accederlo a través de /dev/video2, /dev/video4, /dev/video6, /dev/video8

Ahora solo falta instalar vloopback: Descargalo desde esta página.tar -xvzf vloopback-1.1.tar.gz
cd vloopback-1.1
su
make
make install

Una vez instalado el nuevo módulo vloopback tienes que añadir una nueva opción en la configuración de cada una de tus cámaras conectadas a Motion. Deten la ejecución de Motion, edita el archivo conf y añade la opcion video_pipe – (el guión indica a motion que pase el flujo de imágenes al primer dispositivo /dev/video que esté libre), así con cada uno de los archivos de las cámaras.
Carga el nuevo módulo y reinicia motionsu
modprobe vloopback pipes=4 dev_offset=1
motion

Al cargar el módulo vloopback le pasamos las opciones pipes (número de tuberias que se van a crear, compuesta cada una de ellas por 1 dispositivo de entrada y otro de salida de datos) y dev_offset (indice de la primera tubería a crear, es decir saltandose la primera, /dev/video0, que ya estaba creada)

Ahora si que podemos acceder al flujo de imágenes que está analizando motion en tiempo real y utilizarlo con cualquier otro programa como un visor de vídeo, servidor de streaming, grabador, ó incluso un nuevo Motion. :)

Para visualizar el flujo podeis usar:xawtv -nodga -c /dev/video2
xawtv -nodga -c /dev/video4
xawtv -nodga -c /dev/video6
xawtv -nodga -c /dev/video8

Más info: