Vision Artificial
Vision Artificial
DIRECTOR
ALEJANDRO PAOLO DAZA
REVISOR
JORGE MARIO CALVO
Para definir la visión computacional podemos optar por la definición de Marr (Marr D. ,
1982) en la cual hay aspectos importantes que nos llevan a entender la visión
computacional como el estudio de los procesos asociados a la visión natural, y que tiene
como fin entender estos procesos y construir maquinas con capacidades similares.
Uno de los campos con mayor proyección dentro de la Visión Artificial es el relacionado
con el Reconocimiento Biométrico Facial, el cual se centra en el mismo identificador que
utilizamos los humanos para distinguir una persona de otra: su rostro. Por tanto, uno de los
objetivos principales es comprender el complejo sistema visual humano y como se
representan los rostros para lograr discriminar identidades con exactitud.
Este proyecto se enfoca en estudiar los diferentes métodos y algoritmos que permiten
detectar un rostro en una imagen, y desarrollar una aplicación que pueda ser entrenada para
realizar el reconocimiento de una persona especifica dentro de la imagen.
7
PARTE 1. DESCRIPCIÓN DE LA INVESTIGACIÓN
La visión artificial por computadora utiliza sensores ópticos, como cámaras fotográficas y
de video, para adquirir imágenes y luego procesarlas mediante algún tipo de procesador,
con el fin de extraer y analizar cierto tipo de propiedades de la imagen capturada (Múnera
Salazar & Manzano Herrera, 2012). De lo anterior, podemos concluir que la visión
computacional hace uso de computadoras y cámaras para adquirir, analizar e interpretar
imágenes de una forma equivalente a la inspección visual humana.
8
La detección automática de objetos en imágenes sigue siendo un reto y una fuente muy
interesante de oportunidades para el desarrollo de investigaciones y estudios dentro de la
visión por computadora. El presente trabajo, busca contribuir con el crecimiento de este
campo, presentando una forma sencilla de entrenar una red neuronal que permita reconocer
una persona, utilizando técnicas existentes y algoritmos propios de la visión artificial que
nos provee la biblioteca OpenCV (OpenCv, 2017).
1.2. OBJETIVOS
Objetivo general
Crear un prototipo de aplicación que permita entrenar una red neuronal, utilizando técnicas
de visión artificial y la biblioteca OpenCV, para reconocer el rostro de una persona en una
imagen.
Objetivos específicos
• Identificar, analizar y evaluar los diferentes algoritmos de la visión artificial, que
permitan realizar el reconocimiento de un objeto en una imagen.
• Analizar y evaluar las técnicas de visión artificial y de biometría que permitan la
identificación de una persona mediante sus características faciales, para utilizarlas
en el proceso de identificación de una persona mediante su rostro.
• Implementar una red neuronal que permitan reconocer el rostro de una persona en
una imagen, mediante técnicas y algoritmos de entrenamiento implementados por la
biblioteca de visión artificial - OpenCV.
9
pasado delictivo (Rodríguez Salavarría, 2009). La industria de reconocimiento facial
basado en computadoras ha hecho muchos adelantos útiles en la pasada década; sin
embargo, la necesidad de sistemas de mayor precisión persiste.
A pesar de estos adelantos y los constantes estudios sobre el tema, el problema del
reconocimiento de rostros sigue vigente. Las principales dificultades del reconocimiento
están relacionadas con los diferentes factores externos que generan variaciones en el rostro
de una persona, estos están dados por las iluminación a la cual este expuesta la persona al
momento de capturar la imagen, los posibles accesorios que pueda llevar, como gafas o
sombreros y también las variaciones fisionómicas relacionadas con el paso del tiempo.
El presente proyecto, está enmarcado dentro del ámbito de la visión artificial y pretende
aplicar las técnicas y procesos propios de esta disciplina para el procesamiento y
reconocimiento de entornos mediante imágenes digitales captadas por una cámara. La
información recibida en la imagen será interpretada utilizando los algoritmos propios de la
visión por computadora, con el fin de poder reconocer el rostro de una persona especifica
dentro de la imagen.
10
1.4. HIPÓTESIS
La visión artificial provee conceptos y técnicas que, aplicadas mediante algoritmos y redes
neuronales, permiten detectar un objeto especifico presente en una imagen. Una de las
bibliotecas de visión artificial que implementa y nos permite realizar este trabajo es
OpenCV (Geeky, 2011), esta biblioteca implementa algoritmos para la detección de objetos
y también para la detección de rostros en imágenes y video.
OpenCV nos facilita la terea de detectar rostros, ya que cuenta con clasificadores
entrenados para esta tarea, además tiene implementado el algoritmo de Viola-Jones (Viola
& Jones, Rapid object detection using a boosted cascade of simple features, 2001), el cual
permite realizar este proceso de detección de rostros de forma sencilla y a muy bajo costo
computacional. En caso de que lo necesitemos podemos crear nuestros propios
clasificadores, OpenCv nos permite entrenar nuestros propios clasificadores utilizando
AdaBoost (OpenCv O. , 2017).
La biblioteca OpenCV puede ser integrada con diferentes lenguajes de programación como:
C++, Java, Python y los lenguajes de la plataforma .Net; por lo cual, es posible utilizarla
para crear una aplicación para entornos web o de escritorio, que permita la detección de
rostros dentro de una imagen tomada mediante una cámara.
11
Debido a la complejidad del proceso, la visión artificial se ha dividido en varias etapas o
procesos. En cada una de ellas, las imágenes y la cantidad de información se va refinando
hasta lograr el reconocimiento del objeto buscado. Generalmente se consideran cuatro
procesos (Sánchez, 2002):
12
Para lograr el reconocimiento de un rostro en una imagen se realizan dos etapas de
procesamiento con sus respectivas técnicas y algoritmos. En la primera etapa se utilizan
clasificadores en cascada y el algoritmo de Viola-Jones para lograr detectar un rostro dentro
de la imagen (Viola & Jones, Robust real-time face detection, 2004). Viola-Jones utiliza
clasificadores en cascada los cuales se entrenan utilizando el algoritmo de AdaBoost
(Mayhua-Lopez, Gómez-Verdejo, & Figueiras-Vidal, 2012), con el cual se logra crear
clasificadores fuertes a partir de clasificadores débiles.
Para observar la relación de estos conceptos con las etapas realizadas para la detección y
reconocimiento, se elaboró el siguiente mapa conceptual. En él se observan los conceptos
más relevantes en el proceso y su relación con el proceso general que permite el
reconocimiento de rostros utilizando la librería de visión artificial OpenCV (OpenCv,
2017).
Imagen 1. Mapa de Conceptos para detección y Reconocimiento de Rostros en Imágenes. Fuente: Realización
Propia
13
1.5.2.1. Machine Learning
El aprendizaje automático (ML), es un tipo de inteligencia artificial (IA) que proporciona a
los ordenadores la capacidad de aprender sin ser explícitamente programados (Michalski,
Carbonell, & Mitchell, 2013). El aprendizaje automático se centra en el desarrollo de
programas informáticos que pueden cambiar cuando se exponen a nuevos datos.
14
muy baja, se combinan para formar un clasificador de mayor precisión (Gómez-Verdejo,
Ortega-Moral, Arenas-García, & Figueiras-Vidal, 2006).
El Boosting tiene sus raíces en un marco teórico para el estudio del aprendizaje de máquina
(Machine Learning), llamado "PAC" (Probably Approximately Correct) Learning Model,
expuesto en 1984 por Leslie Valiant (Valiant, 1984). Convirtiéndose en el modelo más
importante en la teoría del aprendizaje computacional.
Entre los diferentes algoritmos de impulso (Boosting), tres de los más importantes son:
• AdaBoost (Adaptive Boosting)
• Gradient Tree Boosting
• XGBoost
15
Imagen 2. Características de Tipo Haar. (OpenCv O. , 2017)
Por ejemplo, considere la siguiente imagen. La fila superior muestra dos características
Haar, aplicadas a una imagen.
16
porque solo no puede clasificar la imagen, pero junto con otros clasificadores forma un
clasificador fuerte.
1.5.2.6. AdaBoost
AdaBoost (Adaptive Boosting), propone entrenar iterativamente una serie de clasificadores
base, de tal modo que cada nuevo clasificador preste mayor atención a los datos
clasificados erróneamente por los clasificadores anteriores, y combinarlos de tal modo que
se obtenga un clasificador con elevadas prestaciones (Mayhua-Lopez, Gómez-Verdejo, &
Figueiras-Vidal, 2012).
Para ello, durante una serie de iteraciones entrena un clasificador que implementa una
función asignándole un peso de salida, y lo añade al conjunto de modo que la salida global
del sistema se obtenga como combinación lineal ponderada de todos los clasificadores base
(Muñoz-Romero, Arenas-García, & Gómez-Verdejo, 2009).
Para conseguir que cada nuevo clasificador preste mayor atención a los datos más erróneos
se emplea una función de énfasis que pondera la importancia de cada dato durante el
entrenamiento del clasificador.
17
En el análisis de una imagen en busca de un rostro, se debe recorrer la imagen
completamente, esto se realiza tomando pequeñas ventanas de la imagen original. La mayor
parte de las ventanas que se analizan corresponden con porciones de la imagen donde no se
encuentran rostros, por lo tanto, un método rápido y sencillo, es analizar la pequeña ventana
de la imagen, si no es un rostro, desecharla y no procesarla de nuevo. De esta manera, se
optimiza el tiempo necesario para comprobar una posible región de un rostro en la imagen
completa.
18
Microsoft define c#, como: C # es un lenguaje orientado a objetos elegante y de tipo seguro
que permite a los desarrolladores crear una variedad de aplicaciones seguras y robustas que
se ejecutan en .NET Framework (Microsoft, 2017).
El trabajo que aporta las bases conceptuales y teóricas sobre visión artificial es publicado
en 1982 por David Marr (Marr D. , 1982), este trabajo presenta por primera vez una
metodología completa para el análisis de imágenes a través de un computador. A partir de
este trabajo de Marr, la visión artificial se establece como como una línea principal de
investigación en muchas universidades. Por ello se considera que la década de los ochenta,
marca un hito en el desarrollo de la Visión Artificial por computadora.
19
1.6. METODOLOGÍA DE LA INVESTIGACIÓN
Ian Sommerville (Sommerville, Ingenieria del Software, 2006), define modelo de proceso
de software, como "Una representación simplificada de un proceso de software,
representada desde una perspectiva específica. Por su naturaleza los modelos son
simplificados, por lo tanto; un modelo de procesos de software es una abstracción de un
proceso real."
No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la
imagen e insertarla de nuevo.
Para el desarrollo de cada uno de los incrementos, se puede utilizar un modelo clásico en
cascada, si los requerimientos a desarrollar como parte del incremento son lo
suficientemente claros y se pueden considerar estables. El modelo en cascada es el modelo
20
de desarrollo de mayor uso en la industria del software, en este modelo cada fase debe
seguirse en orden y debe terminar para poder continuar con la siguiente.
En este modelo una fase no puede iniciar, si la fase anterior no se ha terminado, esto es un
principio del modelo y debe ser respetado, ya que la salida de cada fase alimenta a la fase
siguiente.
No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a
continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.
21
1.7. ESTUDIO DE SISTEMAS PREVIOS
El MIT junto con la Universidad de Stanford se perfilan como los centros más
sobresalientes en los estudios de visión artificial, dentro de sus trabajos más relevantes se
pueden mencionar la visión aplicada a robótica bajo el proyecto Hand-Eye (Estados Unidos
Patente nº 7151853, 2005) y el llamado proyecto UIS (Nakano & Yasuaki, 1988), este
último proyecto marca el comienzo del uso de estas técnicas en aplicaciones de tipo militar.
Por otra parte, países como Japón desarrollaron el llamado proyecto PIPS (Pattern-
Information Processing System) (Nishino, 1978), el cual impulsó el desarrollo del análisis
de imágenes (Ken-ichi, Masatsugu, & Hidenori, 1978).
1.7.1. CARE-O-BOT
En 1999 en la universidad de Stuttgart Alemania, los médicos Schaeffer y May (Schraft,
Schaeffer, & May, 1998), desarrollaron el sistema Care-O-bot™, este sistema intenta
contribuir a las soluciones tecnológicas necesarias una plataforma de demostración de un
sistema móvil de atención en el hogar.
El Care-O-bot™ es un robot de servicio móvil que tiene la capacidad de realizar diversas
tareas de apoyo en el hogar, como llevar y traer objetos. El énfasis principal está puesto en
la integración de las tareas de comunicación y sociales, como llamadas automáticas de
emergencia y comunicación interactiva.
1.7.2. PHOTOFACE
En el 2011 durante la conferencia Information Forensics and Security de la IEEE, se
presenta la base de datos PhotoFace (Zafeiriou, 2013), en este trabajo se presenta una base
de datos adecuado para el reconocimiento facial 2D y 3D, basado en estéreo fotométrico.
La base de datos PhotoFace se creó mediante una medida de cuatro dispositivos estéreo
fotométricos, estos pueden ser fácilmente utilizados en entornos comerciales. A diferencia
22
de otras bases de datos a disposición del público el nivel de cooperación entre los sujetos y
el mecanismo de captura fue mínimo. El dispositivo propuesto también se puede usar, para
capturar en 3D caras expresivas.
1.7.3. LUNABOT
Un grupo de estudiantes de la Universidad Pedagógica Nacional participaron en la
competencia NASA's Third Annual Lunabotics Mining Competition, en el que participaron
un total de 70 equipos de universidades de diferentes países a nivel mundial. El desafío de
los estudiantes era diseñar y construir un robot excavador, llamado Lunabot, que pudiera
extraer y depositar un mínimo de 10 kilógramos de un compuesto similar a la arena lunar,
en 10 minutos en un lugar cerrado, desplazándose de un punto a otro (Ministerio de
Educación Nacional, 2013).
Como podemos darnos cuenta los trabajos sobre Visión Artificial no son solo interés de
instituciones o universidades extranjeras, en Colombia también existen trabajos interesantes
sobre este tema y que han generado aportes importantes de aplicación en diferentes campos
de la industria y la ciencia.
23
PARTE 2. DESARROLLO DE LA INVESTIGACIÓN
2.1. BIOMETRÍA
La Biometría es la ciencia que busca establecer la identidad de un Individuo basado en
atributos físicos o de comportamiento (Jain, Bolle, & Pankanti, Biometrics: personal
identification in networked society, 2006). El concepto de biometría proviene de la palabra
bio (vida) y metría (medida), por lo tanto, un equipo biométrico mide e identifica alguna
característica propia de una persona.
Las características anatómicas suelen permanecen estables al paso del tiempo, por ejemplo,
la huella dactilar; por el contrario, las características de comportamiento, pueden variar con
los años o con el estado anímico de la persona. Por ejemplo, la firma es considerada una
característica de comportamiento, que puede variar con el paso del tiempo.
No cualquier característica anatómica puede ser utilizada con éxito por un sistema
biométrico. Para que una característica pueda ser considerada como válida para un sistema
biométrico se debe considerar los siguientes aspectos (Jain, Flynn, & Ross, Handbook of
biometric, 2007):
24
• Cuantificación: Que la característica pueda ser medida de forma cuantitativa.
• Rendimiento: Que tan preciso, veloz y robusto es el proceso de identificación
• Aceptabilidad – Que tanta aprobación tiene por parte de las personas
• Fiabilidad - ¿Qué tan fácil engañar al sistema mediante técnicas fraudulentas?
La Biometría hace posible que una característica física de nuestro cuerpo pueda ser
utilizada como identificación y clave de acceso. Actualmente los sistemas Biométricos
tienen un futuro muy prometedor en lo relacionado a la autenticación digital, y se están
realizando muchos estudios para llevarla a sectores específicos como los pagos bancarios.
25
• Software de Detección de rostros: Se encarga de verificar si en la imagen está
presente un rostro.
• Software de reconocimiento: Se encarga de diferenciar los rostros que se encuentran
en la imagen, para diferenciar entre las personas presentes.
Este campo a tenido gran desarrollo en los últimos veinte años, y sigue evolucionando,
financiado principalmente por la industria militar, los bancos y la de seguridad.
Este método originalmente fue desarrollado para realizar la detección de rostros, pero
puede ser usado para detectar cualquier objeto dentro de una imagen. Actualmente es uno
de los métodos más utilizados en la industria, por su velocidad y su alto porcentaje de
acierto.
26
boosted cascade of simple features, 2001). También se denominan estos clasificadores
mediante el nombre de cascada, ya que el resultado del clasificador es el fruto de varios
clasificadores más simples utilizados en conjunto. Una porción de la imagen donde se
presume está el objeto buscado, debe superar todas las etapas del clasificador en cascada
para ser aceptado.
Imagen 6. Etapas del método para detección de rostros de Viola-Jones. Fuente: Realización propia.
27
a) Imagen Integral
La suma de todos los pixeles de un rectángulo, puede ser calculada empleando una
representación intermedia llamada imagen integral. Esta imagen intermedia permite extraer
de forma rápida características a diferentes escalas. Los autores definen la imagen integral
como aquella en la cual cada punto contiene el resultado de la suma de los valores de todos
los puntos situados por encima y a su izquierda en la imagen original.
La imagen integral es utilizada por el algoritmo como una forma rápida de calcular la suma
de los valores del rectángulo de una característica de tipo Haar (Papageorgiou, Oren, &
Poggio, 1998). Esta imagen integral es la suma de los pixeles del rectángulo desde la
esquina superior izquierda hasta un punto elegido dentro de la imagen. Para el cálculo de la
imagen integral, la imagen original debe estar en escala de grises.
b) Extracción de características
En imágenes las características de cada objeto se extraen al aplicar ciertas funciones que
permitan la representación y descripción de los objetos de interés de la imagen (patrones).
28
Imagen 8. Filtros Haar rotados, trasladados y con cambios de escala. (OpenCv O. , 2017)
29
c) Clasificación
Esta etapa se encarga de seleccionar un conjunto de características de tipo Haar
(Papageorgiou, Oren, & Poggio, 1998) y aplicarlos dentro de la imagen que se está
analizando. Para llevar a cabo la clasificación es necesarios realizar un proceso de
entrenamiento para crear un clasificador en cascada. Este proceso se realiza mediante el
algoritmo de AdaBoots (Sirovich & Kirby, 1987). La aplicación de clasificadores en
cascada ha permitido obtener muy buenos resultados y es uno de los grandes aportes de este
algoritmo.
3.2. EIGENFACES
Los sistemas de reconocimiento de rostros se basan en la idea de que cada persona tiene
una estructura de rostro particular y, utilizando la simetría facial, es posible la comparación
computarizada de las imágenes del rostro. El rostro y sus propiedades estructurales deben
ser identificadas cuidadosamente, y la imagen resultante debe convertirse en datos digitales
bidimensionales.
El enfoque de Eigenface (Sirovich & Kirby, 1987) es considerado por muchos como la
primera tecnología de reconocimiento facial de alto desempeño, y sirvió como base para
uno de los principales productos comerciales de tecnología de reconocimiento facial en
biometría (Heseltine, Pears, & Austin, 2002). Desde su desarrollo inicial y publicación, ha
habido muchas extensiones al método original y muchos nuevos desarrollos en sistemas
automáticos de reconocimiento facial.
30
La idea de utilizar los componentes principales para representar los rostros humanos fue
desarrollada por Sirovich y Kirby (Sirovich & Kirby, 1987) y utilizada por Turk y Pentland
(Turk & Pentland, Eigenfaces for recognition, 1991) para la detección y reconocimiento de
rostros. La motivación de las Eigenfaces es doble:
A partir de estos Eigenfaces, cada imagen del set de entrenamiento se puede reconstruir de
una forma muy aproximada. Se calcula la distancia entre el vector de valores de la imagen
de entrada con el resto de las imágenes del set de entrenamiento, y se selecciona la que
produce la distancia mínima. Si dicha distancia se encuentra dentro de un umbral
31
establecido, se selecciona como valor aceptado. Si no está dentro del umbral, se considerará
un rostro desconocido.
Este método es muy aceptado debido a su fácil implementación y a que, bajo unas buenas
condiciones, tiene un buen porcentaje de aciertos. Por el contrario, un inconveniente de este
enfoque es que no solo se maximiza la dispersión entre imágenes producida en mayor parte
por las condiciones de iluminación y por la expresión facial, lo cual dificulta la
clasificación.
4.1. OPENCV
Para el desarrollo de la aplicación utilizaremos el módulo de “Object Detection” del Core
de la librería OpenCV. Este detector de objetos utiliza los conceptos propuesto por Paul
Viola. (Viola & Jones, Rapid object detection using a boosted cascade of simple features,
2001)
32
Esta librería está escrita en C y C++ y cuenta con aproximadamente quinientas funciones
que abarcan diferentes procesos de la visión artificial. OpenCV fue diseñado para la
eficiencia computacional y con un fuerte enfoque en aplicaciones en tiempo real. La librería
permite el manejo eficiente de imágenes y matrices, reconocimiento de objetos y análisis de
imágenes utilizando la técnica de Eigenfaces y el algoritmo AdaBoost (OpenCv O. , 2017).
class cv::CascadeClassifier
struct cv::DetectionROI
33
struct cv::HOGDescriptor
class cv::SimilarRects
Tabla 1. Lista de Clases del módulo de reconocimiento de objetos de OpenCv. (OpenCv O. , 2017)
class cv::face::FaceRecognizer
Abstract base class for all face recognition models. More...
class cv::face::LBPHFaceRecognizer
class cv::face::PredictCollector
Abstract base class for all strategies of prediction result handling. More...
class cv::face::StandardCollector
Default predict collector. More...
Metodos
Ptr< BasicFaceRecognizer > cv::face::createEigenFaceRecognizer (int
num_components=0, double threshold=DBL_MAX)
34
Tabla 2. Clases y métodos del Módulo de reconocimiento facial de OpenCV. (OpenCv, 2017)
4.1. EMGUCV
Emgu CV es un contenedor para la plataforma .Net de la biblioteca de procesamiento de
imágenes de OpenCV (EmguCV, 2017). Permitir que las funciones de OpenCV sean
llamadas desde los lenguajes compatibles con .NET, tales como C #, VB, VC ++ etc. El
contenedor puede ser compilado por Visual Studio, Xamarin Studio y Unity, puede
ejecutarse en Windows, Linux, Mac OS X, iOS, Android y Windows para teléfonos
móviles.
EmguCV permite usar OpenCV en la plataforma .net con lenguajes como C #. El algoritmo
de Viola-Jones hace parte de EmguCV. Al usar este algoritmo, estaríamos haciendo uso de
un detector de rostros que ha sido entrenado con miles y miles de rostros humanos. Los
datos de entrenamiento generados a partir de los rostros se almacenan en archivos Xml que
vienen por defecto con el paquete EmguCV que se almacenan en [EnguCV Root Folder] \
opencv \ data \ haarcascades.
35
Con este modelo es posible probar cada módulo de la aplicación, detectar las fallas
corregirlas y seguir con el siguiente modulo, sin necesidad de esperar a tener toda la
funcionalidad implementada para iniciar con las pruebas. Esto permite una
retroalimentación temprana y la posibilidad de realizar ajustes específicos, sin tener que
realizar cambios a todo el desarrollo realizado.
A continuación, se detalla el proceso que se realizara para cada uno de los incrementos:
PRIMER INCREMENTO
• Definición de los requisitos: Se desarrollan los requerimientos relacionados con la
detección de un rostro en una imagen.
• Diseño de software: Se diseñan los casos de uso.
• Implementación y pruebas unitarias: Se realiza el desarrollo y las pruebas.
SEGUNDO INCREMENTO
• Definición de los requisitos: Se desarrollan los requerimientos relacionados con el
reconocimiento del rostro de una persona.
• Diseño de software: Se diseñan los casos de uso. Se diseña la arquitectura del
sistema.
• Implementación y pruebas unitarias: Se realiza el desarrollo y las pruebas.
• Integración y pruebas del sistema: Se realizan las pruebas de integración del
sistema, realizando pruebas de detección y reconocimiento de un rostro
TERCER INCREMENTO
• Integración y pruebas del sistema: Se realizan casos de prueba para el sistema. Estos
casos de prueba estarán relacionados con el entrenamiento y el reconocimiento de
un rostro.
• Operación y mantenimiento: Se realiza la operación de la aplicación en un ambiente
controlado.
36
El resultado final será la aplicación funcionando, los casos de uso, los diagramas de
arquitectura del sistema y la aplicación desarrollada con el lenguaje C#.
4.3.1. ALCANCE
Desarrollar un sistema de visión artificial, utilizando la librería de Visión Artificial
OpenCV, que pueda ser entrenado para reconocer el rostro de una persona en una imagen
de video. El entrenamiento se realizará utilizando fotografías del rostro de la persona
tomadas de forma frontal.
4.3.2. LIMITACIONES
• El sistema solo reconocerá una persona dentro de la imagen
• Para el entrenamiento y reconocimiento del rostro de la persona, esta no debe llevar
accesorios como lentes, sombreros u otro tipo de elementos que interfieran en el
reconocimiento.
• El clasificador para el reconocimiento de la persona, requiere de fotografías con
ciertos parámetros de iluminación y fondo.
• El sistema solo mostrara en pantalla el nombre de la persona cuando la reconozca
dentro de la imagen.
37
El sistema reconocerá el rostro de una persona en particular, para lo cual se debe realizar
con anterioridad el entrenamiento utilizando imágenes del rostro de la persona tomadas de
forma frontal. Cuando el sistema reconozca la persona dentro de la imagen, se indicara en
pantalla encerrando el rostro de la persona en un rectángulo e imprimiendo su nombre.
4.4.1. REQUERIMIENTOS
Requerimientos funcionales:
Numero Tipo Descripción
RF1 Funcional El sistema debe poder reconocer un objetivo dentro de su
campo visual, para ello debe estar analizando continuamente
el flujo de video recibido por una cámara.
RF2 Funcional El objetivo que deberá reconocer el sistema será único, el
sistema no reconocerá varios objetos de diferentes tipos, para
este trabajo se decidió que el objetivo sería una persona que
esté dentro del campo de visión del sistema.
RF3 Funcional El sistema debe ser capaz de detectar un rostro cuando este
dentro de su campo de visión.
RF4 Funcional Cuando el sistema detecte un rostro este debe indicarlo en
pantalla dibujando una señal que indique que se reconoció el
objetivo.
RF5 Funcional Cuando el sistema haya reconocido el objetivo debe indicar el
nombre de la persona que concuerda con el rostro detectado.
38
Requerimientos no funcionales:
Numero Tipo Descripción
RNF1 No funcional Se necesita un sistema de entrenamiento para definir el
objeto a buscar.
RNF2 No funcional Se necesita un sistema portable con la capacidad de
capturar video y enviar la información al PC para su
procesamiento.
RNF3 No funcional El sistema debe desarrollarse con software libre
El sistema debe poder reconocer un objetivo dentro de su campo visual, para ello debe estar
analizando continuamente el flujo de video recibido por una cámara.
39
Requerimiento funcional 2: El objetivo que deberá reconocer el sistema será único, el
sistema no reconocerá varios objetos de diferentes tipos, para este trabajo se decidió que el
objetivo sería una persona que esté dentro del campo de visión del sistema.
Requerimiento funcional 4: El sistema debe ser capaz de detectar un rostro cuando este
dentro de su campo de visión.
40
4.4.3. ARQUITECTURA
Para la diseñar los modelos de la arquitectura de la aplicación, se utilizó la especificación
Archimate 2.0 y Architecture Development Method (AMD) (Group, 2012), con la cual se
generaron las tres capas de la Arquitectura: Negocio, Aplicación e Infraestructura. Para la
elaboración de los diagramas de utilizó el software ArchiTools.
41
En la aplicación interactúan, el sistema y la persona que se desea identificar. A
continuación, se muestra el diagrama de negocio para la aplicación.
42
Como objeto de datos, se encuentran las imágenes del entrenamiento, las cuales se
encuentran alojadas en un directorio y su metadato está en un XML.
Para la aplicación de detección de rostros, se requiere un computador con una cámara web,
la librería OpenCV y el Frame Work de .Net. Los dos últimos componentes deben estar en
la misma máquina, ya que se requieren para la ejecución de la aplicación, pero la cámara
web puede ser un periférico conectado por USB o puede ser una cámara IP.
43
4.4.3.4. Vista de Capas
El principio estructural detrás de esta vista, es que cada capa expone servicios, que son
utilizados por la capa superior o capas adyacentes (Group, 2012).
El objetivo principal del punto de vista de Capas es proporcionar una visión general de la
arquitectura en un mismo diagrama. Además, este punto de vista puede ser utilizado como
soporte para el impacto del análisis de cambios y análisis de desempeño o para el portafolio
de servicios.
44
C# es un lenguaje orientado a objetos, basado en C++, por lo cual resulta muy fácil de
aprender. Este lenguaje permite la conexión con OpenCV, y con bases de datos no
relacionales.
45
4.6. INTEGRACIÓN Y PRUEBAS DEL SISTEMA
Para realizar las pruebas de integración del sistema, se crearon escenarios de prueba, con
diferentes flujos y resultados esperados.
46
se enmarca en un rectángulo rojo, tal como puede apreciarse en la siguiente imagen. Si no
se ha realizado entrenamiento la aplicación marca el rostro de la persona como
desconocido.
Imagen 16. Imagen con un rostro detectado por la aplicación. Aplicación de Reconocimiento de Rostros.
Realización Propia.
Para realizar el entrenamiento, se debe dar clic en el botón con el texto “Entrenar Sistema
de Reconocimiento”, el cual abre una nueva ventana con el formulario para registrar las
fotografías de la persona que se desea identificar.
47
Las imágenes se guardan en un directorio local, la aplicación guarda cada imagen con el
nombre de la persona a la cual pertenece, de esta forma cuando se realiza el proceso de
reconocimiento se toma el nombre de la fotografía y se imprime en pantalla.
Cuando el rostro detectado, coincide con el de una de las personas que se han registrado en
la aplicación, el sistema muestra el nombre de la persona en la parte superior del recuadro
rojo. En la siguiente imagen puede observarse que la aplicación logro reconocer el rostro
correspondiente a las imágenes de prueba.
48
En la parte derecha del formulario se muestran las imágenes con las cuales se está
realizando la comparación. Estas son las imágenes que se guardaron durante el
entrenamiento. Con mayor cantidad de imágenes, es mejor el resultado del reconocimiento.
Imagen 20. Imagen donde se indica el nombre dos personas diferentes. Realización Propia.
La aplicación puede reconocer varias personas en la imagen, para ello solo es necesario
realizar el entrenamiento, de las personas que se desean reconocer.
49
PARTE 3. CIERRE DE LA INVESTIGACIÓN
Aunque existen aún varias complicaciones con estas técnicas ya que son susceptibles a la
luz y a factores como los accesorios que lleve la persona, vemos que, dentro de condiciones
controladas, su desempeño es muy alto y no requieren de computadores con gran capacidad
de procesamiento.
50
También harán parte de nuestros hogares, ya que esta tecnología se combina actualmente
con el Internet de las Cosas.
CAPÍTULO 6. CONCLUSIONES
OpenCv nos provee grandes herramientas para aquellos que quieren iniciar se en el estudio
de la visión artificial y del reconocimiento de objetos en imágenes y video. Los sistemas de
cómputo actuales, los precios de los procesadores y discos duros, hacen ahora que sea
posible tener estos sistemas de visión artificial en equipos de cómputo de bajo costo o
incluso en celulares.
Como trabajos futuros se puede integrar con una base de datos no relacional distribuida,
con el fin de poder tener varios nodos de consulta, que puedan ser utilizados por diferentes
cámaras, y un nodo de registro, el cual permitirá autorizar una persona, que luego se
replicara a todos los nodos de lectura. Esto con el fin de poder ganar velocidad y
desempeño al momento del reconocimiento.
51
PARTE 4. BIBLIOGRAFIA
Angulo Usategui, J. (1986). Visión Artificial por Computador. Madrid: Thomson Paraninfo S.A.
Association Federation of International. (2006). Robots in Education, Entertainment and Service.
FIRA RoboWorld Congress 2006.
Basili, V., DeMarco, T., & Mili, A. (1999). Science and engineering for software development: a
recognition of Harlan D. Mills' legacy. In Proceedings of the 21st international conference
on Software engineering, 710-711.
BATCHEN, G. (2004). Arder en deseos.: La concepción de la fotografía. Barcelona: Editorial
Gustavo Gili, S.L.
Bidgoli, H. (2004). The Internet Encyclopedia, Volume 2. Bakersfield, California: John Wiley and
Sons.
Branch, J., & Olague, G. (2001). La visión por computador: Una aproximación al estado del arte.
Revista Dyna, 133.
Bristol Robotics Laboratory, T. P. (2010). staffwww.dcs.shef.ac.uk. Recuperado el 2013, de
http://staffwww.dcs.shef.ac.uk/people/C.Fox/Prescott_et_al_RISE2010r.pdf
Cáceres, T. J. (2002). La visión artificial y las operaciones morfológicas en imágenes binarias.
Alcalá, España.
Calle, A. S. (2005). Aplicaciones de la vision artificial y la biometria informatica. Madrid: Dykinson.
Cambridge, A. L. (1994). The Database of Faces. Obtenido de AT&T Laboratories Cambridge:
http://face-rec.org/databases/
Cubas, G., & Consuegra, P. (2001). Dispositivos autómatas para navegación, detección
Recoleccion de pelotas de tenis en ambientes conocidos. Revista Científica Ingeniería y
Desarrollo, http://rcientificas.uninorte.edu.co/index.php/ingenieria/article/view/2281/1490.
EmguCV, L. (02 de 2017). Emgu CV Docs. Obtenido de Emgu CV:
http://www.emgu.com/wiki/index.php/Main_Page
Feigenbaum, E. A. (1984). The fifth generation : artificial intelligence and Japan's computer
challenge to the world. New York: New American Library.
Freund, Y., & Schapire, R. E. (1997). A decision-theoretic generalization of on-line learning. Journal
of Computer and System Sciences, 119–139.
Geeky, T. (01 de 01 de 2011). Opencv. Recuperado el 19 de 08 de 2013, de OpenCV: opencv.org
Gómez-Verdejo, V., Ortega-Moral, M., Arenas-García, J., & Figueiras-Vidal, A. R. (2006). Boosting
by weighting critical and erroneous samples. Neurocomputing, 679-685.
Group, T. (2012). Archimate 2.0 Specification. Obtenido de http://pubs.opengroup.org:
http://pubs.opengroup.org/architecture/archimate2-doc/
HERNANDEZ, E., CABRERA SARMIENTO, A., & SANCHEZ SOLANO, S. (2012). Implementación
híbrida hardware software del algoritmo de detección de rostros de Viola-Jones sobre
FPGA. Recuperado el 10 de 2016, de
52
http://www.scielo.org.ve/scielo.php?script=sci_arttext&pid=S1316-
48212012000200005&lng=es&nrm=iso
Heseltine, T., Pears, N., & Austin, J. (2002). Evaluation of image preprocessing techniques for
eigenface-based face recognition. In Second International Conference on Image and
Graphics, 677-685.
Hurtado, J., & Granados, A. (2007). Detección de flujo vehicular basado en visión artificial. Scientia
Et Technica.
Jain, A., Bolle, R., & Pankanti, S. (2006). Biometrics: personal identification in networked society.
New York: Springer Science & Business Media.
Jain, A., Flynn, P., & Ross, A. A. (2007). Handbook of biometric. New York: Springer Science &
Business Media.
Kearns, M., & Valiant, L. (1994). Cryptographic limitations on learning Boolean formulae and finite
automata. Journal of the ACM (JACM), 67-95.
Kearns, M., & Valiant, L. G. (1994). Learning Boolean formulae or finite automata is as hard as
factoring. Technical Report TR-14-88, Harvard University Aiken Computation Laboratory,
Technical Report TR-14-88.
Ken-ichi, M., Masatsugu, K., & Hidenori, S. (1978). Design of local parallel pattern processor for
image processing. Proceedings of the National Computer Conference, (págs. 1025, 1978).
ANAHEIM.
KIRBY, M., & SIROVICH, L. (1990). Application of the Karhunen-Loeve procedure for the
characterization of human faces. IEEE Transactions on Pattern analysis and Machine
intelligence, 103-108.
Kyoung-sig, R., Young, S., & Joo-young, K. (2005). Estados Unidos Patente nº 7151853.
Lankhorst, M. M., Proper, H. A., & Jonkers, H. (2009). The architecture of the archimate language.
Enterprise, Business-Process and Information Systems Modeling, 367-380.
López Beltrán, R., & Paternina Arboleda, C. D. (2001). Análisis cinemático de un robot autónomo
con ruedas. Revista Científica Ingeniería y Desarrollo.
López Beltrán, R., Sotter Solano, E., & Zurek Varela, E. (2001). Aplicación del sistema Robot Vision
PRO para operaciones automáticas de control de calidad. Revista Científica Ingeniería y
Desarrollo.
Marr, D. (1982). Vision - A computational investigation into the human representation and
processing of visual information. San Francisco: W. H. Freeman.
Marr, D. (1982). Vision: A Computational Investigation into the Human Representation and
Processing of Visual Information. San Francisco: W. H. Freeman.
Mayhua-Lopez, E., Gómez-Verdejo, V., & Figueiras-Vidal, A. R. (2012). Real Adaboost with gate
controlled fusion. IEEE transactions on neural networks and learning systems, 2003-2009.
Mery, D. (2004). Apuntes de Visión por computador. Obtenido de Visión por computador:
http://dmery.sitios.ing.uc.cl/Prints/Books/2004-ApuntesVision.pdf
53
Michalski, R. S., Carbonell, J. G., & Mitchell, T. (2013). Machine learning: An artificial intelligence
approach. Springer Science & Business Media.
Microsoft. (02 de 2017). Introduction to the C# Language and the .NET Framework. Obtenido de
Visual Studio 2015 - Getting Started with C#: https://msdn.microsoft.com/en-
us/library/z1zx9t92.aspx
Ministerio de Educación Nacional. (15 de 05 de 2013). MEN. Recuperado el 03 de 07 de 2013, de
Robot colombiano en la NASA: http://www.mineducacion.gov.co/cvn/1665/w3-article-
322402.html
Múnera Salazar, L. E., & Manzano Herrera, D. A. (2012). Sistema de visión artificial para conteo de
objetos en movimiento. El Hombre y la Máquina - Facultad de Ingeniería, Universidad
Autónoma de Occidente, 87-101.
Muñoz-Romero, S., Arenas-García, J., & Gómez-Verdejo, V. (2009). Real Adaboost ensembles
with emphasized subsampling. Bio-Inspired Systems: Computational and Ambient
Intelligence, 440-447.
Nakano, & Yasuaki. (1988). Optical character reader. Tokio: Hitachi Ltda.
Navas, E. (2013). OpenCV. Obtenido de Clasificador Haar: opencv.org
Nishino, H. (1978). PIPS (Pattern Information Processing System). Proc. 4th Int. Joint Conf. Pattern
Recognition, 1152–1161.
OpenCv. (03 de 2017). Face Recognition with OpenCV. Obtenido de Open Source Computer
Vision: http://docs.opencv.org/3.2.0/da/d60/tutorial_face_main.html
OpenCv, O. (Enero de 2017). Face Detection using Haar Cascades. Obtenido de OpenCV Docs:
http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html
Pajares Martinsanz, G., & Santos Peñas, M. (2006). Inteligencia artificial e ingeniería del
conocimiento. México: Alfaomega Grupo Editor.
Pajares, G., & De La Cruz, J. M. (2004). A wavelet-based image fusion tutorial. Pattern recognition,
1855-1872.
Pankanti, S., Bolle, R. M., & Jain, A. (2002). Biometrics: The future of identification . Computer, 46-
49.
Papageorgiou, C. P., Oren, M., & Poggio, T. (1998). A general framework for object detection. .
Sixth international conference In Computer vision. IEEE., 555-562.
Peason, K. (1901). On lines and planes of closest fit to systems of point in space. Philosophical
Magazine, 559-572.
Pedregosa, F., Varoquaux, G., & Gramfort, A. (2011). Scikit-learn: Machine learning in Python.
Journal of Machine Learning Research, 2825-2830.
PHILLIPS, P. J., & et al. (25 de Julio de 2005). Overview of the face recognition grand challenge.
Obtenido de IEEE Computer Society Conference on Computer Vision and Pattern
Recognition:
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1467368&isnumber=31472
54
Pressman, R. S. (2005). Software engineering: a practitioner's approach. Palgrave Macmillan.
Roberts, L. G. (1963). Machine Perception of Three-Dimensional Solids. InOptical and
Electrooptical Information Processing. 159-197.
Rocha, C. A., & Escorcia, J. R. (2010). Sistema de Visión Artificial para la Detección y el
Reconocimiento de Señales de Tráfico basado en Redes Neuronales. Obtenido de Eighth
LACCEI Latin American and Caribbean Conference for Engineering and Technology:
http://www.laccei.org/
Rodríguez Salavarría, J. P. (Octubre de 2009). Sistema de control de acceso basado en el perfil
lateral de una persona utilizando visión artificial. Obtenido de Escuela Politécnica Nacional:
http://bibdigital.epn.edu.ec/handle/15000/1906
Sánchez, J. S. (2002). Avances en robótica y visión por computador. Castilla: Univ de Castilla La
Mancha.
Schraft, R. D., Schaeffer, C., & May, T. (1998). Care-O-botTM: the concept of a system for assisting
elderly or disabled persons in home environments. Recuperado el 2013, de Industrial
Electronics Society:
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=724115&isnumber=15649
Sebastiani, F. (2002). Machine learning in automated text categorization. ACM computing surveys
(CSUR), 1-47.
Sirovich, L., & Kirby, M. (1987). Low-dimensional procedure for the characterization of human
faces. 519-524.
Sommerville, I. (1996). Software process models. Acm Computing Surveys (Csur).
Sommerville, I. (2006). Ingenieria del Software. Madrid: Pearson.
Stephen Gould, J. A. (2007). http://www.aaai.org. Recuperado el 2013, de
http://www.aaai.org/Papers/IJCAI/2007/IJCAI07-341.pdf
Sucar, L. E. (2002). Procesamiento de Imagenes y Vision Computacional.
Turk, M. (1997). Eigenfaces vs. Fisherfaces: Recognition using class specific linear projection. IEEE
Transactions on Pattern Analysis and Machine Intelligence.
Turk, M., & Pentland, A. (1991). Eigenfaces for recognition. Journal of cognitive neuroscience, 71-
86.
Valiant, L. G. (1984). A theory of the learnable. Communications of the ACM, 1134-1142.
Viola, P., & Jones, M. (2001). Rapid object detection using a boosted cascade of simple features.
Obtenido de Proceedings of the 2001 IEEE Computer Society Conference on Computer
Vision and Pattern Recognition:
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=990517&isnumber=21353
Viola, P., & Jones, M. J. (2004). Robust real-time face detection. International Journal of Computer
Vision., 57, 137-154.
Woodward Jr, J. D., Horn, C., Gatune, J., & Thomas, A. (2003). Biometrics: A look at facial
recognition. SANTA MONICA CA: RAND CORP.
55
Xiao, Q. (2007). Technology review-biometrics-technology, application, challenge, and
computational intelligence solutions. IEEE Computational Intelligence Magazine, 5-25.
Zafeiriou, S. (2013). Face Recognition and Verification Using Photometric Stereo: The Photoface
Database and a Comprehensive Evaluation. Information Forensics and Security, IEEE
Transactions, 121 - 135.
56
PARTE 5. ANEXOS
//Detector de rostros
Rectangle[] facesDetected = Face.DetectMultiScale(gray_frame, 1.2, 10, new Size(50, 50),
Size.Empty);
La aplicción realiza un analisis constant del flujo de video, para ello se utiliza un ciclo for
que recorre los rostros detectados y los compara con las imágenes de muestra utilizando
EigenFaces.
//Rostros detectados
for (int i = 0; i < facesDetected.Length; i++)
{
//Se calculan los puntos para el rectangulo
facesDetected[i].X += (int)(facesDetected[i].Height * 0.15);
facesDetected[i].Y += (int)(facesDetected[i].Width * 0.22);
facesDetected[i].Height -= (int)(facesDetected[i].Height * 0.3);
facesDetected[i].Width -= (int)(facesDetected[i].Width * 0.35);
result = currentFrame.Copy(facesDetected[i]).Convert<Gray, byte>().Resize(100,
100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
result._EqualizeHist();
currentFrame.Draw(facesDetected[i], new Bgr(Color.Red), 2);
if (Eigen_Recog.IsTrained)
{
string name = Eigen_Recog.Recognise(result);
int match_value = (int)Eigen_Recog.Get_Eigen_Distance;
//Se dibuja el recuadro encerrando el rostro detectado
currentFrame.Draw(name + " ", ref font, new Point(facesDetected[i].X - 2,
facesDetected[i].Y - 2), new Bgr(Color.LightGreen));
ADD_Face_Found(result, name, match_value);
}
}
57
5.2. CLASE PRINCIPAL DE LA APLICACIÓN
58
grabber = new Capture();
grabber.QueryFrame();
//Initialize the FrameGraber event
Application.Idle += new EventHandler(FrameGrabber_Standard);
}
catch(Exception ex)
{
MessageBox.Show("Error", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void stop_capture()
{
Application.Idle -= new EventHandler(FrameGrabber_Standard);
if (grabber != null)
{
grabber.Dispose();
}
}
void FrameGrabber_Standard(object sender, EventArgs e)
{
//Se toma la imagen actual que esta recibiendo la camara web
currentFrame = grabber.QueryFrame().Resize(320, 240,
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
//Se convierte a grises
if (currentFrame != null)
{
gray_frame = currentFrame.Convert<Gray, Byte>();
//Detector de rostros
Rectangle[] facesDetected = Face.DetectMultiScale(gray_frame, 1.2, 10, new Size(50,
50), Size.Empty);
//Rostros detectados
for (int i = 0; i < facesDetected.Length; i++)
{
//Se calculan los puntos para el rectangulo
facesDetected[i].X += (int)(facesDetected[i].Height * 0.15);
facesDetected[i].Y += (int)(facesDetected[i].Width * 0.22);
facesDetected[i].Height -= (int)(facesDetected[i].Height * 0.3);
facesDetected[i].Width -= (int)(facesDetected[i].Width * 0.35);
result = currentFrame.Copy(facesDetected[i]).Convert<Gray, byte>().Resize(100,
100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
result._EqualizeHist();
currentFrame.Draw(facesDetected[i], new Bgr(Color.Red), 2);
if (Eigen_Recog.IsTrained)
{
string name = Eigen_Recog.Recognise(result);
int match_value = (int)Eigen_Recog.Get_Eigen_Distance;
//Se dibuja el recuadro encerrando el rostro detectado
currentFrame.Draw(name + " ", ref font, new Point(facesDetected[i].X - 2,
facesDetected[i].Y - 2), new Bgr(Color.LightGreen));
ADD_Face_Found(result, name, match_value);
}
}
//Se muestra el rectangulo en pantalla
image_PICBX.Image = currentFrame.ToBitmap();
}
}
59
5.1. METODO DE EIGENFACES
El reconocimiento del rostro se realiza mediante Eigenfaces, el siguiente método que
implementa OpenCV, permite realizar la comparación con Eigenfaces, el cual retorna un
valor de distancia calculada entre las imagenes de entrenamiento y la imagen actual.
/// <summary>
/// Recognise a Grayscale Image using the trained Eigen Recogniser
/// </summary>
/// <param name="Input_image"></param>
/// <returns></returns>
public string Recognise(Image<Gray, byte> Input_image, int Eigen_Thresh = -1)
{
if (_IsTrained)
{
FaceRecognizer.PredictionResult ER = recognizer.Predict(Input_image);
if (ER.Label == -1)
{
Eigen_label = "Desconocido";
Eigen_Distance = 0;
return Eigen_label;
}
else
{
Eigen_label = Names_List[ER.Label];
Eigen_Distance = (float)ER.Distance;
if (Eigen_Thresh > -1) Eigen_threshold = Eigen_Thresh;
//Only use the post threshold rule if we are using an Eigen Recognizer
//since Fisher and LBHP threshold set during the constructor will work correctly
if (Eigen_Distance > Eigen_threshold) return Eigen_label;
else return "Desconocido";
}
}
else return "";
}
60