SISTEMA DISTRIBUIDO DE VISIÓN ARTIFICIAL Mario Cerdá Castells Dirección, [email protected] Antonio José Sánchez Salmerón Dirección, [email protected] Resumen En este artículo se presenta un proyecto desarrollado en el departamento ISA (Ingeniería de sistemas y automática) de la Universidad Politécnica de Valencia. Este proyecto se centra en el desarrollo de un sistema distribuido de visión artificial con el objetivo de adquirir y procesar imágenes suministradas por cámaras remotas. La principal innovación introducida es la aplicación de los conceptos clásicos de sistemas distribuidos al campo de la visión artifical. Palabras Clave: Sistemas distribuidos, sistemas cliente-servidor, captura remota de imágenes, procesamiento de imágenes, caracterización de objetos y reconocimiento de objetos. flexibilidad es que los sistemas de visión artificial suelen hallarse aislados del entorno industrial en el que se encuentran instalados, lo cual hace que su acceso y utilización se vean limitados. Esto se traduce además en un incremento de los tiempos muertos, o tiempos en que el sistema no se utiliza, ya que se suele tener un sistema exclusivamente dedicado a la aplicación en concreto para la que fue diseñado, y cuando no se está haciendo uso de esta aplicación el sistema de visión no se está utilizando. Todos estos inconvenientes de los sistemas de visión artificial actuales han sido un difícil obstáculo para su implantación en la industria. Sin embargo, actualmente la adopción de los sistemas distribuidos [1] como estructura de trabajo ofrece una oportunidad única a los sistemas de visión para superar estas dificultades. 1.1 1 INTRODUCCIÓN APORTACIONES Dada la estructura actual de los sistemas de visión artificial, en que se utilizan sistemas individuales para la adquisición y tratamiento de imágenes, la aplicación de la visión artificial a la industria resulta en muchos casos costosa. Se necesita desarrollar un sistema de visión, con todos los recursos necesarios para cada aplicación en concreto. Esto se traduce además en una redundancia de recursos en una misma planta, ya que cada sistema necesita de su componente óptico, su tarjeta de adquisición de datos, su computador, etc... Con la aplicación de los conceptos clásicos de los sistemas distribuidos a los sistemas de visión se superan dificultades como su eficacia; La dificultad de procesamiento de una gran cantidad de imágenes en un corto espacio de tiempo se ve superada mediante el uso de varios procesadores trabajando en paralelo para un mismo programa de aplicación; Se eliminan los tiempos muertos, explotando los recursos disponibles durante todo el tiempo posible, ya que el sistema no se utiliza sólo para una aplicación concreta para la que fue diseñado sino que es capaz de trabajar en conjunto con otros sistemas para atender las necesidades que todo el grupo tiene en ese momento. Un problema adicional resultante es la escasa eficacia de los sistemas de visión en determinadas aplicaciones con elevadas cantidades de procesamiento de datos. En estos casos un único procesador puede ser insuficiente para cubrir las necesidades del sistema y, para evitar este problema se incrementa la inversión necesaria para adquirir un procesador capaz de cubrir estas necesidades. Además, se evita la redundancia de recursos, puesto que varios sistemas diferentes pueden acceder a un mismo recurso para utilizarlo en su aplicación particular. Esto se traduce en un ahorro en los costes de instalación del sistema. La estructura actual de los sistemas de visión individualizados tiene además una escasa flexibilidad, lo cual es un inconveniente de cara a su aplicación industrial. El motivo de esta poca Finalmente, se hace evidente que la flexibilidad del sistema se dispara, ya que el hecho de que éste se comunique con otros sistemas similares y pueda acceder a distintos recursos hace que su adaptación a diversas tareas se facilite. El sistema puede ser visto como un conjunto de procesadores comunicados que accede a un conjunto de recursos, y los trabajos a realizar pueden ser distribuidos de distintas maneras en función de la necesidad de la aplicación en concreto. El proyecto objeto de este artículo es pues un resultado de todos estos razonamientos, puesto que se trata de un proyecto de implementación de un sistema distribuido de visión artificial, desarrollado en el departamento ISA de la UPV. 1.2 carga en memoria y ejecuta el VI correspondiente, pasándole los parámetros correspondientes según la estructura del panel conector del VI al que llamamos. Tras la ejecución de éste recibimos los parámetros de salida, una vez más según la estructura del panel conector. Estas sistemas se han desarrollado utilizando Labview 6.01, aprovechando el paquete de tratamiento de imágenes IMAQ o insertando funciones desarrolladas en C. DESCRIPCIÓN DEL SISTEMA 2.1 En este proyecto, se aplican los conceptos de sistemas distribuidos a sistemas servidores para la adquisición de imágenes capturadas por cámaras instaladas en distintas localizaciones y también a sistemas caracterizadores de objetos. En una visión general, el proyecto está compuesto por tres subsistemas principales: - El sistema servidor de imágenes, encargado del suministro de imágenes al resto de los subsistemas, bien sea a través de una captura mediante cámara o a partir de una imagen guardada en su disco duro. Este sistema debe posibilitar la adquisición de imágenes y su posterior acceso-envío a un computador remoto. - El sistema caracterizador, que es un sistema servidor encargado de la extracción de características de un objeto, mediante el uso de los preprocesamientos correspondientes. - Sistemas cliente, que son los sistemas que demandan imágenes y la realización de preprocesamientos sobre ellas. 2 DESARROLLO DEL SISTEMA Este sistema se ha desarrollado como una aplicación informática cliente/servidor utilizando el protocolo TCP/IP con múltiples clientes y múltiples servidores, donde los servidores nos ofrecen la posibilidad de preprocesamiento de imágenes, clasificación de objetos, etc A fin de realizar esta comunicación se usan los bloques de LabVIEW “Call by reference node” y “Open VI reference” [3]. El bloque “Open VI reference” abre una referencia a un VI que puede estar en el mismo computador en que nos encontramos o en otro diferente. Con la referencia proporcionada por el bloque “Open VI reference”, el bloque “Call by reference node” SERVIDOR DE IMÁGENES El sistema servidor de imágenes se encarga de suministrar imágenes según las instrucciones proporcionadas por el sistema cliente, que harán alusión a una serie de atributos de la imagen y métodos que afectan a estos atributos. El servidor se encarga del suministro de imágenes a partir de cámara o disco duro, en color o blanco y negro. Además será seleccionable el tipo de imagen, tamaño en X e Y, path, nombre y número de dispositivo. El número de dispositivo es el número que identifica las distintas cámaras accesibles por el sistema en el modo cámara. En el modo fichero el número de dispositivo es una referencia a una posición de un vector de imágenes previamente capturadas por el sistema servidor y almacenadas en su disco duro. De esta manera, el sistema servidor dispondrá de una opción “capturar secuencia de imágenes” a fin de guardar en disco duro un vector de imágenes que posteriormente pueden ser demandadas por el sistema cliente. Para la implementación del sistema servidor de imágenes se ha optado por una comunicación TCP/IP mediante llamada por referencia [3]. Esta solución es la más conveniente a nuestra aplicación dado que conocemos la estructura de los programas que se intercomunicarán. Además, su estructura de funcionamiento (llamadas proporcionando unas entradas y recogiendo unas salidas) se ajusta perfectamente a la forma de trabajar de un servidor de imágenes. 2.2 CARACTERIZADOR El sistema caracterizador de imágenes se encargará de, a partir de una dada, realizar los preprocesamientos necesarios para extraer las características demandadas por el cliente (etiquetado de objetos, clasificación, área de los objetos, perímetro, etc) [2]. Además, esta imagen podrá provenir del sistema cliente o formar parte de un vector de imágenes previamente guardados en el sistema caracterizador. A fin de realizar esta tarea, el sistema caracterizador será capaz de acceder a una base de datos (que es un fichero .txt), la cual indica los preprocesamientos necesarios a realizar para la extracción de la característica correspondiente. Esta base de datos contendrá en cada línea una característica y sus procesamientos correspondientes, separados por el carácter “;”. Para terminar el fichero se escribirá en la última línea la palabra fin precedida del carácter “;”. Además, en cualquier momento puede ser interesante visualizar la imagen según van realizándose sobre ella los distintos preprocesamientos. Para hacer esto, puede incluirse en el fichero base de datos un comando “visualizar” tras el preprocesamiento correspondiente, de manera que se visualiza la imagen en el estado que queda tras realizar este preprocesamiento. Por otra parte, los clientes son generadores de peticiones para llevar a cabo tareas específicas de clasificación de objetos. El sistema cliente (Fig. 1) es una aplicación capaz de comunicarse con los sistemas servidores, para intercambiar imágenes, características, etc. Por tanto, el cliente tiene acceso a los métodos del sistema servidor de imágenes, a fin de adquirir las imágenes que necesite. Además, el sistema cliente puede comunicarse con el sistema caracterizador para pasarle una imagen, y pedirle unas características de un objeto de la imagen. Para comunicarse con el sistema caracterizador, el sistema cliente puede pasarle una imagen propia o la que reciba de la llamada al sistema servidor. Así pues, al implementar el sistema cliente se han contemplado varias posibilidades, hacer una llamada a uno de los dos subsistemas o a los dos a la vez. Un ejemplo de esta base de datos es el siguiente: Area;segmentación;etiquetado;measure Circulo;segmentación;etiquetado;particle ... ;fin Estos procesamientos podrán ser implementados con las funciones proporcionadas por el paquete IMAQ de LabVIEW o bien a través de funciones en C. Finalmente, el sistema caracterizador devolverá como parámetros de salida las características demandadas por el cliente. Para la implementación del sistema caracterizador, hemos realizado un programa en LabVIEW que realiza el tratamiento de la base de datos de características, así como los procesamientos correspondientes de la imagen correspondiente. Para la ejecución de subrutinas en C hemos utilizado el bloque “Call DLL function”. Este bloque ejecuta la llamada a una DLL previamente creada, proporcionando unos datos de salida que pueden ser conectados a otros bloques de LabVIEW. El motivo de usar esta opción y no la “Code interface node” es que para nuestra aplicación en concreto resulta mucho más fácil crear una DLL (los datos que necesitamos manejar son vectores, soportados por la “Call library function”) standard de Windows, que desarrollar un CIN personalizado (que no necesitamos, dado que los datos que pretendemos manejar son fácilmente manejados por una DLL). 2.3 CLIENTES Figura 1: Interface de los clientes. 3 RESULTADOS Finalmente, se van a mostrar los pasos reales seguidos en la adquisición y tratamiento de una imagen: 1.- Adquisición de la imagen a través de una cámara dada. El sistema cliente hace una petición de captura de imagen al sistema servidor de imágenes. En el interfaz del sistema cliente se han configurado convenientemente los parámetros necesarios de la cámara y formato de la imagen. Tras realizar la llamada el sistema servidor devuelve la imagen pedida teniendo en cuenta las indicaciones del cliente (Fig. 2). Referencias [1] Coulouris, G.F., Dollimore J. and Kindberg T., Distributed systems: Concepts and design, Addison Wesley, 2ª edicion. [2] Davies, R. (1997) “Machine Vision: Theory, Algorithms, Practicalities”.Academic Press. [3] Travis, J., (2000) Internet applications in LabVIEW, ISBN Hall, USA. Figura 2: Imagen capturada por el sistema servidor 2.- Una vez recibida, la imagen se transfiere al sistema caracterizador, el cual realiza normalmente una segmentación previa al procesamiento de la imagen, a fin de discernir mejor los objetos que la componen. En nuestra base de datos hemos incluido un comando “visualizar”, tal y como hemos comentado arriba. Gracias a este comando, podemos observar el estado en que queda la imagen tras realizar la segmentación (Fig. 3). Figura 3: Imagen tras proceso de segmentación 3.- De la misma forma se aplicará la secuencia de procesamiento especificada en la base de datos para extraer las características demandadas por el cliente. Los algoritmos de procesamiento de imágenes puede estar implementados utilizando las funciones incluidas en LabVIEW 6.01 o bien haber sido programado de manera tradicional en un lenguaje de alto nivel como C. 4.- El cliente realizará una petición a un servidor de clasificación para determinar las clases de objetos que hay en la imagen.