Download Instrucciones para la preparación de Ponencias para Informática 2009

Document related concepts
no text concepts found
Transcript
SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS
WEB Y HARDWARE RECONFIGURABLE
SYSTEM TO ACQUIRE IMAGES USING WEBCAMS AND RECONFIGURABLE
HARDWARE
David Delgado León 1, Pablo Montejo Valdés 2
1 CIME/CUJAE, Cuba, [email protected].
2 CIME/CUJAE, Cuba, [email protected]
RESUMEN: El diseño de sistemas electrónicos que incluyen procesamiento digital de imágenes, basados en
cámaras web USB como elemento de adquisición, se ha visto frenado por la complejidad propia del estándar
USB y la diversidad de drivers suministrados por los diferentes fabricantes de cámaras. La tendencia a la estandarización de dichos drivers, específicamente a través de USB Video Class (UCV) y la posibilidad de diseñar
sistemas digitales utilizando hardware reconfigurable, con soft-procesadores como Microblaze que pueden correr sistemas operativos embebidos, brinda la posibilidad de desarrollar toda una gama de aplicaciones a partir
de cámaras web USB.
Este artículo presenta el diseño de un sistema de adquisición de video basado en cámaras web USB y hardware
reconfigurable. Las imágenes son capturadas con una cámara Logitech V-UAX16 y el sistema se encuentra
diseñado sobre el dispositivo Virtex4, del fabricante Xilinx, con un soft-procesador Microblaze embebido. La aplicación es programada en lenguaje C y corre sobre el sistema operativo Petalinux. Se utiliza el driver UVC y la
API Video4Linux2 (V4L2) para capturar, almacenar y procesar imágenes. UCV y V4L2 son componentes del
kernel en las versiones actuales de Petalinux que permiten la adquisición y el procesamiento de video sobre el
estándar USB. Se brinda una visión general de la arquitectura del sistema, los resultados de las simulaciones
funcionales, detalles relacionados con la implementación y una comparación con simulaciones del sistema utilizando MATLAB.
Palabras Clave: Petalinux, USB Video Class, Video4linux2, USB.
ABSTRACT: The design of electronics systems that include digital processing of images, based in USB
webcams as element of acquisition, has seen slowed by the complexity associated with USB standards and the
diversity of drivers in different camera manufactures. The tendency to standardization of drivers, specifically
through the USB Video Class (UVC) and the possibility of design digital systems using reconfigurable hardware
with soft-processors as Microblaze (that can run embedded OS) offers the possibility of developing a whole range
of applications based on USB webcams.
This article presents the design of a video acquisition system based on USB webcam and reconfigurable hardware. The images are captured with a USB webcam Logitech V-UAX16 and isdesignedon the Virtex4 device by
Xilinx, with an embedded soft-processor, Microblaze. The application is programmed in C language and runs
over operating system, Petalinux. In addition, the system uses the UVC driver and Video4Linux2 (V4L2) API to
capture, store, and process images on the application. UVC and V4L2 are components of kernel, in the current
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”
Delgado, D.; Montejo, P. | “SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS WEB Y HARDWARE RECONFIGURABLE”
versions of Petalinux, that allow the acquisition and processing of video using the USB standard.A general view
of the system architecture, the results of functional simulations, details related to implementation, and a comparison with simulations of the system using MATLAB are provided.
KeyWords: Petalinux, USB Video Class, Video4Linux2, USB.
1. INTRODUCCIÓN
Los sistemas de visión son ampliamente utilizados
en la actualidad en el control de la calidad de procesos industriales, en sistemas de vigilancia, posicionamiento e identificación de objetos móviles y en la
robótica, entre otros. Uno de los tipos de cámaras
que pueden usarse para obtener información visual
son las cámaras web USB, popularmente conocidas
como webcam.
Sin embargo, su uso dentro del mundo del diseño
electrónico, se ha visto frenado por la diversidad de
drivers existentes entre fabricantes y por solo encontrarse estos desarrollados para los principales
sistemas operativos que dominan el mercado como
son: Windows, Linux y MacOS. Estos inconvenientes unidos a la complejidad del protocolo USB, que
se agudiza por ser un streaming de video la señal
que se transmite, ha favorecido su uso en ambientes atendidos por computadoras y no en ambientes
asociados al diseño de sistemas digitales.
A partir del año 2003, surge una especificación que
estandariza todos los elementos necesarios para
transportar streaming de video sobre el protocolo
USB. Esta especificación conocida como USB Video Class agrupa a todos los dispositivos que manejan streaming de video sobre USB en un solo
driver genérico [1]. Una década después los principales fabricantes de cámaras USB del mundo han
adoptado este driver como modelo de conexión
facilitando el desarrollo de aplicaciones y sistemas
basados en esta clase de dispositivos [2].
También en los últimos años, el driver V4L presente
en el kernel de los sistemas operativos Linux, fue
modificado. V4L fue sustituido por V4L2. Este proporciona una API a través de la cual los diseñadores pueden procesar las señales de video.
El objetivo de este trabajo es realizar el diseño de
un sistema que realice la adquisición de una señal
de video proveniente de una cámara web Logitech,
utilizando el sistema operativo para sistemas embebidos Petalinux. Las versiones actuales del kernel
de Petalinux incluyen el driver UVC, que permite al
diseñador no tener que gastar tiempo de diseño en
la comunicación USB y la API para procesar video
V4L2, que brinda la posibilidad de obtener cuadros
sin compresión que pueden ser procesados y visualizados.
2. CÁMARAS WEB USB CON SOPORTE
UVC
La especificación USB Device Class Definition for
Video Devices o USB Video Class como se conoce,
define la funcionalidad de streaming de video en el
estándar USB. Al igual que todos los dispositivos de
almacenamiento (memorias USB, HDD, etc…) pueden ser manejados por un driver porque conforman
la denominada USB Mass Storage Specification,
UVC solo necesita un driver para manejar todos sus
dispositivos [3].
La especificación cubre cámaras web, video cámaras, convertidores de video analógico, sintonizadores de televisión, es decir, dispositivos que manejan
streaming de video, tanto en entrada como en salida, aunque debido a la gran variedad de dispositivos y pocos diseñadores se ha enfocado en dispositivos de entrada, y más específicamente en webcams.
Video Class, en este caso, significa mover la señal
de video desde una webcam a otro dispositivo como
un monitor, o una computadora, o una consola de
juegos. Se ha definido para los sistemas operativos
más populares como Windows, Mac OS, Linux,
FreeBSD y PS3.
Este driver estandariza la funcionalidad de streaming de video sobre USB y contiene toda la información necesaria para un diseñador construir un
dispositivo que incorpore la funcionalidad de streaming de video sobre USB. Define todos los descriptores específicos que deben estar presente en cada
función de video sobre USB y como debe moverse
el video a través del driver [3]. UVC divide los datos
en un streaming de video y un streaming de control
como se muestra en la Figura 1.
Figura. 1: Elementos de UVC definidos para capturar video desde una webcam
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”
Delgado, D.; Montejo, P. | “SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS WEB Y HARDWARE RECONFIGURABLE”
Los kernel de Linux a partir de su versión 2.6.x tienen incorporados este tipo de driver, de forma que
si una webcam con soporte UVC es conectada,
automáticamente es detectada y es posible capturar
y procesar su video a partir de una aplicación desarrollada por el usuario abstrayéndolo de toda la
complejidad del protocolo USB.
características del dispositivo conectado a través de
la función:
ioctl(fd, VIDIOC_QUERYCAP, &capabilities)
y la estructura:
v4l2_capability5
2.1 La API de procesamiento de video V4L2
V4L2 significa Video For Linux 2, es la segunda
versión de la API y framework V4L. Opuesto a la
mayoría de las implementaciones de drivers, V4L2
forma parte del código del kernel de Linux. V4L2
permite manipular varios dispositivos de video, tanto
en entrada como en salida. La API es capaz de
manejar una gran cantidad de tipos de dispositivos
de video [4].
V4L2 es mayormente implementada como un set de
llamadas a la función IOCTL para un dispositivo
especifico. Una vez entendido el mecanismo es
posible manejar las cámaras con cierto grado de
facilidad y concentrarse en el procesamiento de los
cuadros y en la aplicación que se desee desarrollar
[4].
Una implementación común seguiría el conjunto de
pasos relacionados en la Figura 2.
Figura. 2: Algoritmo implementado para la adquisición de imágenes provenientes de la webcam
El algoritmo comienza abriendo un descriptor para
la cámara o dispositivo de video. Se realiza utilizando las funciones básicas de entrada y salida del
lenguaje C como open ("/dev/video0", O_RDWR).
Resulta sencillo porque ya el módulo UVCVIDEO
detectó la cámara como un dispositivo perteneciente a UVC, configuró los descriptores y en la ruta
virtual “/dev/video0” cargó el dispositivo listo para
realizar la adquisición de la señal de video [5].
El siguiente paso es encuestar y analizar las funcionalidades del dispositivo conectado. Como se ha
mencionado V4L2 soporta una amplia variedad de
dispositivos y no todos brindan las mismas capacidades. Es por ese motivo que se encuestan las
La configuración del formato de captura es obligatoria. Se debe indicar el tamaño de la imagen, el formato de color (MPJEG, YUV, RGB), entre otras
características. El formato elegido debe ser soportado por el dispositivo conectado y la configuración
se realiza a través de la estructura v4l2_format5.
Se le debe definir al dispositivo de video la localización de memoria donde van a estar configurados los
buffers para realizar la captura de la señal de video,
su cantidad y la dirección de inicio, entre otros parámetros. Esto permite que el dispositivo escriba
sus datos correctamente en memoria. Técnicamente este proceso es conocido como queue y una vez
llenado con los datos, al proceso de rotar el buffer
se le conoce como dequeue. La configuración se
realiza a través de la estructura v4l2_requestbuffers
[5].
Configurados todos los parámetros se debe realizar
el mapeo de los buffers en la memoria del sistema
operativo
a
través
de
la
función
ioctl(fd,VIDIOC_QUERYBUF,&bufferinfo) y la estructura v4l2_buffer. Si se cuenta con más de un
buffer se debe iterar en un ciclo para realizar el
proceso de queue y dequeue secuencialmente en
cada buffer [5].
En este punto del algoritmo, se pueden comenzar a
capturar los cuadros de video, solo resta activar el
flujo de video, poner en cola el buffer donde se
quiera almacenar el cuadro actual y, una vez llenado el buffer, leer los datos para realizar el procesamiento que se desee [5].
Con el objetivo de intercambiar imágenes correctamente entre el dispositivo y la aplicación es necesario que ambos extremos de la comunicación negocien un formato para la transmisión de la imagen.
Como se explicó anteriormente, este formato debe
estar soportado por el dispositivo. V4L2 maneja
principalmente formatos sin compresión. Los pixeles son transmitidos de izquierda a derecha y de
arriba hacia abajo. El primer byte de dato en el buffer es siempre el pixel más a la izquierda y más
arriba, y así sucesivamente. Una vez trasmitidos
todos los pixeles de una fila pueden o no existir
bytes de relleno con el objetivo de lograr alineación
[4].
En el sistema diseñado, la webcam utilizada tiene
soporte para formato YUYV 4:2:0 y formato MJPEG.
Se escogió el formato sin compresión YUYV 4:2:0
para adquirir la señal. En este formato 4 bytes representan 2 pixeles, dos muestras de luminancia Y,
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”
Delgado, D.; Montejo, P. | “SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS WEB Y HARDWARE RECONFIGURABLE”
una muestra de croma Cr y una muestra de croma
Cb. Cada muestra de luminancia pertenece a un
pixel mientras que las muestras de croma pertenecen a dos pixeles adyacentes. Este formato en el
ambiente de Windows se conoce como YUV2. Se
muestra un ejemplo del orden de los pixeles en una
imagen de 4x4 pixeles. Cada celda representa un
byte de información:
Un soft-procesador Microblaze es utilizado en el
diseño para correr el sistema operativo Petalinux
que permita, a través del driver UVC, conectar la
cámara Logitech al sistema. A la configuración básica de Petalinux se le agrega el modulo IP XPS
USB_host, que le brinda funcionalidad USB host al
sistema [7-11]. La conexión del módulo USB con
Microblaze es mostrada en la Figura 5.
2.2 Arquitectura del hardware
El dispositivo utilizado en el diseño fue el FPGA
Virtex4 del fabricante Xilinx. Esta familia ofrece un
alto rendimiento y soporte completo a las aplicaciones que deben correr sobre plataformas embebidas
conocidas como System on Chip. El dispositivo es
producido usando la tecnología de 90 nm en obleas
de silicio de 300 mm.
La placa utilizada para el diseño del sistema es la
ML403, además de utilizar una tarjeta SMSC que
implementa el protocolo USB físico para el módulo
IP XPS USB_host utilizado en el diseño. La tarjeta
SMSC es conectada a la placa ML403 a través de
los puertos de expansión J5/J6. Una arquitectura
general del sistema es proporcionada en la Figura
3.
ML403
FPGA
ULPI Interface
PHY USB
Microblaze
SMSC
J1
mini-AB
mini-A to A adaptor
XPS USB_host
J5/J6
USB Device
(Webcam)
Figura. 3: Arquitectura general del sistema
ULPI es la interfaz utilizada para comunicar el
FPGA con el tranceiver USB. La interfaz ULPI es un
estándar diseñado para soportar sistemas de alta
velocidad como USB 2.0, además de garantizar un
pinout mínimo. La Figura 4 muestra un diagrama en
bloques con los principales bloques de la interfaz.
Está compuesta por una señal de reloj: ULPI_Clock,
cuatro señales de control: PHY_Reset, PHY_Nxt,
ULPI_Dir y ULPI_Stp, además de una señal de datos de 8 bits: ULPI_Data6.
Figura. 4: Descripción de la interfaz ULPI
Figura. 5: Conexión típica del módulo IP XPS
USB_host al soft-procesador Microblaze
2.3 Software del sistema
El software del sistema está dividido en tres partes
fundamentales: el driver UVC, la adquisición de la
señal de video utilizando la API del driver V4L2 y la
conversión del formato YUV a RGB para ser enviado a un módulo controlador de VGA.
Para que el sistema tenga soporte de cámaras web
USB se modificó la imagen del kernel que se carga
para el sistema diseñado. Esto se realiza con el
comando “make menuconfig” en el host donde se
encuentra el SDK de Petalinux. Se habilitaron las
siguientes opciones:
Under "Device Drivers"
Enable "USB Support"
Enable "Support for Host-side USB"
Enable "EHCI HCD (USB
2.0) support"
Enable "Use Xilinx
usb host EHCI controller
core"
(Optionally)Enable "USB verbose debug messages"
(Optionally)Enable "USB announce new devices"
Enable "Root Hub Transaction Translators"
Under "Device Drivers"
Enable Multimedia support
Enable Cameras/video grabbers support
Enable Video Capture adapters
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”
Delgado, D.; Montejo, P. | “SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS WEB Y HARDWARE RECONFIGURABLE”
Enable V4L USB devices
Enable USB Video
Class (UVC)
Con esta configuración en el kernel de Petalinux
una vez conectada la cámara web USB, se puede
utilizar un algoritmo similar al mostrado en la Figura
5 para capturar las imágenes.
Figura. 6: Diagrama de flujo para realizar la captura de los frames que componen la señal de video
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”
Delgado, D.; Montejo, P. | “SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS WEB Y HARDWARE RECONFIGURABLE”
Solo faltaría antes de mandar la señal de la imagen capturada a un controlador de VGA realizar la
conversión del formato YUV al formato RGB. Esto
último se realiza dentro de la aplicación implementando las ecuaciones de conversión correspondientes al estándar ITU-R Rec. BT.601 [12]
r = 1.0 * y1 + 0 * pb + 1.402 * pr;
g = 1.0 * y1 - 0.344 * pb - 0.714 * pr;
b = 1.0 * y1 + 1.772 * pb + 0 * pr;
2.4 Simulación del sistema
En la implementación del sistema de adquisición
sobre Microblaze con el sistema operativo Petalinux, los flip-flops, LUTS y bloques de RAM son
referidos al costo en área del procesador. El consumo de recursos que se reporta es el que se
obtiene por la utilización de Microblaze con la adición del módulo IP XPS USB_host discutida en la
sección anterior. El diseño que se concibió explota
la flexibilidad de la implementación en software y
es posible variar las prestaciones del sistema de
adquisición como son los tamaños de los cuadros,
el formato y la velocidad en FPS sin necesidad de
incurrir en un gasto extra de recursos de hardware; lo cual representa una opción eficiente.
La aplicación emite una serie de printout que describen su funcionamiento y brindan las características de la cámara web conectada así como de la
configuración utilizada por el sistema para realizar
la adquisición. Se puede apreciar como la cámara
conectada es manejada por el módulo UVCVIDEO, perteneciente al driver UVC. El dispositivo
soporta los modos de captura y streaming, con los
formatos de imágenes MJPEG y YUV2. El formato
de captura escogido es el YUV2, con tamaño de
imágenes de 640 por 480 pixeles y se realiza la
adquisición de un un cuadro por segundo. A continuación se brinda un resumen de los printouts
más importantes:
driver:
uvcvideo
card:
pix.height:
480
pix.width:
640
pix.field:
1
init /dev/video0
grab yuyv
[OK]
[OK]
save /usr/image_yuv.yuv
[OK]
change to RGB
[OK]
save /usr/image_rgb.rgb
[OK]
Para validar la funcionalidad del sistema, dentro
de la aplicación, uno de los buffer mapeados en la
memoria del sistema operativo es almacenado en
un fichero denominado image.yuv. El fichero especificado va a contener un cuadro capturado por
la webcam en formato YUV2 y con el orden de
pixeles explicado anteriormente. El fichero es exportado utilizando el protocolo tftp.
Utilizando Matlab se separaron las muestras de
luminancia de las muestras de croma. En la Figura
6 se muestran tres imágenes correspondientes a
la información de luminancia, croma roja y croma
azul. La mayor parte de la información está concentrada en las muestras de luminancia.
UVC Camera (046d:08c5)
bus_info:
usb-0000:02:03.0-1
version:
199945
capabilities: 84000001
Device /dev/video0: supports capture.
Device /dev/video0: supports streaming.
Support format:
1.MJPEG
2.YUV 4:2:2 (YUYV)
fmt.type:
1
pix.pixelformat:
YUYV
Figura. 7: Informacion de luminancia, Croma roja
y croma azul de la imagen capturada en formato
YUV
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”
Delgado, D.; Montejo, P. | “SISTEMA PARA ADQUIRIR IMÁGENES UTILIZANDO CÁMARAS WEB Y HARDWARE RECONFIGURABLE”
La Figura 7 muestra una comparación entre la
imagen adquirida mediante el sistema de adquisición después de ser convertida al formato RGB y
una imagen de la misma escena capturada en
formato RGB, utilizando la utilidad de
Matlab:Image Adquisition Tool, que demuestra el
correcto funcionamiento del sistema de adquisición diseñado.
Figura. 8: Imagen adquirida por el sistema e
imagen adquirida utilizando la utilidad de Matlab
Image Adquisition Tool
3. CONCLUSIONES
En este artículo se realiza la implementación del
algoritmo de adquisición de imágenes provenientes de cámaras web, variante software. El diseño
de este sistema posibilita que el consumo de recursos no aumente significativamente, aunque se
incremente la cantidad de cuadros por segundo, el
tamaño de las imágenes o se varíe el formato de
adquisición.
Los resultados brindan la posibilidad de utilizar
dicha implementación en otras aplicaciones y sistemas embebidos relacionados con el procesamiento digital de imágenes. A partir de los resultados obtenidos, el trabajo futuro estará dirigido a la
aceleración del algoritmo del sistema de adquisición para obtener un sistema en tiempo real, en
conjunto con el diseño del sistema de visualización.
4. REFERENCIAS BIBLIOGRÁFICAS
1. ISMAIL, Abdul R.: “Universal Serial Bus Device Class Definition for Video Devices”. 2005.
2. “Linux UVC driver and tool”. Disponible en
Internet: <En http://www.ideasonboard.org/uvc/>.
3. LI, Zhenhua; JIANG, Wei: “The Design of
USB Video Device Based on UVC”. 2010. Disponible en Internet:<http://www.paper.edu.cn>.
4. SCHIMEK, Michael: “Video for Linux Two
API Specification: Draft 0.12”. 2006.
5. VERKUIL, Hans: “Testing Video4Linux Applications and Drivers”. En Cisco Systems Norway,
2014.
6. “UTMI++ Low Pin Interface (ULPI) Specification, Revision 1.1”. 2001. Disponible en Internet:
<En http://www.intel.com>.
7. “XPS USB Host Controller (v1.01a). Product
Specification”. 2009. Disponible en Internet: <En
http://wwwxilinx.com>.
8. “XPS USB 2.0 EHCI Host Controller”. October
2014.
Disponible
en
Internet:
<Enhttp://www.missinglinkelectronics.com/mle/ind
ex.php/menu-products/menu-usb-ehci>.
9. “USB Host System Setup”. October 2014.
Disponible
en
Internet:
<Enhttp://www.wiki.xilinx.com/USB+Host+System+
Setup>.
10. “USB Host Controller Driver”. October
2014.
Disponible
en
Internet:
<En
http://www.wiki.xilinx.com/USB+Host+Controller+D
river>.
11. “Petalinux Tools User Guide”. 2014. Disponible en Internet: <En http://wwwxilinx.com>.
12. Recommendation ITU-R BT.601-7. “Studio encoding parameters of digital television for
standard 4:3 and wide screen 16:9 aspect ratios”.
2011.
Disponible
en
Internet:
<En
https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-RECBT.601-7-201103-I!!PDF-E.pdf>.
5. SÍNTESIS CURRICULARES DE LOS AUTORES
David Delgado León, graduado en Ingeniería en
Telecomunicaciones y Electrónica,profesor del Centro de
Investigaciones en Microelectrónica. En el presente trabaja
para obtener el grado de Master en Ciencias investigando en
la rama del diseño electrónico avanzado y las herramientas de
diseño asistido por computadora aplicadas al procesamiento
digital de señales.
[email protected]
Pablo Montejo Valdés, Ingeniero en Telecomunicaciones,
Doctor en Ciencias Técnicas, Profesor Asistente del Centro de
Investigaciones en Microelectrónica de la Facultada de
Eléctrica de la CUJAE, La Habana, Cuba
[email protected]
“V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”