opencv-lib para pdi

10
OPENCV, LIBRERÍA DE CÓDIGO ABIERTO PARA PROCESAMIENTO DE IMÁGENES Y VIDEO, MEDIANTE TÉCNICAS DE AJUSTE ESTADÍSTICO E INTELIGENCIA ARTIFICIAL Darvis Dorvigny Dorvigny 1* , Joelsy Porven Rubier 2 1 Departamento de Programación e Ingeniería de Software, Facultad 2, Universidad de las Ciencias Informáticas 2 Departamento de Sistemas Digitales, Facultad 2, Universidad de las Ciencias Informáticas *Autor para la correspondencia: [email protected] RESUMEN La visión artificial o visión por computadoras es un campo que ha crecido vertiginosamente en los últimos años. Es esencialmente la transformación de los datos que provienen de algún dispositivo, en una nueva representación con la que se persigue algún objetivo en particular. Se trata de “emular” parte del proceso fisiológico que ocurre en los primeros milisegundos de la visión humana. Se han realizado muchas investigaciones en las últimas décadas intentando comprender el sistema visual natural de que disponemos los humanos. Se han logrado en estos años importantes aplicaciones, entre ellas la obtención de imágenes basadas en iluminación, efectos visuales, recuperación de datos basado en imágenes, reconocimiento de rostros, etc. En este artículo se aborda la aplicación de técnicas de inteligencia artificial en el área de reconocimiento de patrones en imágenes digitales, mediante el uso de la librería de código abierto OpenCV, haciendo énfasis en las técnicas soportadas en MLL. Palabras Claves: OpenCV, Inteligencia Artificial, Visión por computadora, Reconocimiento de patrones OPENCV, OPEN SOURCE LIBRARY FOR IMAGE AND VIDEO PROCESSING TECHNIQUES, USING STATISTICAL ADJUSTMENT AND ARTIFICIAL INTELLIGENCE ABSTRACT Computer vision is a field that has grown rapidly in recent years. It is essentially the transformation of the data coming from any device, in a new representation which aims a particular goal. It is "emulating" part of the physiological process that occurs in the first milliseconds of human vision. There has been much research in recent decades trying to understand the natural visual system that humans have. There has been significant in recent years applications including imaging based on lighting, visual effects, data recovery image-based face recognition, etc. This

Upload: giancarlo-reyes-fernandez

Post on 05-Aug-2015

286 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Opencv-lib Para Pdi

OPENCV, LIBRERÍA DE CÓDIGO ABIERTO PARA

PROCESAMIENTO DE IMÁGENES Y VIDEO, MEDIANTE TÉCNICAS

DE AJUSTE ESTADÍSTICO E INTELIGENCIA ARTIFICIAL Darvis Dorvigny Dorvigny

1*, Joelsy Porven Rubier

2

1Departamento de Programación e Ingeniería de Software, Facultad 2, Universidad de las Ciencias Informáticas

2 Departamento de Sistemas Digitales, Facultad 2, Universidad de las Ciencias Informáticas

*Autor para la correspondencia: [email protected]

RESUMEN

La visión artificial o visión por computadoras es un campo que ha crecido vertiginosamente en los últimos años. Es

esencialmente la transformación de los datos que provienen de algún dispositivo, en una nueva representación con la

que se persigue algún objetivo en particular. Se trata de “emular” parte del proceso fisiológico que ocurre en los

primeros milisegundos de la visión humana. Se han realizado muchas investigaciones en las últimas décadas

intentando comprender el sistema visual natural de que disponemos los humanos. Se han logrado en estos años

importantes aplicaciones, entre ellas la obtención de imágenes basadas en iluminación, efectos visuales, recuperación

de datos basado en imágenes, reconocimiento de rostros, etc. En este artículo se aborda la aplicación de técnicas de

inteligencia artificial en el área de reconocimiento de patrones en imágenes digitales, mediante el uso de la librería de

código abierto OpenCV, haciendo énfasis en las técnicas soportadas en MLL.

Palabras Claves: OpenCV, Inteligencia Artificial, Visión por computadora, Reconocimiento de patrones

OPENCV, OPEN SOURCE LIBRARY FOR IMAGE AND VIDEO PROCESSING

TECHNIQUES, USING STATISTICAL ADJUSTMENT AND ARTIFICIAL

INTELLIGENCE

ABSTRACT

Computer vision is a field that has grown rapidly in recent years. It is essentially the transformation of the data

coming from any device, in a new representation which aims a particular goal. It is "emulating" part of the

physiological process that occurs in the first milliseconds of human vision. There has been much research in recent

decades trying to understand the natural visual system that humans have. There has been significant in recent years

applications including imaging based on lighting, visual effects, data recovery image-based face recognition, etc. This

Page 2: Opencv-lib Para Pdi

article addresses the application of artificial intelligence techniques in the area of pattern recognition in digital images,

using the open source OpenCV library, emphasizing the techniques supported in MLL.

Keywords: OpenCV,Artificial Inteligence ,Coputer Vision, Patern Recognition.

1 INTRODUCCIÓN

La visión artificial o visión por computadoras es un campo que ha crecido vertiginosamente en los últimos años. Es

esencialmente la transformación de los datos que provienen de algún dispositivo, en una nueva representación con la

que se persigue algún objetivo en particular. Los datos de entrada pueden proporcionar informaciones tales como: "En

la imagen en movimiento se encuentra el objeto X", "el objeto X está situado a un metro de distancia", o “El rostro

que aparece en esa imagen corresponde a la persona Y”. Una nueva representación puede significar, por ejemplo, la

transformación de una imagen a color en otra imagen en escala de grises, o la eliminación del movimiento de la

cámara en una secuencia de imágenes. (Bradski and Kaehler 2008)

Se trata de “emular” parte del proceso fisiológico que ocurre en los primeros milisegundos de la visión humana. Se

han realizado muchas investigaciones en las últimas décadas intentando comprender el sistema visual natural de que

disponemos los humanos. (Frost Gorder 2008)

Se han logrado en estos años importantes aplicaciones, entre ellas la obtención de imágenes basadas en iluminación,

efectos visuales, recuperación de datos basado en imágenes, reconocimiento de rostros, etc. (Medioni and Kang 2004)

Entre los factores que constituyen limitaciones en la visión por computadora se encuentran el deterioro de los datos

por el ruido, interferencias y distorsiones de fuentes tales como las condiciones cambiantes del clima, iluminación,

reflejos y el movimiento, que provienen del mundo analógico. Para que una computadora pueda procesar los datos, es

necesario que se convierta en un formato digital, que requiere un muestreo de la entrada del mundo continuo.

El procesamiento de imágenes es un arte en sí mismo, y una ciencia, aunque a los efectos de esta discusión pueden

clasificarse en 3 grandes áreas: (Chaczko, Yeoh et al. 2010)

Preprocesamiento de imágenes.

Segmentación de la imagen (lo básico que conduce a Detección de Objetos).

Detección de color.

En (Miller, Fels et al. 2011) se propone la siguiente clasificación de alcance para la visión por computadoras:

Acceso: La recuperación de datos de la imagen.

Transferencia: La comunicación de datos de imágenes.

Conversión: La conversión al formato requerido.

Page 3: Opencv-lib Para Pdi

Modificación: La aplicación de filtros, transformaciones, etc.

Análisis: El uso de la visión para entender una escena, extraer información relevante de la imagen.

Entre los retos fundamentales que se enfrentan en la visión por computadora está el reconocimiento de patrones en las

imágenes, sean estáticas o en movimiento. Una de las librerías más usadas actualmente en el procesamiento de

imágenes es el desarrollo liberado por Intel como OpenCV. Estas librerías proveen rutinas fundamentales para el

tratamiento de imágenes estáticas o en movimiento, y para el reconocimiento de algunos patrones en dichas imágenes.

Para ello se basan en técnicas estadísticas, y de inteligencia artificial.

Según (Chaczko, Yeoh et al. 2010) la librería OpenCV ha sido desarrollada para aliviar la carga en la programación

de aplicaciones para la visión artificial, aportando un gran número de funciones para el procesamiento de imágenes, y

algoritmos numéricos de propósito general. Existen muchas funciones de nivel superior tales como

cvCalibrateCamera cvCalcMotionGradient, que se encargan de servir de interfaz con los dispositivos de captura de

imágenes, y que devuelven resultados razonables en la mayoría de las condiciones, y están diseñadas para acelerar el

proceso de desarrollo de aplicaciones.

Dentro de los componentes fundamentales de la arquitectura de OpenCV se encuentra la Librería de Aprendizaje

Automático (MLL), la cual consiste en un conjunto de algoritmos “inteligentes” basados en el aprendizaje estadístico,

que se centran en convertir los datos en información útil. En este aspecto se centrará el desarrollo de este artículo.

2 Arquitectura y estructura básica de OpenCV

OpenCV se basa en el uso de una estructura modular compuesta por librerías que proveen una gran variedad de

funciones. Cada módulo se asocia a una funcionalidad determinada dentro del proceso de visión artificial, siguiendo

una arquitectura similar a la mostrada en la figura 1.

Core

Estructuras y algoritmos básicos, soporte XML, YML,

ml

Clasificadores

K-NN

SPV

Highgui

Interfaces gráficas,

funciones de entrada

salida de video.

imgproc

Procesamiento de

imágenes y

algoritmos de visión

Page 4: Opencv-lib Para Pdi

Figura 1. Arquitectura básica de OpenCV. Tomada de (Bradski and Kaehler 2008).

Las funcionalidades fundamentales están ligadas a los módulos siguientes:(OpenCV)

Core: Contiene las estructuras de datos básicas, funciones para la persistencia de datos, y otras usadas por el

resto de los módulos.

Imgproc: Contiene todo el procesamiento de imágenes que incluye funciones para aplicar transformaciones

lineales y no lineales, cálculo de histograma, transformaciones geométricas, entre otras.

Video: Contiene funciones para la estimación de movimiento y el seguimiento de objetos en flujos de video.

Highgui: Contiene las interfaces para la codificación, decodificación y captura de video e imágenes así como

las interfaces gráficas fundamentales.

Además de los módulos mencionados se encuentra Objectdetect que permite el reconocimiento de objetos mediante el

uso de cascadas Haar, Features2d para la detección de características en imágenes (OpenCV), Calib3d para el

procesamiento y reconstrucción de objetos 3D y la calibración de dispositivos de video.

2.1 Aprovechamiento de hardware y optimización para procesadores Intel

OpenCV se concibió para trabajar en tiempo real, por lo que cuenta con un gran número de optimizaciones en el

código y posibilidades para usar al máximo las estaciones de trabajo modernas. La implementación está hecha en

lenguaje C y programación de bajo nivel. Todo el código es completamente reentrante lo que permite usar todas las

funciones brindadas en entornos multitatarea.

Para acelerar el procesamiento en tiempo de ejecución, se detecta automáticamente si están instaladas en el sistema:

la librería de procesamiento matemático(Intel) (MKL, por sus siglas en inglés), y la librería de primitivas de

optimización(Intel) (IPP, por sus siglas en inglés), en una arquitectura con un procesador Intel compatible. IPP

proporciona un conjunto de primitivas que aprovechan dentro las instrucciones especiales asociadas a las tecnologías

MMX, SSE2 y SSE3. Aunque estas librerías mejoran de rendimiento en gran medida, la instalación de OpenCV en

cualquiera de las arquitecturas soportadas es independiente y no requiere que estén instaladas.

Otra de las posibilidades disponibles para acelerar el procesamiento es el uso de los procesadores gráficos o GPU, por

sus siglas en inglés. OpenCV permite la utilización de los GPU mediante el uso de la plataforma de computación

Page 5: Opencv-lib Para Pdi

paralela CUDA (OpenCV). Con esta tecnología se aprovecha la posibilidad de ejecutar múltiples tareas en paralelo

aumentando la rapidez de procesamiento y la eficiencia, fundamentalmente para su uso en tiempo real.

3 Procesamiento de imágenes y módulos de inteligencia artificial para el reconocimiento de patrones en

OpenCV.

El reconocimiento de patrones es un área importante dentro de la visión artificial, donde se intenta descubrir si existen

patrones conocidos en una imagen dada. El proceso que comprueba en la imagen la posible ubicación de un patrón se

llama búsqueda de coincidencias de imágenes. Las técnicas de coincidencia constituyen la forma más sencilla de

hacer el reconocimiento de patrones.

Debido a que la visión y el aprendizaje por computadora están muy unidos, OpenCV incluye una librería completa

librería de propósito general llamada Machine Learning Library (MLL). Esta sub-librería, se centra en patrones

estadísticos de reconocimiento y agrupación, y es muy útil para las tareas de visión artificial.

Algunas de sus principales funciones son:

- Clasificadores bayesianos.

- Algoritmos de clasificación por vecindad.

- Maquinas de soporte vectorial.

- Árboles de clasificación.

- Redes de neuronas.

- Boosting.

- Random trees

En (Bradski and Kaehler 2008) y (Marengoni and Stringhini 2011) se describen detalladamente cada una de estas

técnicas.

El objetivo de la máquina de aprendizaje es convertir los datos en información. Después de aprender de una colección

de datos, se desea alcanzar la capacidad de responder a preguntas sobre los datos, tales como:

¿Qué otros datos son los más similares a los previamente dados? ¿Hay un coche en la imagen? El aprendizaje

automático convierte los datos en información utilizando las reglas de extracción de patrones o de sus datos. (Bradski

and Kaehler 2008)

El aprendizaje de la máquina funciona con datos como: valores de temperatura, la intensidad de color, etc. Se podría,

por ejemplo, tener una base de datos de 10 000 imágenes de rostros, y a sobre cada una ejecutar un detector de bordes

o contornos, para luego recopilar características tales como la dirección del borde, forma, etc. De esta forma se podría

obtener al menos 500 valores de ese tipo por la forma del contorno del rostro, o un vector de características de 500

Page 6: Opencv-lib Para Pdi

entradas. A continuación, se puede utilizar técnicas de aprendizaje automático para construir una especie de modelo a

partir de estos datos recogidos.

Si sólo se desea ver cómo se clasifica en los diferentes grupos (ancho, estrecho, etc.), a continuación se puede utilizar

un algoritmo de agrupamiento. Si se desea aprender a predecir la edad de una persona, por ejemplo, a partir del

patrón de bordes detectados en su rostro, se podría utilizar otro algoritmo clasificador. Para lograr estos objetivos, los

algoritmos de aprendizaje automático deben analizar las características recogidas y ajustar pesos, umbrales, y otros

parámetros para maximizar el rendimiento de acuerdo con esas metas. Este proceso de ajuste de parámetros para

lograr una meta es lo que se entiende por aprendizaje.

Siempre es importante saber qué tan bien los métodos de máquinas de aprendizaje están funcionando, y

esta puede ser una tarea sutil. Tradicionalmente, se separa el conjunto de datos original en una gran

conjunto de entrenamiento (por ejemplo, suponer que de la base datos del ejemplo anterior, se toman 9000), y un

conjunto de prueba más pequeño (los restante 1000). A continuación, se puede ejecutar un clasificador sobre el

conjunto de entrenamiento para aprender el modelo de predicción de la edad, dada la característica de los vectores de

datos. Al finalizar se podrá probar el clasificador de la predicción de edad en las imágenes que quedan en el conjunto

de prueba.(Bradski and Kaehler 2008)

OpenCV dispone de dos métodos para implementar las redes neuronales: Máquinas de Soporte Vectorial (SVM, por

sus siglas en inglés) y Perceptrón Multicapa (MLP, por sus siglas en inglés).

Perceptrón Multicapa

El perceptrón multicapa (MLP, también conocida como backpropagation) es una red neuronal que todavía se

encuentra entre los clasificadores de alto rendimiento, especialmente para el reconocimiento de texto (Wagner 2011).

Puede ser lento en el entrenamiento, ya que utiliza descenso de gradiente para minimizar el error mediante el ajuste de

conexiones ponderadas entre los nodos de clasificación dentro de las capas. En cambio, en el momento de reconocer

los casos de prueba, es muy rápido. En OpenCV se implementa en la clase CvANN_MLP, y su uso está documentado

en el archivo /OpenCV/samples/c/letter_recog.cpp. Puede descargarse de .

Page 7: Opencv-lib Para Pdi

Figura 2. Estructura de una Red Neuronal Multicapa. Tomada de (Marengoni and Stringhini 2011)

Support Vector Machine

Las SVM fueron introducidos por Chervonenkis Vapnikand en su artículo "Teoría de Reconocimiento de Patrones"

(Wagner 2011). La idea fundamental es encontrar el hiperplano óptimo para separar un conjunto de datos

representados en un espacio p-dimensional, asumiendo que teóricamente existen infinitos hiperplanos para separar un

conjunto de datos(Abril 2003). Un hiperplano es elegido, de manera que la distancia de los puntos entre ambas clases

se maximice. Los puntos que abarca el hiperplano son los “vectores de soporte”, y de ahí es que proviene el nombre

de SVM.

Dada la alta linealidad del clasificador SVM sobre el conjunto de datos p-dimensional en bruto, se pueden utilizar

técnicas lineales de clasificación basadas en la distancia máxima entre las clases de separación, para producir nuevos

clasificadores lineales, que optimicen la separación entre las clases. Esta técnica se aplica en la clase CvSVM en la

biblioteca OpenCV de ML. (Abril 2003)

El objeto fundamental de las SVMs, es dar solución al problema que surge en distintos campos, donde se estudia la

relación entre sesgo y varianza, el control de la capacidad, sobreajuste en los datos, etc. Este problema consiste en

buscar, para una tarea de aprendizaje dada, con una cantidad finita de datos, una adecuada función que permita llevar

a cabo una buena generalización, que sea resultado de una adecuada relación entre la precisión alcanzada con un

conjunto de entrenamiento particular y la capacidad del modelo.(Abril 2003)

Page 8: Opencv-lib Para Pdi

Figura 3. Estructura general de una SVM. Tomada de (Abril 2003).

Los parámetros para la SVM se definen en la estructura CvSVMParams dentro de la librería OpenCV. En (Wagner

2011) se detallan cada uno de estos parámetros. El entrenamiento se realiza pasando el vector con los datos de

entrenamiento, y el vector con las etiquetas de las clases, al constructor o la función de entrenamiento.

3.1 Detección de Objetos

La detección de objetos, es una de las funcionalidades disponibles en OpenCV en la biblioteca de funciones

objectdetect. Se encuentra como un módulo independiente debido a que se desarrolló posteriormente al módulo de

aprendizaje por computadora.

Para le detección de rostros, como uno de los objetos más difíciles de clasificar, se usa la técnica Adaboost para la

selección y clasificación de características sobre imágenes a las que previamente se le aplicó una base de filtros

Haar.(Viola and Jones 2004) (Guevara, Echeverry Correa et al. 2008)

Este método fue propuesto por Paul Viola y Michael .J Jones(Viola and Jones 2004) y se basa en la transformación de

la imagen en una nueva, llamada imagen integral. Esta se forma como resultado de la suma de los pixeles de la

imagen original hasta una posición (x,y) predefinida, como se describe en (Guevara, Echeverry Correa et al. 2008).

La extracción de características se basa en la aplicación de filtros con base Haar que generan una codificación de

diferencias en las intensidades, generando patrones en base a los contrastes de las regiones. Para la clasificación se

usa el método de Boosting, que pertenece a los métodos ensambladores donde se combinan varios clasificadores

como se muestra en la figura 4 para obtener menor porciento de error.

Page 9: Opencv-lib Para Pdi

Figura 4. Uso de clasificadores en cascada. Tomada de (Vázquez and Castro).

Estos clasificadores se entrenan con bancos de imágenes positivas y negativas para para ajustar los pesos en la

clasificación.

OpenCV implementa un conjunto de funciones que permiten el proceso de entrenamiento, persistencia de datos, y

procesamiento de imágenes de forma muy sencilla. Para el proceso de detección es necesario cargar los datos del

clasificador mediante la llamada a la función:

bool CascadeClassifier::load(const string& filename)

La clasificación se hace mediante la función:

void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int

minNeighbors=3, int flags=0, Size minSize=Size()).

Esta función permite procesar la imagen devolviendo los objetos detectados como una lista de rectángulos.

La detección mediante el método de Viola-Jones, usando cascadas de clasificadores Haar permite no solamente tener

muy buenos resultados y la detección de rostros. Se pueden entrenar los clasificadores para la detección de

características faciales u otros objetos. Un ejemplo documentado se describe en (Vázquez and Castro).

CONCLUSIONES

La aplicación de técnicas de inteligencia artificial en el procesamiento de imágenes y señales digitales es un área del

conocimiento donde queda mucho camino por recorrer. El uso de técnicas de inteligencia computacional que simulen

y lleguen a alcanzar la complejidad de los sistemas cognitivos biológicos, requiere del perfeccionamiento y

descubrimiento de métodos y algoritmos que permitan a los sistemas computacionales realizar esta tarea de forma

Clasificador 1 Clasificador 2 Clasificador N

Imagen Positivo

Negativo

Page 10: Opencv-lib Para Pdi

eficiente. Las posibilidades brindadas por OpenCV, como una librería de código abierto que permita a entusiastas y

profesionales trabajar en este tema, es un paso de gran importancia.

Actualmente las posibilidades que brinda OpenCV desde la perspectiva de la visión artificial en el área de

reconocimiento de patrones pueden ser aplicadas a una gran cantidad de problemas reales. Debido a su estructura

modular y la capacidad de contar con todo el marco de trabajo para desarrollar nuevas funciones, permite tener una

herramienta de gran utilidad tanto para ambientes académicos como industriales.

REFERENCIAS

. "Sitio Oficial de OpenCV." Retrieved 27 de noviembre de 2011, 2011, from opencv.willowgarage.com.

Abril, G. L. (2003). Modelos de clasificación basados en máquinas de Vectores Soporte.

Bradski, G. and A. Kaehler (2008). Learning OpenCV: Computer vision with the OpenCV library, O'Reilly Media.

Chaczko, Z., L. Yeoh, et al. (2010). A preliminary investigation on computer vision for telemedicine systems using OpenCV,

IEEE.

Frost Gorder, P. (2008). "Computer vision, inspired by the human brain." Computing in Science & Engineering 10(2): 6-11.

Guevara, M. L., J. D. Echeverry Correa, et al. (2008). "Detección de rostros en imágenes digitales usando clasificadores en

cascada." Scientia.

Intel. "Intel Integrated Performance Primitives for Linux* OS User's Guide." Retrieved 25 de noviembre de 2011, 2011, from

http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/ippxe/ipp_userguide_lnx/index.htm.

Intel. "Intel Math Kernel Library (Intel® MKL) 10.3 " Retrieved 26 de noviembre de 2011, 2011, from

http://software.intel.com/en-us/articles/intel-mkl/.

Marengoni, M. and D. Stringhini (2011). High Level Computer Vision Using OpenCV, IEEE.

Medioni, G. and S. B. Kang (2004). Emerging topics in computer vision, Prentice Hall PTR.

Miller, G., S. Fels, et al. (2011). A conceptual structure for computer vision, IEEE.

OpenCV. Retrieved 25 de noviembre de 2011, 2011, from http://opencv.itseez.com/modules/core/doc/intro.html.

Vázquez, I. L. and J. L. A. Castro "DETECCIÓN DE CARAS Y LOCALIZACIÓN DE CARACTERÍSTICAS FACIALES

PARA RECONOCIMIENTO BIOMÉTRICO."

Viola, P. and M. J. Jones (2004). "Robust real-time face detection." International journal of computer vision 57(2): 137-154.

Wagner, P. (2011). "Statistical Machine Learning with OpenCV."