invertir imagen de la webcam en caliente
Indice
1. Introducción
2. Hardware utilizado en los ejemplos
3. Elección del método según el driver.
3.2. Metodo 2.
1. Introducción:
Este artículo ha sido creado para esas personas que o bien tienen una webcam que puede girar sobre su eje horizontal (generalmente se encuentran en algunos portátiles) o bien la imagen de su webcam aparece invertida con sus consiguientes inconvenientes.
De momento me he encontrado con dos posibles casos cada cual con su metodo para corregir el problema.
Dependiendo de los drivers que utilice la webcam, se crearan unos archivos de configuración en la carpeta /sys/class/video4linux/videoN donde N es el número del dispositivo de video, si solo se tiene una webcam y no hay una capturadora de tv analógica ese número será 0 si hay más dispositivos el número dependerá de la cantidad de dispositivos y del orden en el que fueron cargados los módulos de los mismos.
2. Hardware utilizado en los ejemplos:
En este artículo se utilizaran de ejemplo dos webcams integradas en dos portátiles, la primera es una webcam syntek de un portatil asus y la segunda una webcam ricoh de un hp pavilion tx1000 series. En ambos casos las webcam requieren la compilación de un módulo externo al kernel para funcionar, pero los métodos debería funcionar en cualquier webcam.
Webcam syntek del portatil asus:
Identificador:
Bus 003 Device 002: ID 174f:6a33 Syntek Web Cam - Asus F3SA, F9J, F9SDescarga del driver mediante subversion:
svn co https://syntekdriver.svn.sourceforge.net/svnroot/syntekdriver/trunk/driverNota: cuando instalé este driver requería descargar un makefile diferente para poder compilarlo sin problemas, desconozco si hoy en dia aun es necesario:
wget http://bookeldor-net.info/merdier/Makefile-syntekdriverWebcam ricoh hp pavilion:
Identificador:
Bus 001 Device 004: ID 05ca:1810 Ricoh Co., Ltd Pavilion Webcam [R5U870]Descarga del driver mediante mercurial:
hg clone http://bitbucket.org/ahixon/r5u87x/3. Elección del método según el driver:
El driver de la webcam syntek genera unos archivos en la carpeta mencionada antes que permiten cambiar algunos de los parámetros de la webcam, el archivo que nos interesa para este caso es /sys/class/video4linux/video0/vflip . Si ese archivo existe utilizaremos el método 1 para invertir la imagen.
El driver de la webcam ricoh no genera ese archivo por lo que utilizaremos el metodo 2
3.1. Metodo 1:
Cambiar el valor del archivo /sys/class/video4linux/video0/vflip de 0 a 1 o de 1 a 0.
Esto se puede hacer de forma manual con un editor de texto o con el comando echo en la terminal, el archivo no requiere de permisos administrativos para modificarlo por lo que podemos hacerlo como usuario normal y los cambios en el mismo afectan instantaneamente a la imagen de la webcam.
Dependiendo de lo que queramos hacer, podemos crear un script u otro, si queremos poder invertir la camara porque es rotatoria podemos usar este script:
#!/bin/bash
echo $(((`cat /sys/class/video4linux/video0/vflip`-1)*-1)) > /sys/class/video4linux/video0/vflip(expliación de la fórmula del script)
Si simplemente nuestra imagen sale invertida al iniciar la webcam con crear un script que se ejecute al inicio y que cambie ese valor al arrancar el sistema sería más simple
#!/bin/bash
echo 1 > /sys/class/video4linux/video0/vflip3.2. Metodo 2:
En las webcams en las que el driver no genera el archivo vflip, podemos usar el programa v4l2ucp. Este paquete está disponible en los repositorios de debian multimedia. A dia de hoy este paquete está disponible en la rama testing (squeeze) de estos repositorios, desconozco si tambien estan en stable (lenny)
Este paquete instala dos ejecutables en el sistema, el v4l2ucp y el v4l2ctrl. El primero es una gui que nos permite jugar con los parámetros de video de la webcam (uno de ellos es el que nos interesa, el de invertir la imagen.
¿Pero como hacer para no tener que lanzar esta gui cada vez que iniciemos el sistema?
Para eso tenemos el v4l2ctrl que nos permite guardar o cargar los parámetros que queremos hacia o desde un archivo.
La sintáxis sería esta:
v4l2ctrl -d dispositivo -s/-l archivo
-s para guardar los parámetros y -l para cargarlos.
En mi caso hay algunos parámetros que desde la gui no me dejaba modificar, por ejemplo el balance de blancos automático, no podía desactivarlo desde la gui y por tanto no podía modificar esos parámetros. Al desactivarlo mediante v4l2ctrl ya me permitía modificarlos.
Lo primero que haremos será guardar los parámetros en un archivo para analizar la estructura y ver las opciones que tenemos.
v4l2ctrl -d /dev/video0 -s parametrosSe genera un archivo con este contenido:
9963779: Hue:0
9963788: Auto White Balance:1
9963790: White Balance Red:127
9963791: White Balance Blue:127
9963793: Exposure:255
9963794: Auto Gain Control:1
9963795: Gain:63
9963796: H-Flip:0
9963797: V-Flip:0En ese archivo podemos modificar esos parametros y posteriormente cargarlo con v4l2ctrl, si hacemos la prueba y desactivamos el balance de blanco automatico poniendo un 0, y luego cargamos esos parametros con el comando
v4l2ctrl -d /dev/video0 -l parametrosal lanzar la gui veremos que ya podemos modificar los parametros del balance de blancos, pero como esto estaba orientado a invertir la imagen, simplemente modificamos el parametro vflip y luego bastaría con crear un script que se ejecutara al inicio con el comando para cargar esos parametros:
#!/bin/bash
v4l2ctrl -d /dev/video0 -l /ruta/donde/hemos/guardado/parametros4. Anéxodo:
Aunque el artículo está orientado al parámetro vflip que es el encargado de invertir la imagen verticalmente de la webcam, se puede adaptar para cualquiera de los parámetros que queramos modificar, en el método 1 es cuestion de analizar los archivos de la ruta señalada, y en el método 2 analizar los parámetros del archivo generado, ajustarlos a nuestras necesidades y cargárlo.
Si alguién puede mejorar los scripts o la automatización del proceso se le agradecería cualquier aporte.