
Esta primavera estuve poniendo la webcam a los canarios mientras criaban, fue divertido seguir durante un par de meses el crecimiento de los polluelos. En aquella ocasión hice uso de Spcatools un servidor de videostreaming para Linux.
Ahora, por motivos bien diferentes he vuelto a conectar la cámara. Otro objetivo, otro software.
En esta ocasión estoy usando Motion, software para Linux especialmente diseñado para detectar movimientos a través de la webcam y ejecutar eventos.
Viendo la secuencia de capturas que hice hace unos dias es facil comprobar que “motion” pretendía detectar en casa.
Los fotogramas están tomados en el patio de casa, al pie del limonero. Pero el “problema” está ya solucionado
Motion funciona como la mayoría de los servidores de webcam: se lanza el programa, este detecta la webcam y vuelca las imágenes a través de un puerto indicado en el archivo de configuración para que estas sean accesibles a traves de la web.
La particularidad de Motion es que compara al vuelo las imágenes captadas en busca de cambios entre fotogramas consecutivos. Si la diferencia de pixels modificados entre dos fotogramas es superior al “threshold” (umbral) establecido en el archivo de configuración se disparan los eventos programados.
Normalmente estos eventos suelen consistir en sencillos scripts que ejecutan tareas, del tipo: “Guardar imagen como xxxx.jpg en la carpeta yyy“, “Subir imagen al servidor ftp”, etc… esto solo está sujeto a la imaginación del usuario, las posibilidades son muy extensas: apaga el ordenador si alguien se acerca.
Además, entre otras posibilidades, Motion viene preparado para capturar imágenes de camaras web ajenas, accesibles por internet, de tal manera que podamos “vigilar” lo que muestran otras webcams y programar el ordenador para que actue en consecuencia.
Descarga he instala la última versión de Motion:
motion-3.2.8.tar.gz
Si preferis no tener que compilar he preparado un RPM (sin soporte para BD) que podeis descargar desde:
http://google.trebol-a.com
Crea una carpeta de trabajo y copia el archivo de configuración de Motion a ella. El archivo de configuración a copiar es “motion.conf” y lo tendras en /etc/motion/ ó /usr/local/share/doc/motion-3.2.8/examples/
Motion no tiene interfaz gráfica de control ó configuración, todas las opciones están incluidas en el archivo de configuración y desde consola solo debeis lanzar el programa indicando la ruta al archivo motion.conf y el modo “daemon”.motion -c /ruta/del/archivo/motion.conf -n .
Una vez lanzado el programa es posible modificar parámetros Motion en tiempo de ejecución accediendo al panel desde nuestro localhost:8801 (o el puerto que hayais indicado), y cambiando desde los valores de nuestro motion.conf. Dispone tambien de lal opción de “Write“: escribir los cambios realizados en el archivo de configuración.

Ventanas de configuración y visualización de Motion via web en modo setup. La imagen azul y negra muestra el movimiento detectado al pasar la mano por delante de la webam.
Si bien el archivo de configuración motion.conf es bastante auto-explicativo, os comento algunos de los parámetros que debeis personalizar así como con los que jugar con la configuración hasta lograr la idonea: que dispare los eventos solo en la situación deseada.
setup_mode off
Al activar setup_mode las imágenes muestran los pixel modificados entre fotogramas y que han provocado el “disparo de eventos”.
Lo normal es que este valor esté desactivado (off) pero puede ser util encenderlo al principio para “afinar” la sensibilidad de la cámara al detectar movimientos.
videodevice /dev/video0
La dirección que define el dispositivo de webcam. A no ser que lo tengais personalizado ó tengais varias webcams, el valor por defecto es /dev/video0
width 320
height 240
El tamaño de la imagen de captura de la webcam tanto para mostrar via web como para guardar en disco. Este valor estará limitado por vuestra webcam.
framerate 2
minimum_frame_time 0
Al detectar movimiento Motion capturará “framerate” fotogramas y dejará pasar “minimum_frame_time” segundos antes de volver a disparar.
Valores de “framerate” muy altos provocan más consumo de memoria y CPU, y lógicamente están limitados por la webcam y su configuración. En mi caso, mi logitech Quickcam apenas dá 10-11 fps.
auto_brightness off
Se supone que con este modo se regula el brillo de la cámara de forma automática. En mi caso al activarlo provoca una continua subida-bajada del brillo de la imagen bastante molesto.
No funciona del todo bien.
threshold 1500
Número de pixels que han de cambiar para considerar que ha habido movimiento. Este valor dependerá de la escena que esteis capturando. Para el video que podeis ver arriba, el valor de threshold era de 150. De este modo, Motion comenzaba la captura apenas asomaban el hocico por el fondo del agujero.
Evidentemente, valores muy bajos darán “falsas detecciones” en situacion de mucho viento, pequeños objetos en movimiento (hojas, una rama balanceandose…) y cambios bruscos de iluminación, etc….
lightswitch 0
Los falsos positivos por cambios bruscos en la iluminación de la escena pueden ser controlados por este parametro. 0 (cerro) lo desactiva, 100 lo hace muy poco sensible a cambios de luz.
Depende de la situación y la escena el que este parámetro sea util. Un valor muy alto, puede provocar que Motion no reaccione al entrar en escena alguien con una camisa blanca, por ejem.
minimum_motion_frames 1
¿cuantos fotogramas deben de cambiar para que se dispare el evento?
Si lo quereis capturar es un objeto rápido poned un valor bajo, si es un objeto lento ó viene “de frente a cámara” ponedlo alto (10)
pre_capture 3
Motion guarda los fotogramas anteriores al fotograma de trabajo, de tal manera que al detectar movimiento estos puedan ser incluidos en la secuencia de fotos/video.
De esta manera, si el paso de alguien por delante de la cámara dispara el evento, dispondremos de las imágenes inmediatamente anteriores a que se produjera el evento.
Utiliza valores bajos preferiblemente.
post_capture 0
Idem del anterior pero a la inversa. Una vez finalizada la detección ¿cuantos fotogramas más se incluirán en la captura?
output_normal on
Las opciones son
on: al detectar movimiento se guardan las imágenes
off: al detectar movimiento NO se guardan imágenes
first: al detectar movimiento guarda solo la primera imagen
best: al detectar movimiento guarda aquella imagen que más movimiento muestra
snapshot_interval 0
Ademas de capturar imágenes al detectar movimiento, Motion puede realizar capturas periódicas independientemente de que haya ó no movimiento. Indica aquí el intervalo en segundos entre capturas.
snapshot_filename %v-%Y%m%d%H%M%S-temporizador
Nombre que recibirá el archivo generado por “snapshot_interval“
jpeg_filename %v-%Y%m%d%H%M%S-%q
Nombre que recibirá el archivo generado por la detección de movimiento.
webcam_port 8081
Puerto de tu ordenador desde el cual podrás acceder a las imágenes tomadas por la webcam. Recuerda abrirlo en el Firewall si vás a acceder desde fuera ó deseas hacerlo público.
control_port 8080
A través de este puerto, y previa autentificación podras acceder al archivo de configuración de Motion para alterarlo durante la ejecución, para corregir brillo, contraste, texto sobreimpreso en el fotograma, o “disparar” la cámara de forma manual.
control_localhost off
La opción por defecto (on) impide el acceso al servidor de control de Motion desde cualquier otro ordenador que no sea localhost. Ponlo en OFF para poder acceder desde fuera.
control_authentication usuario:contraseña
Si desactivas la opcion control_localhost aqui debes indicar el usuario y contraseña solicitados para acceder al panel de control web.
on_event_start value
on_event_end value
on_picture_save value
on_motion_detected value
on_movie_start value
on_movie_end value
Casi al final del documento disponeis de una serie de valores para configurar el comportamiento de Motion al “comenzar un evento” “al finalizar un evento” “al guardar una imagen” “al detectar movimiento” “al comenzar una grabación” y “al finalizar una grabación”.
Si no quereis hacer nada especial, solo grabar imágenes al detectar movimiento, estos parámetros estarán comentados (;)
Si deseais que Motion os envie una imagen por correo cuando se detecte movimiento podeis añadiron_picture_save echo "Captura realizada, esta es la imagen:" | mail -s "Avisos de Motion" -a %f micorreo@servicor.com
Impresionante, me gusto mucho el efecto.
Buenas amigo, me agrado encontrar este articulo ya que estoy trabajando en un proyecto para la universidad sobre videovigilancia via web. Tengo algunas dudas al respecto y espero que puedas ayudarme. Necesito conectar 2 webcams, importa en algo que sean identicas ? como hago en el archivo motion.conf para poner ambas webcams y poder trabajar con ellas ? Me gustaría algo asi como lo tienes en la pagina con el comedero de pajaros y el nido de canarios. Poner en mi web 2 enlaces que muestren el video en tiempo real de las camaras….!!!! espero su pronta respuesta
Hola Daniel,
no hay ningun problema con que las cámaras sean diferentes. Cada cámara es un hilo (thread) diferente con su propia configuración.En mi caso estoy usando una webcam Logitech conectada por USB y una cámara IP innalambrica accesible a través del router. Dos configuraciones completamente dispares.
Es muy sencillo ejecutar MOTION con varias cámaras. Necesitas un fichero de configuración principal (motion.conf) que indica las opciones de configuración generales del sistema y las comunes a todas lás cámaras y un fichero de configuración para cada una de las cámaras (camara1.conf, camara2.conf, etc…) que incluye las opciones propias de cada una de las cámaras.
Al final del archivo Motion.conf indicas mediante la opción “Thread nombre_fichero”, uno por cada cámara.
Luego inicias Motion llamando al archivo principal:
motion -c /home/motion.conf
Si quieres echar un vistazo a los archivos CONF que estoy usando los puedes descargar desde:
http://webcam.trebol-a.com/motion.conf
http://webcam.trebol-a.com/camara1.conf
http://webcam.trebol-a.com/camara2.conf
No dejes de echar un vistazo a este proyecto que es probable que se parezca a lo que andas buscando: http://code.google.com/p/kmotion/
Muchas gracias Trebol-A, voy a intentar lo que me dices y luego te digo como me fue…..ahh y cuento con 2 webcams Logitech QuickCam Chat, identicas (mismo modelo). Revise y dice que si son soportadas. Gracias
Ah, vale. Te entendí la pregunta al revés, si había algún problema con que NO fuesen iguales. ![]()
Trebol-A, estuve probando para instalar mi camara y realmente no pude. Soy nuevo en Linux, estoy usando la distribucion Ubuntu 8.0.4 hardy heron….no se si tengas un manual o algo de ayuda para hacer la instalacion de la camara ? es una Logitech QuickCam Chat. Disculpe la molestia
Ya logre configurar la camara, pero lei por un foro que una vez configurada la camara y el motion.conf, podia visualizar la camara en un explorador con solo poner: http://miDirIP/8000, pero no me resulta…!!!! ya tengo el servidor apache configurado. Como hago para poder visualizar en mi firefox el video de la camara ????? ahh otra cosa, los ficheros camara1 y camara2, los puedo utilizar asi mismo con mis camaras o tengo que cambiar algun parametro dependiendo de los modelos de las camaras ??? dentro de mi carpeta MOTION me sale: motion.conf, thread1, thread2, thread3, thread4….
Daniel, la configuración e instalación de la cámara y MOTION son dos cosas diferentes.
Una vez tengas la webcam conectada y completamente funcional en tu Linux, editas el archivo de configuración para dicha cámara e incluyes los datos de dicha cámara, a saber: el device en que está instalada la cámara (por defecto /dev/video0 ) y el puerto en que quieres mostrar dicha cámara (por defecto creo que era 8881).
Una vez hecho eso, teniendo la camara conectada y los archivos de motion configurados, ejecutas MOTION.
Si todo vá correctamente, lo que hace motion es volcar al puerto indicado la imagen capturada por la webcam despues de procesarla.
Para visualizar esa imagen se suele usar un aplicación java (cambozola.jar) que lee el flujo de datos y los muestra en un html en el que se incrusta.
Como lo que enviar MOTION es un flujo de MJPEG para visualizarlo debería bastarte con apuntar a KONQUEROR al puerto de tu localhost que indicaste en el archivo de configuración, por ejemplo: http://127.0.0.1:8881/
Buenos dias Trebol-A, sigo con el problema….ya tengo la camara operativa y ya configure Motion. Como estoy probando con una camara primero, solo configuro el fichero Motion.conf.
En Live Cam Server, tengo:
# The mini-http server listens to this port for requests (default: 0 = disabled)
webcam_port 8081
# Quality of the jpeg images produced (default: 50)
webcam_quality 50
# Output frames at 1 fps when no motion is detected and increase to the
# rate given by webcam_maxrate when motion is detected (default: off)
webcam_motion off
# Maximum framerate for webcam streams (default: 1)
webcam_maxrate 1
# Restrict webcam connections to localhost only (default: on)
webcam_localhost off
# Limits the number of images per connection (default: 0 = unlimited)
# Number can be defined by multiplying actual webcam rate by desired number of seconds
Y en el HTTP Based Control, tengo:
# TCP/IP port for the http server to listen on (default: 0 = disabled)
control_port 8080
# Restrict control connections to localhost only (default: on)
control_localhost off
# Output for http server, select off to choose raw text plain (default: on)
control_html_output on
# Authentication for the http based control. Syntax username:password
# Default: not defined (Disabled)
; control_authentication username:password
# Actual webcam rate is the smallest of the numbers framerate and webcam_maxrate
webcam_limit 0
Despues pruebo en mi explorador con: http://190.39.7.249/8081 me sale:
Not Found
The requested URL /8081 was not found on this server.
Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.1 with Suhosin-Patch Server at 190.39.7.249 Port 80
Claro, estás accediendo al puerto por defecto de tu servidor web, al “Port 80″, y tienes que dirigir el navegador al puerto 8081, es decir, debes apuntar el navegador a http://127.0.0.1:8081
Utiliza la dirección que te posteo (http://127.0.0.1:8081), tu direccionn local para hacer las pruebas iniciales, cuando todo te funcione haz las pruebas con tu dirección publica (http://190.39.7.249:8081) para la que (entre otras cosas) necesitarás abrir el cortafuegos.
Bueno realmente no se que esta sucediendo aqui, pruebo como me dices, con la direccion: http://127.0.0.1:8081 y ahora me da el siguiente error:
Falla de conexión
Firefox no puede establecer una conexión con el servidor en 190.39.7.249:8081.
Aunque el sitio parece válido, el navegador no puede conectarse.
* ¿Puede ser que el sitio no esté disponible temporariamente? Intente nuevamente después.
* ¿No puede navegar otros sitios? Verifique la conexión a la red de su computadora.
* ¿Su computadora o red están protegidas por un firewall o proxy? Una configuración incorrecta puede interferir con la navegación
De verdad disculpas por tantas preguntas tontas, pero ando aqui preocupado ya que no me esta funcionando. Gracias de antemano. Por casualidad tienes cuanta hotmail ????
Daniel, antes de nada deberias levantar tu servidor Web y asegurarte que funciona correctamente.
Si el navegador te dice: “no puede establecer una conexión con el servidor en…”, una de dos ó no tienes el servidor Web funcionando ó tratas de acceder a él atraves de tu IP pública (190.39.7.24) y el cortafuegos no te deja.
Si todo vá correctamente, al abrir la dirección http://127.0.0.1 ó http://127.0.0.1:80 deberías ver una página en blanco de dice algo como “It Works!” informando de que tu servidor Web está funcionando correctamente. Una vez conseguido eso asegurate que este servidor web tuyo es accesible desde fuera a través de tu dirección IP http://190.39.7.249. Y una vez echo eso, vuelves a la configuración de Motion.
El servidor funciona perfecto mediante la direccion http://127.0.0.1 (IT WORKS!)…como se que el cortafuegos no me permiter accesar al servidor ??? como configurarlo para que me da acceso al servidor ????
Otra cosa, estuve leyendo en unos foros, con la version que tengo Ubuntu 8.04, dice que el cortafuegos (ufw) arranca desactivado. Si es asi, no creo que sea el cortafuegos. Que dices ?
Hola Daniel,
ahí no te puedo ayudar, no conozco como funciona el cortafuegos de Ubuntu, imagino que será IPTABLES y me extrañaria mucho muchisimo que el cortafuegos, por defecto, esté desactivado. Supongo que en el foro lo que dicen es que el puerto web (80) del cortafuegos está desactivado, es decir, cerrado, pero no desactivado.
Una pregunta, para poder ver el video de la webcam en el explorador, por casualidad tengo que correr motion ? me explico, poner en la terminal: motion -n y luego ir al explorador y accesar a la direccion http://127.0.0.1:8081 ???? en un foro explicaban la instalacion de motion y para probar hacian lo que dije anteriormente. No se si tenga algo que ver con el problema que presento. Gracias Trebol-A
No, al lanzar motion con la opcion -n lo que haces es evitar que el programa se ejecute en “modo daemon” (la opcion por defecto) de tal manera que mientras se esté ejecutando emita en consola las acciones y eventos que tienen lugar. Al iniciarlo de este modo puedes depurar y afinar su funcionamiento y configuración. Una vez lo tienes bien configurado a tu gusto, lo inicias sin esa opción para que se ejecute en segundo plano (y de este modo poder cerrar la consola desde donde lo lanzaste).
Si por “ver el video” te refieres a conectar y visualizar a la imagen que sirve MOTION en el puerto 8081, lo que necesitas es un “visor de flujo mjpeg”. Para eso se suele usar la aplicación JAVA que te comentaba (cambozola.jar, buscala en google y mira los ejemplos de uso). Con este JAVA te creas una pequeña página web que la incluya ya podrás acceder a ver la imagen servida por MOTION.
Podría bastante tambien crear un html minimo que contenga
img src=’http://127.0.0.1:8081′
Con eso debería bastar para ver algo
Ok. Bueno, lo que quiero saber ahora es si para las 2 webcams que muestras en esta pagina, usas el Cambozola.jar ??? Eso es lo que quiero, tener 2 webcams y poder ver el video en vivo por internet desde cualquier parte. Como lo tienes tu es perfecto, si me puedes aconsejar como hacerlo seria perfect. No se si tengas algun codigo o script de ejemplo por ahi que puedas facilitarme…..Gracias Trebol-A
Hey trebol-A, ya estas de vuelta ? espero que si….amigo necesito tu ayuda, espero respondas a ver si ya estas otra vez disponible. Gracias
Hola Daniel,
para lo que comentabas acerca del uso de Cambozola.jar, lo unico que tienes que hacer es destripar cualquier página que lo use y ver como insertan la etiqueta EMBED, no hacen falta más código o scripts que el que puedas ver en la web.
Hey Trebol-A,
Mira sabes que la pagina http://www.charliemouse.com no me quiere abrir desde hace dias. Esto influje a la hora de usar el Applet para el uso del Cambozola.jar ????
Trebol-A, una pregunta…para que el Cambozola funcione bien, tengo que tener el archivo cambozola.jar en el directorio donde tengo los archivos de mi pagina web ??? Probe con el applet y me da un error: cargar:
clase com.charliemouse.cambozola.Viewer no encontrada.
Por favor si puedes darme una ayuda con respecto a eso, te lo agradeceria por favor…!!! Gracias
Daniel, puedes ponerlo donde quieras. Lo unico que necesitas es enlazarlo correctamente en el documento HTML, exactamente igual que harías con una imagen.
Si el JAVA y el documento HTML están en la misma carpeta basta con que pongas archive=”cambozola.jar” en los parametros del applet.
Si asi esta, pero me sale el mismo error.
“clase com.charliemouse.cambozola.Viewer no encontrada.”
ese viewer es el mismo Viewer.java que esta en esa ruta ? osea com/charliemouse/cambozola/viewer ???
Si pongo ese archivo Viewer.java en la misma carpeta que el cambozola.jar y el html, funcionara igual o no ?
Ese viewer es el propio Applet. Ese error probablemente te lo esté dando porque las opciones del applet estén mal escritas o falte alguna.
Asegurate que el formato del applet sea como:
<applet code=com.charliemouse.cambozola.Viewer archive=cambozola.jar width=”320″ height=”240″ >
<param name=url value=”url_de_tu_motion”>
Prueba tambien con este otro java:
http://camara.trebol-a.com/java/cambozola.jar
La última versión daba algún problema, el enlace que te pongo corresponde a la penultima versión
El codigo esta casi igual, pero en la parte de:
, tengo:
… es válida esta línea de código ? ahi hago referencia al url del motion ? El puerto 8081 esta configurado para la camara 1. Por ahora estoy probando con una sola camara. Gracias Trebol-A
Disculpas pero no salieron 2 líneas. Estas son:
(param name=url value=”url_de_tu_motion”) y la que tengo n mi applet es:
(param name=url value=”http://DirIp:8081”)
Aparentemente está correcto…. dando por hecho que “DirIp” es reemplazado por tu IP. El error debe estar en otro lado.
hola, muy buen blog y muchas gracias por compartir tus conocimientos, y ahora con una pregunta me podrias decir como conectas tu camara ip me podrias mandar comentarios y/o archivo de configuracion para probarlo ya que estoy interesado en eso puesto que ya esta bien probado por mi lo de las camaras web, muchisimas gracias por la atencion prestada y por la respuesta que me des
Hola Juan,
en cuanto la cámara se enciende se conecta al router y a través del router (http://192.168.0.20) puedes acceder a ella y a su panel de configuración, es muy sencillo.
no lo que quiero es por medio de motion para guardar imagenes y tener las utilidades de motion, se puede, porque por medio del navegador esta bien y lo se realizar pero lo que quiero es conectarme con motion o algun paquete que lo haga ya que importante es guardar las imagenes y en windows existen paquetes que lo realizan y si me comentas que la camara manda por ftp tambien lo se, pero lo que quiero es guardar las imagenes directamente como lo realiza motion.
perdon creo que te revolvi, quiero un paquete que capture las camaras se vean los movimientos y demas (controlar las camaras de mi red o locales, muchas gracias
No sé si te entiendo bien, a ver:
Motion puede guardar imágenes igual que guarda vídeo. Tiene varias opciones para eso, timelapse_filename es una, jpeg_filename es otra. Depende de si pretendes tomar fotografias a intervalos regulares ó cuando se produzca movimiento.
Si lo que quieres es capturar una imagen de la cámara de forma paralela a Motion, no a través de Motion, pues deberias averiguar cual es la ruta de la cámara desde la cual se accede a la imagen que esté tomando en ese momento. Cada modelo ce cámara tiene su ruta particular. Una vez que lo sepas puedes hacer algo como:
wget http://192.168.0.1/cgi-bin/IMAGE.jpg -O foto_actual.jpg
Suponiendo que 192.168.0.1/cgi-bin/IMAGE.jpg sea la ruta en cuestión (si no es así seguro qeu muy parecida)
mira me explico un poco mas adelante, pero mientras mira que bueno que dices esto de “ó cuando se produzca movimiento.” eso lo quiero para no llanar tanto el disco duro pero no le podido realizar me comentas la configuracion, ahora por el lado de la camara ip yo se como pasar a un disco las fps pero lo que me interesa es poder controlar la camara ya sea de movimiento y de guardar imagenes y no se que mas te puedo decir puesto que en windows existen como te comentaba programas que controlar (de manera general movimientos, grabacion, etc) y quiero saber si existe algo en linux para ese tipo de control, perdon y me faltaba que pueda controlar no una camara sino varioas ya sean ip fijas, wireles, webcam, no se si esto quede un poco mas claron o te haya enredado mas, nuevamente mil gracias por la atencion prestada
Cuaderno de campo es un blog mantenido por Trebol-a y en el que escriben Trebol-a, Miguel y Mónica
Si quieres saber algo más sobre los autores acude a la página acerca-de, si quieres contactar con alguno de nosotros hazlo a través de contactar
Creative Commons: Todo el contenido de la web (imágenes, textos, vídeos, a excepción de aquellas obras de otros autores enlazados por Cuaderno de Campo) se acoge a los términos expresados en la licencia Creative Commons