SISTEMA DISTRIBUIDO DE VISIÓN ARTIFICIAL
Mario Cerdá Castells
Dirección, mario@proyecson.com
Antonio José Sánchez Salmerón
Dirección, asanchez@isa.upv.es
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.