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, david.dl@electrica.cujae.edu.cu. 2 CIME/CUJAE, Cuba, pablo.montejo@electrica.cujae.edu.cu 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. david.dl@electrica.cujae.edu.cu 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 pablo.montejo@electrica.cujae.edu.cu “V Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales”