Vamos a hacer uso de nuestra cámara USB compatible con Rasbian y obtener vídeo en pantalla – de forma local y remota – y todo ello gestionado desde nuestra pequeña Raspberry Pi. El otro actor principal de esta entrada es el software utilizado: Motion para Linux. Para ser más exactos, obtendremos un stream o flujo de imágenes jpg (mpg) que son capturadas de forma secuancial por nuestra RasPi.
Lo primero será hacernos con una cámara USB compatible con Raspberry, para lo cual nada mejor que consultar esta lista de compatibilidad, aunque el hecho de que no exista nuestra cámara en la misma no significa que no haya compatibilidad, por lo que antes de tirar la toalla podemos hacer uso de los consejos comentados en la entrada Raspberry Pi y cámara USB (1) – paso(3) – que nos ayudará a comprobar si el S.O. Linux «ve» o no nuestra cámara. En nuestras pruebas hemos usado el modelo VX-800 de Microsoft con resultados bastante buenos.
Otra opción es – tras reconectar nuestra cámara – ejecutar los comandos dmesg | tail y lsusb para comprobar que el dispositivo detectado como cámara también lo está en la lista de dispositivos USB. En nuestro ejemplo, la cámara Microsoft VX-800, es detectada en ambos comandos con el ID:045e:0766.
Lo primero que hemos de hacer – como casi siempre ocurrirá al intentar instalar y ejecutar nuevas aplicaciones – será actualizar las fuentes de instalación (lo cual pude tardar un buen rato dependiendo de nuestra última actualización), para lo cual ejecutaremos:
sudo apt-get update
sudo apt-get upgrade
Ahora si, instalamos el paquete Motion mediante el comando
sudo apt-get install motion
Una vez terminada la instalación (se llevará tambien un ratito) conviene modificar algún que otro parámetro en los ficheros de configuración. Para ello abrimos dicho fichero (motion.conf) con nuestro editor nano mediante el comando:
sudo nano /etc/motion/motion.conf
Para más facilidad, y dado el tamaño del fichero, comentamos la zona del mismo donde se localizan los parámetros a tocar, además de añadir un pequeño comentario sobre su utilidad.
Editamos varios parámetros para adecuar el hardware/software a nuestro gusto. Posteriormente podemos ir probando alguna de las opciones que el fichero motion.conf nos permite retocar, de momento ajustamos los siguientes:
> En zona ## Daemon ##
daemon ON
nota: su utilidad es obvia.
> En zona ## Capture device options ##
v4l2_palette 6
image width 320
image height 240
nota: adecuamos tipo de paleta de vídeo (esta nos ha dado un buen resultado) y resolución.
> En zona ## Snapshots ##
snapshot_interval 5
nota: tiempo entre cada captura (salvo si se detecta movimiento).
> En zona ## Live Webcam Server ##
webcam_port 8001
webcam_localhost off
nota: habilita puerto de visualización y la misma en otros equipos de la red.
> En zona ## HTTP Based Control ##
control_port 8888
control_localhost off
nota: habilita puerto de configuración y el acceso al control desde otros equipos de la red.
> En zona ## Thread config files ## (al final del fichero)
thread /etc/motion/cam1.conf
nota: añade un fichero de configuración específico para nuestra cámara.
Ahora, y como configuración extra, creamos el fichero cam1.conf mediante
sudo nano /etc/motion/cam1.conf
y dentro del mismo editamos creando el contenido:
videodevice /dev/video0
webcam_port 8001
Como siempre, salvaremos con Ctrl-X + S + <Enter>
El fichero cam1.conf ha de residir en el mismo directorio donde se encuentra motion.conf.
La llamada a esta configuración personalizada para la cámara 1 de las que usemos (podemos tener varias) se declara al final del fichero motion.conf, y queda de esta forma:
una vez tengamos listos los dos ficheros de configuración (motion.conf y cam1.conf) efecuaremos una primera prueba, ejecutando el programa motion pero no como servicio del sistema, para lo cual lo invocamos con el parámetro -n
sudo motion -n
1 2 |
Nota: en este modo podemos parar motion con Ctrl-c desde el terminal. |
Ahora se activará motion y comenzará a efectuar capturas – en nuestro ejemplo cada 5 segundos – y ,a su vez, se servirá la imagen en modo web a través del puerto asignado (puerto 8001 en nuestro ejemplo).
Podemos acceder desde la propia RasPi – queda claro que será desde el entorno gráfico – a las imágenes servidas vía navegador web, pero tenemos un problema: los navegadores por defecto en Raspbian (Dillo, Midori. etc) no son capaces de servir las imágenes capturadas, razón por lo que es aconsejable instalar Chromium. Esto lo podemos hacer con
sudo apt-get install chromium
Una vez instalado el navegador – y mientras motion esté sirviendo imágenes – accederemos a las imágenes desde la propia Raspberry poniendo en la barra de direcciones de Chromium
http://localhost:8001
1 2 |
Nota: también podemos usar la IP local o 127.0.0.1 en vez de localhost. |
en este caso hemos de refrescar manualmente la página para poder ver las nuevas imágenes. Y como quiera que cada 5 segundos (en nuestra configuración de ejemplo) se guarda una captura, podemos también ver las mismas en la carpeta /tmp/motion.
¡¡Cuidado!!, si se activa el movimiento el régimen de capturas aumenta con lo que el directorio /tmp/motion puede crecer de forma desmesurada.
El control de los diversos parámetros de motion puede efectuarse también desde el navegador operando en la RasPi con solo cambiar el puerto 8001 por 8888 (o el que hayamos configurado).
Si queremos ver las imágenes servidas desde otro ordenador de nuestra red deberemos acceder a la IP de nuestra Raspi desde el navegador web del mismo, y teclear (en nuestro ejemplo desde un Mac corriendo Firefox):
http://la_IP_de_la_Raspi:8001
sustituyendo «la_IP_de_la_Raspi» por la IP de nuestra tarjeta RasPi, en nuestro ejemplo la IP es 192.168.43.71
Una vez activa la captura vía web también podremos acceder a la configuración de motion de forma remota (si así lo hemos predefinido el el fichero de configuración). Para ello accederemos a
http://la_IP_de_la_Raspi:8888
también sustituyendo «la_IP_de_la_Raspi» por la IP de nuestra tarjeta RasPi, en nuestro ejemplo de nuevo la IP es 192.168.43.71
Automatizando el arranque/parada de Motion
Como quiera que el programa motion puede lanzarse como servicio (omitiendo el parámetro -n) podemos proceder a preparar un shellscript capaz de controlar el inicio y la parada de este servicio… tan solo por comodidad.
Para ello crearemos con el editor nano 2 ficheros, a saber:
(1) Fichero de activación
ejecutamos
sudo nano /usr/bin/onmotion
y tecleamos dentro del mismo
sudo motion
(2) Fichero de parada
ejecutamos
sudo nano /usr/bin/offmotion
y en este caso tecleamos
sudo /etc/init.d/motion stop
En ambos casos, salvaremos con Ctrl-X + S + <Enter>
Y para asegurarnos de que no nos darán problemas al ejecutarlos (bien como usuario pi o como root) les damos permisos máximos a ambos mediante
sudo chmod 777 /usr/bin/onmotion
sudo chmod 777 /usr/bin/offmotion
A partir de este momento para arrancar motion teclearemos
onmotion
y para detenerlo
offmotion