Equipos y materiales > Openwrt & LEDE

WebCam

(1/5) > >>

raphik:
Hace ya casi tres años que conecté por primera vez una webcam al HG553. No funcionó. En realidad no era tan complicado, pero no disponía de la información necesaria. He visto últimamente cierto interés en el foro y me he animado a contaros mis experiencias e invitaros a compartir las vuestras.

Es de referencia obligada el artículo "Montemos una webcam IP barata", de Alfonso Pastor.

Lo primero será instalar el firmware OpenWRT en un router compatible que disponga de al menos un puerto USB. Actualmente hago pruebas con una LifeCam HD-3000 de Microsoft conectada a un Comtrend AR-5387un con la Chaos Calmer 15.05-rc1. Adicionalmente, hago pruebas con una Creative N10225, una TVISTO ACM-330 y una Philips SPC620NC.

Soporte básico USB
Estos paquetes son imprescindibles para detectar y hacer funcionar cualquier cosa que conectemos al puerto USB

--- Código: ---opkg update
opkg install kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-uhci usbutils
reboot
--- Fin del código ---

¿Qué webcam tengo?
Por su ID la conoceremos. La enchufamos al router y averiguamos su ID y su denominación

--- Código: ---lsusb
--- Fin del código ---

--- Citar ---Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 045e:0779 Microsoft Corp. LifeCam HD-3000
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
--- Fin de la cita ---

Las cámaras nuevas suelen ser de tipo UVC y las más antiguas GSPCA. Las hay de otros tipos, pero no funcionan en Linux. Para averiguar de qué tipo es la nuestra, buscamos su ID en estas listas:
Lista UVC: http://www.ideasonboard.org/uvc/
Lista GSPCA: http://linuxtv.org/wiki/index.php/Gspca_devices

¿Qué driver instalo?
CASO UVC
Un único driver uvc para cualquiera que sea el modelo

--- Código: ---opkg update
opkg install kmod-video-uvc
--- Fin del código ---

CASO GSPCA
Un driver genérico gspca y un subdriver específico para el modelo concreto

--- Código: ---opkg update
opkg install kmod-video-gspca-core
opkg install kmod-video-gspca-xxx
--- Fin del código ---

Yo, en este punto, suelo reiniciar el router. Puede que no haga falta, pero ¿y si sí?

--- Código: ---reboot
--- Fin del código ---

Tras el reinicio, comprobamos que OpenWRT reconoce el dispositivo

--- Código: ---ls /dev/vid*
--- Fin del código ---

--- Citar ---/dev/video0
--- Fin de la cita ---

¿Qué capacidades tiene mi webcam?
OpenWRt cuenta con una herramienta para averiguarlo. La instalamos

--- Código: ---opkg update
opkg install v4l-utils
--- Fin del código ---

La herramienta se llama v4l2-ctl y hace muchísimas cosas

--- Código: ---v4l2-ctl --help
--- Fin del código ---

Probablemente, lo que más interesa ahora es lo referente al formato de píxel y los controles específicos de cada webcam.

== FORMATOS
# Lista de formatos posibles
  v4l2-ctl --list-formats
# Lista de formatos, resoluciones y fps permitidos
  v4l2-ctl --list-formats-ext
# Visualizar formato actual
  v4l2-ctl --get-fmt-video
  v4l2-ctl -V
# Probar un formato de vídeo
  v4l2-ctl --try-fmt-video=width=<w>,height=<h>,pixelformat=<pf>,field=<f>,bytesperline=<bpl>
# Cambiar el formato de vídeo
  v4l2-ctl --set-fmt-video=width=<w>,height=<h>,pixelformat=<pf>,field=<f>,bytesperline=<bpl>

== CONTROLES
# Lista de controles ajustables
  v4l2-ctl --list-ctrls
  v4l2-ctl -l
# Lista de valores admitidos para los controles tipo menu
  v4l2-ctl --list-ctrls-menus
  v4l2-ctl -L
# Visualizar un control
  v4l2-ctl --get-ctrl=brightness,contrast
  v4l2-ctl -C brightness,contrast
# Cambiar un control
  v4l2-ctl --set-ctrl=brightness=x,contrast=y
  v4l2-ctl -c brightness=x,contrast=y

FSWEBCAM
Una vez instalada correctamente la webcam y conocidas sus capacidades, lo clásico es sacar la primera foto con fswebcam. Instalamos el paquete pertinente

--- Código: ---opkg update
opkg install fswebcam
--- Fin del código ---

¡Y hacemos nuestra primera foto!

--- Código: ---fswebcam /www/test.jpg
--- Fin del código ---

Guardar la foto en la carpeta /www del router facilita su visualización directa en el PC. Es tan simple como visitar la URL http://192.168.1.1/test.jpg (cambia la IP por la de tu router).

Mi primera foto fue un rectángulo negro como la boca del lobo. Pero no hay que desesperar. Sólo es cuestión de pasarle a fswebcam los parámetros adecuados.

--- Código: ---fswebcam -d v4l2:/dev/video0 -i 0 -r 640x480 --jpeg 75% --no-banner --save /www/test.jpg
--- Fin del código ---

No todas las cámaras responden por igual. La TVISTO ACM-330 tiene tendencia a sacar las fotos muy oscuras e incluso negras. Por suerte, el parámetro --skip <n veces> la obliga a hacer varios disparos previos (diez o veinte suele ser suficiente) antes del disparo aprovechable que se transformará en foto. Además, su resolución no es normalizada, de 640x480. Y para colmo, saca las fotos boca abajo (corregible con el parámetro --flip v)

--- Código: ---fswebcam -d v4l2:/dev/video0 -i 0 -r 640x472 --skip 15 --flip v --jpeg 75% --no-banner --save /www/test.jpg
--- Fin del código ---

fswebcam permite ajustar un buen número de parámetros. Se puede visualizar la lista de parámetros tecleando

--- Código: ---fswebcam --help
--- Fin del código ---

A veces es más cómodo definir el valor de los parámetros en un fichero de configuración y hacer la llamada a la utilidad así

--- Código: ---fswebcam -c fswebcam.conf
--- Fin del código ---

El fichero de configuración puede tener el nombre que se quiera y estar en la ruta que se desee. El mío es poco original /root/fswebcam.conf

--- Código: ---#quiet                  Hides all messages except for errors.
#verbose               # Displays extra messages while capturing
#loop <seconds>         Run in loop mode.
#background             Run in the background.
#output <filename>      Output the log to a file.
device v4l2:/dev/video0
input 0
#tuner <number>         Selects the tuner to use.
frequency 0
#palette <name>         Selects the palette format to use.
#delay <number>         Sets the pre-capture delay time. (seconds)
resolution 640x480
fps 5
#frames <number>        Sets the number of frames to capture.
skip 4
#dumpframe <filename>   Dump a raw frame to file.
#set <name>=<value>     Sets a control value.
#revert                 Restores original captured image.
#flip <direction>       Flips the image. (h, v)
#crop <size>[,<offset>] Crop a part of the image.
#scale <size>           Scales the image.
#rotate <angle>         Rotates the image in right angles.
#deinterlace            Reduces interlace artifacts.
#invert                 Inverts the images colours.
#greyscale              Removes colour from the image.
#swapchannels <c1c2>    Swap channels c1 and c2.
no-banner
#underlay <PNG image>   Sets the underlay image.
#no-underlay            Clears the underlay.
#overlay <PNG image>    Sets the overlay image.
#no-overlay             Clears the overlay.
jpeg 50%
#png <factor>           Outputs a PNG image. (-1, 0 - 10)
save /www/test.jpg
#exec <command>         Execute a command and wait for it to complete.
--- Fin del código ---

Hay parámetros interesantes, como loop <seconds>, que permite realizar fotos a intervalos regulares. O background, que lanza el comando en modo daemon.
Otros son curiosos pero poco útiles, como invert, que produce una imagen negativa. O scale <size>, que lleva al router al límite de consumo de CPU.
Es muy útil set <name>=<value>, que posibilita el acceso a los controles específicos de cada webcam.

MJPG-STREAMER
Llegó la hora del streaming de vídeo. El programa funciona con la Chaos Calmer RC1. Con firmwares anteriores nunca lo conseguí.

Instalamos el paquete correspondiente

--- Código: ---opkg update
opkg install mjpg-streamer
--- Fin del código ---

Se configura editando el fichero /etc/config/mjpg-streamer

--- Citar ---config mjpg-streamer 'core'
   option enabled 'true'
   option input 'uvc'
   option output 'http'
   option device '/dev/video0'
   option resolution '640x480'
   option yuv '1'
   option quality '60'
   option fps '5'
   option led 'auto'
   option www '/www/webcam'
   option port '8080'
   option username 'user'
   option password 'pass'
--- Fin de la cita ---
Los valores de color se pueden cambiar. Los demás, mejor no.
Los valores en rojo deberían concordar con las capacidades de la webcam.

Para activar la webcam e iniciar el streaming de vídeo

--- Código: ---/etc/init.d/mjpg-streamer start
--- Fin del código ---

Para pararla

--- Código: ---/etc/init.d/mjpg-streamer stop
--- Fin del código ---

El vídeo se puede visualizar con el navegador Firefox en la URL
http://192.168.1.1:8080/

También se visualiza con VLC Media Player introduciendo la URL
http://192.168.1.10:8080/?action=stream

Hacemos unos cambios con LuCI y ya tenemos cámara web inalámbrica.

Poner IP estática en la LAN


Habilitar DHCP


Y, lo más importante, configurar la interfaz wifi en modo AP, conectada a la LAN y activar el modo multimedia


Seguiré posteando cuando haga funcionar el motion.

Saludos.

Tki2000:
Le pongo chincheta.

Continúa, continúa...

jar229:
Muy interesante.

Esperamos con ganas la continuación :D

EDITO: Lo añado al [Índice] Hilos relevantes de OpenWrt

Enviado desde uno de mis 'cacharros' usando Tapatalk

vk496:
Yo la vez que lo intenté con la mía no pude porque tenia que compilar el driver con el kernel y me daba palo reflashear todo el router.

También decir que mi webcam es muy antigua y no hace uso de drivers genéricos...

Salu2

raphik:

Identificación de la webcam

--- Código: ---root@OpenWrt:~# lsusb
Bus 002 Device 002: ID 041e:4028 Creative Technology, Ltd Vista Plus cam [VF0090]

--- Fin del código ---

Identificación del driver a instalar (lista GSPCA: http://linuxtv.org/wiki/index.php/Gspca_devices)

--- Citar ---gspca_pac207    041e:4028    Creative Webcam Vista Plus
--- Fin de la cita ---

Instalación de driver y subdriver

--- Código: ---opkg update
opkg install kmod-video-gspca-core
opkg install kmod-video-gspca-pac207
reboot
--- Fin del código ---

Identificación del formato y resoluciones

--- Código: ---root@OpenWrt:~# v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index       : 0
Type        : Video Capture
Pixel Format: 'P207'
Name        : P207
Size: Discrete 176x144
Size: Discrete 352x288
--- Fin del código ---

Controles específicos de la webcam

--- Código: ---root@OpenWrt:~# v4l2-ctl --list-ctrls

User Controls

                     brightness (int)    : min=0 max=255 step=1 default=46 value=46 flags=slider
                       exposure (int)    : min=3 max=90 step=1 default=5 value=5 flags=inactive
                 gain_automatic (bool)   : default=1 value=1 flags=update
                           gain (int)    : min=0 max=31 step=1 default=7 value=7 flags=inactive
                     brightness (int)    : min=0 max=255 step=1 default=46 value=46 flags=slider
                       exposure (int)    : min=3 max=90 step=1 default=5 value=5 flags=inactive
                 gain_automatic (bool)   : default=1 value=1 flags=update
                           gain (int)    : min=0 max=31 step=1 default=7 value=7 flags=inactive

--- Fin del código ---

Prueba de fswebcam

--- Citar ---root@OpenWrt:~# fswebcam -d v4l2:/dev/video0 -i 0 -r 352x288 --no-banner --save /www/test.jpg
--- Opening v4l2:/dev/video0...
/dev/video0 opened.
Unable to find a compatible palette format.
--- Fin de la cita ---
El formato de píxel P207 no está soportado por fswebcam (ni por mpg-streamer).

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa