aplicaciÓn prÁctica de la visiÓn artificial para el reconocimiento de...

60
APLICACIÓN PRÁCTICA DE LA VISIÓN ARTIFICIAL PARA EL RECONOCIMIENTO DE ROSTROS EN UNA IMAGEN, UTILIZANDO REDES NEURONALES Y ALGORITMOS DE RECONOCIMIENTO DE OBJETOS DE LA BIBLIOTECA OPENCV EDISON RENE CABALLERO BARRIGA COD: 20162099033 GRUPO 2 GRUPO SEMINARIO: 24 UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERIA ESPECIALIZACIÓN EN INGENIERÍA DE SOFTWARE BOGOTA D.C. 2017

Upload: buixuyen

Post on 20-Sep-2018

230 views

Category:

Documents


0 download

TRANSCRIPT

APLICACIÓN PRÁCTICA DE LA VISIÓN ARTIFICIAL PARA EL

RECONOCIMIENTO DE ROSTROS EN UNA IMAGEN, UTILIZANDO REDES

NEURONALES Y ALGORITMOS DE RECONOCIMIENTO DE OBJETOS DE LA

BIBLIOTECA OPENCV

EDISON RENE CABALLERO BARRIGA

COD: 20162099033

GRUPO 2

GRUPO SEMINARIO: 24

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

FACULTAD DE INGENIERIA

ESPECIALIZACIÓN EN INGENIERÍA DE SOFTWARE

BOGOTA D.C.

2017

APLICACIÓN PRÁCTICA DE LA VISIÓN ARTIFICIAL PARA EL

RECONOCIMIENTO DE ROSTROS EN UNA IMAGEN, UTILIZANDO REDES

NEURONALES Y ALGORITMOS DE RECONOCIMIENTO DE OBJETOS DE LA

BIBLIOTECA OPENCV

EDISON RENE CABALLERO BARRIGA

COD: 20162099033

GRUPO 2

GRUPO SEMINARIO: 24

DIRECTOR

ALEJANDRO PAOLO DAZA

REVISOR

JORGE MARIO CALVO

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

FACULTAD DE INGENIERIA

ESPECIALIZACIÓN EN INGENIERÍA DE SOFTWARE

BOGOTA D.C.

2017

TABLA DE CONTENIDO

INTRODUCCIÓN .................................................................................................................. 7

PARTE 1. DESCRIPCIÓN DE LA INVESTIGACIÓN ........................................................ 8

CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN ...................................... 8

Objetivo general .................................................................................................................. 9

Objetivos específicos .......................................................................................................... 9

PARTE 2. DESARROLLO DE LA INVESTIGACIÓN ..................................................... 24

CAPÍTULO 2. RECONOCIMIENTO BIOMETRICO .............................................. 24

CAPÍTULO 3. DETECCIÓN Y RECONOCIMIENTO DE ROSTROS ................... 26

CAPÍTULO 4. DESARROLLO DE LA APLICACIÓN ........................................... 32

PARTE 3. CIERRE DE LA INVESTIGACIÓN .................................................................. 50

CAPÍTULO 5. RESULTADOS Y DISCUSIÓN ....................................................... 50

CAPÍTULO 6. CONCLUSIONES ............................................................................. 51

CAPÍTULO 7. PROSPECTIVA DEL TRABAJO DE GRADO ............................... 51

PARTE 4. BIBLIOGRAFIA ................................................................................................ 52

PARTE 5. ANEXOS ............................................................................................................ 57

IMAGENES

Imagen 1. Mapa de Conceptos para detección y Reconocimiento de Rostros en Imágenes.

Fuente: Realización Propia ................................................................................................... 13

Imagen 2. Características de Tipo Haar. (OpenCv O. , 2017) .............................................. 16

Imagen 3. Características de Tipo Haar aplicadas a la detección de un rostro. (OpenCv O. ,

2017) ..................................................................................................................................... 16

Imagen 8. Modelo de desarrollo iterativo-incremental. (Sommerville, Ingenieria del

Software, 2006) .................................................................................................................... 20

Imagen 9. Fases del desarrollo en cascada. (Pressman, 2005) ............................................. 21

Imagen 4. Etapas del método para detección de rostros de Viola-Jones. Fuente: Realización

propia. ................................................................................................................................... 27

Imagen 4. Calculo de la imagen integral de Viola-Jones. (OpenCv O. , 2017) ................... 28

Imagen 5. Filtros Haar rotados, trasladados y con cambios de escala. (OpenCv O. , 2017) 29

Imagen 6. Detección de rostros utilizando características Haar en cascada. (OpenCv O. ,

2017) ..................................................................................................................................... 29

Imagen 10. Vista del Negocio. Realización Propia. ............................................................. 42

Imagen 11. Vista de Aplicación. Realización Propia. .......................................................... 43

Imagen 12. Vista de Infraestructura. Realización Propia. .................................................... 43

Imagen 13. Vista de Capas. Realización Propia. .................................................................. 44

Imagen 14. Solución y proyecto Windows Forms en .Net. Realización Propia. .................. 45

Imagen 15. Formulario de la aplicación. Aplicación de Reconocimiento de Rostros.

Realización Propia. ............................................................................................................... 45

Imagen 16. Imagen con un rostro detectado por la aplicación. Aplicación de

Reconocimiento de Rostros. Realización Propia. ................................................................. 47

Imagen 17. Entrenamiento de la aplicación. Aplicación de Reconocimiento de Rostros.

Realización Propia. ............................................................................................................... 47

Imagen 18. Imágenes de entrenamiento. Aplicación de Reconocimiento de Rostros.

Realización Propia. ............................................................................................................... 48

Imagen 19. Imagen donde se indica el nombre de la persona. Realización Propia. ............. 48

Imagen 20. Imagen donde se indica el nombre dos personas diferentes. Realización Propia.

.............................................................................................................................................. 49

7

INTRODUCCIÓN

El estudio de los mecanismos de la visión humana es el objetivo de la Visión Artificial o

también llamada Visión por Computador. La visión computacional busca crear sistemas

que sean capaces de reconocer un objeto determinado en una imagen. Para los humanos

esta tarea es natural y es realizada constantemente sin preocuparse por el cómo; pero

cuando trasladamos esta tarea a una máquina, nos encontramos con varias dificultades que

resolver.

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.

La principal dificultad en el proceso de reconocimiento de rostros, radica en las enormes

variaciones que existen entre las distintas imágenes del rostro de un mismo individuo. Estas

diferencias son dadas por los gestos, la intensidad o ausencia de luz, diferentes peinados,

maquillaje y accesorios, por los cuales una misma persona puede parecer diferente en dos

imágenes.

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.

8

PARTE 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

1.1. PLANTEAMIENTO/IDENTIFICACIÓN DEL PROBLEMA

La visión artificial por computadora es una disciplina de gran crecimiento en los últimos

años, su futuro más prometedor se encuentra en la creación de máquinas autónomas

capaces de interactuar de forma inteligente con el entorno. Para lograr la interacción de las

maquinas con su entorno, es necesario desarrollar un sistema que tenga la capacidad de

percibirlo e interpretarlo (Branch & Olague, 2001).

El término Visión Artificial dentro del campo de la Inteligencia Artificial puede

considerarse como el conjunto de todas aquellas técnicas y modelos que nos permiten el

procesamiento, análisis y explicación de cualquier tipo de información espacial obtenida a

través de imágenes digitales (Pajares Martinsanz & Santos Peñas, 2006).

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.

Dentro de la visión por computadora, la detección de objetos es el tópico donde se puede

encontrar mayores aplicaciones en la industria, la medicina, y la seguridad. La industria

automotriz es quizás aquella en la que se han realizado mayores aplicaciones en los últimos

años, utilizando la visión artificial para la creación de vehículos de conducción autónoma.

En la industria de dispositivos para la seguridad, la identificación biométrica y la identidad

digital se han convertido en uno de las técnicas más utilizadas en la autenticación de

identidad antifraudes y la seguridad en la protección de datos (Calle, 2005).

9

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.

1.3. JUSTIFICACIÓN DEL TRABAJO/INVESTIGACIÓN

En la actualidad los sistemas biométricos juegan un rol fundamental en los procesos de

reconocimiento de personas, enfocados a políticas de seguridad públicas y privadas. El

reconocimiento biométrico facial es muy utilizado en el control de acceso a edificios,

laboratorios y oficinas.

Los gobiernos también se apoyan en la biometría para identificar personas y reforzar la

seguridad en aeropuertos y ciudades, y así poder capturar personas sospechosas o con

10

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.

La biometría y en especial el reconocimiento facial ha recibido grandes aportes de parte de

la industria, en especial de la Industria Automotriz y los prototipos de vehículos

autónomos. Desde la informática y la ingeniería también se aborda el problema del

reconocimiento de un rostro en una imagen. Para lograr el reconocimiento se utilizan

técnicas de procesamiento de imágenes, visión por computador, reconocimiento de patrones

y redes neuronales.

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.

Teniendo en cuenta lo anterior, para abordar el reconocimiento facial es necesario

establecer ciertas restricciones contextuales y llevarlo a situaciones concretas donde se

tenga cierto control sobre los posibles factores de variación. De esta manera, resulta posible

obtener resultados satisfactorios en situaciones concretas y en entornos restringidos y muy

controlados.

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.

11

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.

1.5. MARCO REFERENCIAL

1.5.1. MARCO TEÓRICO

La visión artificial o visión por computador, pretende reproducir artificialmente el sentido

de la vista humana mediante el procesamiento e interpretación de imágenes captadas desde

diferentes dispositivos, como cámaras y utilizando computadores para su procesamiento.

El sistema de visión artificial requiere de dos elementos fundamentales, el primero es el

hardware encargado de la percepción de las imágenes y el segundo el software encargado

del procesamiento de la información (Pajares & De La Cruz, 2004).

12

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):

• Captura: Consiste en la captura de las imágenes por medio de un sensor.

• Análisis (Tratamiento digital): Mediante la aplicación de filtros se descartan partes

de la imagen y se enfoca en las partes con mayor probabilidad de coincidencia con

lo buscado.

• Segmentación: Consiste en aislar los elementos de la imagen que se desean analizar,

La segmentación permite comprender la imagen individualizando sus elementos.

• Reconocimiento (Clasificación): En ella se distinguen los objetos segmentados,

mediante al análisis de ciertas características, que se establecen previamente para

diferenciarlos.

Siguiendo estos procesos e implementándolos mediante algoritmos de procesamiento y

apoyándose en redes neuronales, es posible identificar el objeto buscado dentro de una

imagen.

1.5.2. MARCO CONCEPTUAL

El reconocimiento automático de rostro busca extraer los rasgos significativos de un rostro

presente en una imagen, ponerlos en una representación útil, realizar algún tipo de

clasificación en ellos y lograr, mediante algoritmos de detección y patrones, la ubicación de

un rostro en la imagen.

El reconocimiento facial basado en características fisiológicas y geométricas, es

probablemente el método más intuitivo y utilizado para el reconocimiento de un rostro. Uno

de los primeros sistemas automáticos de reconocimiento facial utilizó posición de los ojos,

oídos y nariz, para construir un vector de características (distancia entre los puntos, el

ángulo entre ellos) (PHILLIPS & et al., 2005).

13

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.

En la segunda etapa se realiza el reconocimiento del rostro de una persona, comparando el

rostro detectado en la imagen con una seria de imágenes guardadas llamadas imágenes de

muestra. Para este reconocimiento, se utiliza el algoritmo de Eigenfaces (Turk & Pentland,

Eigenfaces for recognition, 1991), el cual realiza la comparación de las imágenes de

muestra con la del rostro detectado, e indica si existe concordancia.

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

14

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.

El proceso de aprendizaje automático es similar al de la minería de datos. Ambos sistemas

buscan a través de datos para encontrar patrones. Sin embargo, en lugar de extraer datos

para la comprensión humana, como es el caso de las aplicaciones de minería de datos, el

aprendizaje automático utiliza esos datos para detectar patrones en los datos y ajustar las

acciones del programa en consecuencia (Pedregosa, Varoquaux, & Gramfort, 2011).

Los algoritmos de aprendizaje automático se clasifican a menudo como supervisados o no

supervisados. Los algoritmos supervisados pueden aplicar lo que se ha aprendido en el

pasado a los nuevos datos. El aprendizaje supervisado busca realizar predicciones a futuro

basándose en características y comportamientos que se han detectado y clasificado en datos

almacenados, datos históricos o conocimiento previo en el que nos podemos apoyar para

hacer predicciones o tomar decisiones (Sebastiani, 2002).

Los algoritmos no supervisados pueden extraer inferencias de conjuntos de datos. El

aprendizaje no supervisado a diferencia del supervisado, usa datos históricos que no estén

etiquetados ni clasificados, con el fin de explorarlos y encontrar una estructura para

relacionarlos y para organizarlos.

1.5.2.2. Algoritmo de Boosting

Boosting se refiere a un método general y probablemente el más eficaz para producir una

Regla de predicción muy precisa, por la combinación de reglas débiles y moderadamente

imprecisas (Kearns & Valiant, 1994). El Boosting consiste en tomar una serie de

clasificadores débiles y combinarlos para construir un clasificador fuerte con la precisión

deseada. La idea se basa en que varios clasificadores sencillos, cada uno con una precisión

15

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.

Kearns y Valiant fueron los primeros en plantear la cuestión de si un algoritmo de

aprendizaje "débil" puede ser "Impulsado", utilizando PAC, en un algoritmo más preciso

"fuerte" (Kearns & Valiant, 1994). Los primeros experimentos con estos primeros

Algoritmos de impulsos fueron llevados a cabo en una tarea OCR (Optical Character

Recognition).

Entre los diferentes algoritmos de impulso (Boosting), tres de los más importantes son:

• AdaBoost (Adaptive Boosting)

• Gradient Tree Boosting

• XGBoost

AdaBoost, como se mencionó anteriormente este es el algoritmo utilizado por Viola-Jones

para realizar el entrenamiento de los clasificadores en cascada que se utilizan en el

reconocimiento de rostros en imágenes (Viola & Jones, Rapid object detection using a

boosted cascade of simple features, 2001).

1.5.2.3. Características Haar

Las características Haar-Like, son las características utilizadas en la visión artificial para la

detección de objetos en imágenes digitales. Estas características son utilizadas por el

método de la Viola y Jones (Viola & Jones, Robust real-time face detection, 2004). Una

simple característica rectangular de tipo Haar puede definirse como la diferencia de la suma

de píxeles de las áreas dentro del rectángulo, que puede estar en cualquier posición y escala

dentro de la imagen original (Papageorgiou, Oren, & Poggio, 1998).

16

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.

Imagen 3. Características de Tipo Haar aplicadas a la detección de un rostro. (OpenCv O. , 2017)

La primera característica seleccionada se basa en la propiedad de que la región de los ojos

es a menudo más oscura que la región de la nariz y las mejillas. La segunda característica

seleccionada se basa en la propiedad de que los ojos son más oscuros que el puente de la

nariz.

1.5.2.4. Clasificador Débil

Viola y Jones utilizan un algoritmo que busca entre una gran cantidad y variedad de

características Haar de la imagen, un clasificador débil o sencillo se encarga de buscar en la

imagen características sencillas que correspondan con un posible rostro. Se llama débil

17

porque solo no puede clasificar la imagen, pero junto con otros clasificadores forma un

clasificador fuerte.

1.5.2.5. Clasificador Fuerte

Un clasificador fuerte, está formado por varios clasificadores débiles. Este clasificador

busca características de mayor complejidad en la imagen. El clasificador fuerte es una suma

ponderada de estos clasificadores débiles.

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.

1.5.2.7. Clasificador Haar en Cascada

El Clasificador Haar en cascada, es un método desarrollado por Viola-Jones (Viola &

Jones, Rapid object detection using a boosted cascade of simple features, 2001) y es una

versión del algoritmo Adaboost (Freund & Schapire, 1997). Es un clasificador basado en

árboles de decisión con entrenamiento supervisado. Estos clasificadores se utilizan para

realizar el reconocimiento de un rostro en una imagen, utilizando clasificadores débiles

para cada una de las características que se desea detectar.

18

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.

Para realizar el proceso mencionado anteriormente, Viola-Jones utiliza la Cascada de

Clasificadores. En lugar de aplicar todas las características, en una ventana, agrupa las

características en diferentes etapas de los clasificadores y aplica una por una.

(Normalmente las primeras etapas contendrán un número muy reducido de características a

usar). Si una ventana falla en la primera etapa se desecha y no se evalúan las características

restantes en la ventana. Si pasa, se aplica la segunda etapa de funciones y se continua el

proceso. La ventana que pasa por todas las etapas es una región donde se encuentra un

rostro.

1.5.2.8. Lenguaje C# de .Net

El lenguaje C#, (See Sharp), es un híbrido de C y C ++, es un lenguaje de programación de

Microsoft (Microsoft, 2017). C # es un lenguaje de programación orientado a objetos

utilizado con servicios Web basados en XML en la plataforma .NET y diseñado para

mejorar la productividad en el desarrollo de aplicaciones web.

C# cuenta con seguridad de tipos, la recolección de basura, declaraciones de tipo

simplificados, control de versiones y soporte escalabilidad, y otras características que hacen

que las soluciones de desarrollo más rápido y más fácil, especialmente para COM + y

servicios Web. Los críticos de Microsoft han señalado las similitudes entre C # y Java.

19

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).

1.5.3. MARCO HISTÓRICO

En el siglo XVI se desarrolla la teoría de la perspectiva, las Máquinas de Perspectiva

ayudan a los pintores a reproducir en una imagen, exactamente la perspectiva de un objeto

observado, sin tener que hacer cálculos matemáticos.

En el siglo XIX el químico francés Joseph Nicéphore Niépce, considerado el inventor de la

fotografía, logra fijar una imagen en una superficie fotosensible ubicada dentro de una

cámara obscura (BATCHEN, 2004). Posteriormente, en 1838 el químico francés Daguerre

hizo el primer proceso fotográfico práctico. Daguerre utilizó una placa fotográfica que era

revelada con vapor de mercurio y fijada con trisulfuro de sodio, este se emplea sobre todo

como fijador en la fotografía (Mery, 2004).

Un hito importante en el inicio de la formulación de un enfoque para la visión artificial, fue

acotado por Larry Roberts (Roberts, 1963), que trabajo ampliamente en los inicios del

internet desde el proyecto ARPA, el cual, en 1961 creo un software que podía ver una

estructura de bloques, analizar y crear una versión de la misma utilizando otra perspectiva.

Esto lo realizo con una cámara conectada a un computador (Bidgoli, 2004).

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.

20

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."

El modelo de desarrollo elegido para el presente trabajo es un modelo incremental, en este

modelo las actividades del proceso de desarrollo de software se llevan a cabo en secuencias

lineales, en forma escalonada a medida que avanza el calendario de actividades. Este

modelo es muy útil cuando los requerimientos iniciales del software están bien definidos,

pero se desea tener de forma temprana una versión con funcionalidad limitada del software

y aumentarla en incrementos posteriores (Pressman, 2005).

El primer incremento de este modelo de desarrollo, generalmente es el producto

fundamental, en el cual se abordan los requerimientos básicos, y se dejan para próximos

incrementos las características suplementarias. Este modelo fue propuesto por Harlan D.

Mills en 1980 (Basili, DeMarco, & Mili, 1999), y surge con la necesidad de poder probar el

software de forma temprana y poder tomar mejor experiencia en los requerimientos a

medida que se adquiría experiencia en el sistema.

Imagen 4. Modelo de desarrollo iterativo-incremental. (Sommerville, Ingenieria del Software, 2006)

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

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

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 el modelo en Cascada las actividades fundamentales, según define Pressman (Pressman,

2005), son:

• Definición de los requisitos: Los servicios, restricciones y objetivos son

establecidos con los usuarios del sistema. Se busca hacer esta definición en detalle.

• Diseño de software: Se divide el sistema en sistemas de software o hardware. Se

establece la arquitectura total del sistema. Se identifican y describen las

abstracciones y relaciones de los componentes del sistema.

• Implementación y pruebas unitarias: Construcción de los módulos y unidades de

software. Se realizan pruebas de cada unidad.

• Integración y pruebas del sistema: Se integran todas las unidades. Se prueban en

conjunto. Se entrega el conjunto probado al cliente.

• Operación y mantenimiento: Generalmente es la fase más larga. El sistema es

puesto en marcha y se realiza la corrección de errores descubiertos. Se realizan

mejoras de implementación. Se identifican nuevos requisitos.

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.

Imagen 5. Fases del desarrollo en cascada. (Pressman, 2005)

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.

22

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).

Los siguientes trabajos presenta aplicaciones de las técnicas de visión y reconocimiento

artificial, estos trabajos ya se están probando y utilizando en ambientes reales y los

mencionamos debido a su gran contribución en la visión artificial.

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

23

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.

1.8. ORGANIZACIÓN DEL TRABAJO DE GRADO

El presente documento se ha organizado en tres partes cada una a su vez, organizada en

capítulos.

• En la primera parte se realiza la descripción del problema de investigación y los

objetivos, que motivaron el desarrollo del proyecto.

• En la segunda parte se desarrollan los conceptos relacionados con la detección y el

reconocimiento de rostros en imágenes.

• En la tercera parte se presentan los resultados obtenidos del proyecto y los trabajos

futuros que se pueden desarrollar.

24

PARTE 2. DESARROLLO DE LA INVESTIGACIÓN

CAPÍTULO 2. RECONOCIMIENTO BIOMETRICO

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.

El objetivo de los sistemas biométricos es la identificación, entendida como el

reconocimiento de una persona; o la autenticación, verificación de un individuo en una base

de datos de características. En los sistemas biométricos es muy importante definir su

objetivo, ya que algunas características son mejores para aplicaciones donde se busque

identificar y otras características funcionan mejor si el objetivo es autenticar (Pankanti,

Bolle, & Jain, 2002).

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):

• Universalidad: Que cualquier persona del mundo posea esta característica.

• Unicidad: Que la probabilidad que dos personas tengan esta característica idéntica

sea muy pequeña.

• Permanencia: Que la característica perdure en el tiempo.

25

• 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.

2.2. BIOMETRÍA POR RASGOS FACIALES

La biometría busca desarrollar sistemas de seguridad y de autenticación confiables y

rápidos, basados en la identificación de las características propias de la persona, con lo cual

se logra que la suplantación sea prácticamente imposible (Woodward Jr, Horn, Gatune, &

Thomas, 2003). La técnica de reconocimiento basadas en los rasgos del rostro es conocida

como biometría facial, y se basa en las diferencias que existen entre el rostro de una

persona, con respecto a las demás.

El reconocimiento facial se utiliza principalmente para el control y seguridad, en este

campo se cuenta con dos categorías (Xiao, 2007):

• Verificación biométrica: consiste en usar una determinada tecnología para asegurar

que el individuo que debemos reconocer es quien dice ser.

• Identificación biométrica: en este caso no queremos confirmar que un usuario es

quien asegura ser, sino que tratamos de aplicar la tecnología para conocer la

identidad de un individuo.

Un sistema de biometría facial consta de tres componentes fundamentales:

• Cámara: Se encarga de registrar la imagen

26

• 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.

El reconocimiento facial tiene su principal complicación relacionada con la luz, ya que

dependiendo de la iluminación puede cambiar el color del rostro y generar sombras que

pueden afectar la detección y el reconocimiento. Otro factor es el envejecimiento, ya que

con el paso del tiempo las facciones del rostro cambian, y el contorno de los ojos cambia

debido a las arrugas.

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.

CAPÍTULO 3. DETECCIÓN Y RECONOCIMIENTO DE ROSTROS

3.1. ALGORITMO DE VIOLA-JONES

El método de reconocimiento de objetos en imágenes digitales conocido como Viola-Jones,

fue propuesto por los investigadores Paul Viola y Michael Jones en el año 2001 (Viola &

Jones, Rapid object detection using a boosted cascade of simple features, 2001). Es uno de

los primeros métodos que logra detectar eficazmente objetos en tiempo real en una imagen.

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.

Viola-Jones utiliza clasificadores de características para lograr el reconocimiento de los

objetos. Basándose en estas características Haar (Papageorgiou, Oren, & Poggio, 1998), se

logra obtener un detector de objetos robusto (Viola & Jones, Rapid object detection using a

27

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.

El método de Viola-Jones, se divide en tres etapas. En la primera se realiza una

transformación de la imagen generando una nueva llamada imagen integral, en la segunda

etapa se realiza la extracción de características usando filtros con base Haar (Viola & Jones,

Robust real-time face detection, 2004), y por último se usa Boosting (Mayhua-Lopez,

Gómez-Verdejo, & Figueiras-Vidal, 2012) para la construcción de clasificadores en

cascada.

Etapas de procesamiento de Viola-Jones

Este algoritmo realiza tres etapas para realizar la detección de un rostro, cada una de las

etapas se describe a continuación:

Imagen 6. Etapas del método para detección de rostros de Viola-Jones. Fuente: Realización propia.

28

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.

Imagen 7. Calculo de la imagen integral de Viola-Jones. (OpenCv O. , 2017)

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).

29

Imagen 8. Filtros Haar rotados, trasladados y con cambios de escala. (OpenCv O. , 2017)

La extracción de características es un paso en el reconocimiento de patrones en el cuál las

medidas u observaciones son procesadas para encontrar a tributos que puedan ser usados

para asignar los objetos a determinada clase. En la metodología de Viola-Jones, la

extracción de características es realizada aplicando a la imagen filtros con bases Haar

(Viola & Jones, Rapid object detection using a boosted cascade of simple features, 2001).

Imagen 9. Detección de rostros utilizando características Haar en cascada. (OpenCv O. , 2017)

30

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.

La utilización de un clasificador en cascada y la introducción del algoritmo de aprendizaje

AdaBoots, además del gran aporte conceptual, son los motivos principales para que el

método de Viola-Jones sea considerado como uno de los métodos más importantes

desarrollados en este campo. La idea de Paul Viola y Michael Jones de utilizar

clasificadores débiles para formar clasificadores fuertes, denominados clasificadores en

cascada, ha sido utilizado por otros investigadores para el reconocimiento de objetos en

visión por computador.

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.

31

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:

• Extraer la información facial pertinente, que puede o no estar directamente

relacionada con la intuición humana de rasgos faciales como los ojos, la nariz y los

labios. Una manera de hacerlo es capturar la variación estadística entre las imágenes

de un mismo rostro.

• Representar imágenes de rostros eficientemente. Para reducir el cómputo y la

complejidad del espacio, cada imagen de un rostro se puede representar usando un

pequeño número de parámetros.

Los Eigenfaces pueden ser considerados como un conjunto de características que

representan la variación global entre las imágenes de un rostro. Cada Eigenface representa

un rasgo característico de las imágenes faciales siguiendo un patrón obtenido del estudio de

muchos rostros.

El funcionamiento de este método es el siguiente:

• Por cada imagen del set de entrenamiento (imágenes de prueba) se concatenan sus

filas de pixeles, transformándola en un vector en el que cada valor se corresponde

con el valor del pixel correspondiente.

• Tras esto, se obtiene una matriz de vectores, siendo cada vector una imagen.

• A este vector se le aplica el método PCA (Principal Component Analysis) (Peason,

1901), para obtener los componentes principales y reducir la dimensionalidad.

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

32

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.

CAPÍTULO 4. DESARROLLO DE LA APLICACIÓN

En este capítulo se realizará la descripción de los componentes utilizados para el desarrollo

de la aplicación para el reconocimiento de rostros. Se describe como mediante una librería

de Visión Artificial como OpenCv y un lenguaje orientado a objetos como c#, es posible

realizar el desarrollo de la aplicación, logrando muy buenos resultados.

También se describe la metodología de desarrollo utilizada, y los diferentes artefactos

generados como parte del proceso de diseño y desarrollo.

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)

La librería OpenCV (Open Source Computer Vision) es biblioteca de visión artificial

iniciada por Intel en 1999 (OpenCv, 2017). Esta biblioteca multiplataforma se centra en el

procesamiento de imágenes en tiempo real e incluye implementaciones libres de patentes de

los últimos algoritmos de visión computarizada.

33

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).

OpenCv se encuentra actualmente en su versión 3.2.0, liberada el 23 de diciembre de 2016,

en esta versión se cuenta con la clase de FaceRecognizer para el reconocimiento facial, Los

algoritmos actualmente disponibles son:

• Eigenfaces

• Fisherfaces

• Local Binary Patterns Histograms

OpenCv nos permite detectar un rostro mediante el uso de clasificadores en cascada, y

realizar el reconocimiento de un rostro especifico utilizando Eigenfaces. Por lo anterior se

eligió esta librería para el desarrollo de la aplicación para el reconocimiento de una

persona, la cual es el producto final esperado del presente trabajo.

El módulo de reconocimiento de objetos de OpenCv nos provee las siguientes clases:

Clases

class cv::BaseCascadeClassifier

class cv::CascadeClassifier

Cascade classifier class for object detection.

struct cv::DetectionROI

struct for detection region of interest (ROI)

34

struct cv::HOGDescriptor

class cv::SimilarRects

Tabla 1. Lista de Clases del módulo de reconocimiento de objetos de OpenCv. (OpenCv O. , 2017)

Para el reconocimiento especifico de rostros OpenCv suministra las clases y métodos:

Clases

class cv::face::BasicFaceRecognizer

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)

Ptr< BasicFaceRecognizer > cv::face::createFisherFaceRecognizer (int

num_components=0, double threshold=DBL_MAX)

Ptr< LBPHFaceRecognizer > cv::face::createLBPHFaceRecognizer (int radius=1, int

neighbors=8, int grid_x=8, int grid_y=8,

double threshold=DBL_MAX)

35

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.

4.2. IMPLEMENTACIÓN DEL MODELO DE DESARROLLO

Para el desarrollo de la aplicación para el reconocimiento de rostros se eligió el modelo

Incremental. Esta elección se basó en el hecho de que los requerimientos de la aplicación

son los suficientemente estables, ya que estos fueron definidos con anticipación y formaron

parte del anteproyecto presentado como parte de la investigación, y de esta forma poder

realizar el desarrollo en iteraciones; al final de cada iteración se cuenta con una versión de

la aplicación que cuenta con funcionalidad lista para ser probada.

El modelo Incremental permite tener de forma temprana un prototipo de la aplicación, en la

cual se implemente la funcionalidad relacionada a la detección de rostros. Un segundo

incremento con la funcionalidad relacionada con el entrenamiento y el reconocimiento de

una persona. Un tercer incremento estará relacionado a la parte de usabilidad e interface de

usuario.

36

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.

37

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. DEFINICIÓN DE LOS REQUISITOS

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.

La aplicación realizará el proceso de reconocimiento facial, utilizando una cámara web

conectada al sistema. Cuando la persona, con la cual se realizó el entrenamiento, este

dentro del espacio capturado por la cámara, el sistema la reconocerá e indicará en la

pantalla la ubicación de la persona dentro de la imagen y el nombre de la persona.

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.

4.3.3. RESULTADOS ESPERADOS

El sistema de visión artificial desarrollado, será capaz de analizar un flujo de video que

recibe de una cámara web, y por medio de los algoritmos para reconocimiento de rostros,

proporcionados por la librería OpenCV, localiza el rostro en la imagen y lo resalta mediante

un rectángulo.

38

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. DISEÑO DE SOFTWARE

Los requerimientos para la aplicación de visión artificial están relacionados con la

interacción del usuario con el sistema y con los diferentes subsistemas que lo componen, ya

que este depende de la información de otros procesos automáticos que están en continua

ejecución.

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.

39

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

4.4.2. DISEÑO DE CASOS DE USO

Identificador caso de uso:

CU–01

Nombre:

Reconocimiento de objetivo

Propósito

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.

Identificador caso de uso:

CU–02

Nombre:

Reconocer objetivo en campo visual

Propósito

40

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.

IDENTIFICADOR CASO DE USO:

CU–04

NOMBRE:

Indicar en pantalla que se encontró el objetivo

PROPÓSITO

Cuando el sistema detecte un rostro este debe indicarlo en pantalla dibujando una señal que

indique que se reconoció el objetivo.

41

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.

4.4.3.1. Vista de Negocio

La Vista de arquitectura de negocio considera los aspectos funcionales del sistema, es decir,

lo que el nuevo sistema tiene la intención de hacer. Esto puede ser construido a partir de un

análisis del entorno existente y de los requisitos y limitaciones que afectan al nuevo sistema

(Blevins, Spencer, Tower, & Waskiewi, 2004).

La aplicación para detección de rostros, debe realizar el proceso de identificación de una

persona, la identificación busca responder la pregunta de: ¿quién es usted?, para ello se

debe comparar la imagen del rostro de la persona detectada en la imagen, con todos los

rostros de personas conocidas que tenga en su repositorio de datos para determinar su

identidad.

42

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.

Imagen 10. Vista del Negocio. Realización Propia.

4.4.3.2. Vista de aplicación

La vista de aplicación es útil para diseñar o comprender la estructura principal de

aplicaciones o componentes y los datos asociados. La capa de aplicación comprende

aplicaciones de software que apoyan los componentes del negocio (Group, 2012).

La capa de aplicación da soporte a la capa de negocio, en esta capa se manifiestan el

dominio de datos y los componentes de la aplicación (Lankhorst, Proper, & Jonkers,

2009). Para la aplicación de reconocimiento de rostros se identifican tres componentes

principales: Autenticación, Detección y Reconocimiento.

La librería OpenCV también es un componente, pero para este caso es un componente de

apoyo, ya que provee servicios a los otros componentes de la aplicación, pero no va a ser

desarrollado o modificado.

43

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.

Imagen 11. Vista de Aplicación. Realización Propia.

4.4.3.3. Vista de Infraestructura

El punto de vista de Infraestructura contiene los elementos de infraestructura de software y

hardware que soportan la capa de aplicación, como dispositivos físicos, redes o software

del sistema (por ejemplo, sistemas operativos, bases de datos y middleware) (Group, 2012).

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.

Imagen 12. Vista de Infraestructura. Realización Propia.

44

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.

Imagen 13. Vista de Capas. Realización Propia.

4.5. IMPLEMENTACIÓN Y PRUEBAS

El desarrollo de la aplicación se realizó utilizando el IDE de Visual Studio 2015 de

Microsoft, en su versión Community Edition, la cual cuanta con licencia libre de pago. Se

utilizó el lenguaje C# para el desarrollo del proyecto y de las pruebas de unidad.

45

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.

La solución para el desarrollo de la aplicación cuenta con un proyecto de tipo Windows

Forms, en el cual se encuentra el desarrollo de los formularios y los eventos asociados a los

controles dentro de los formularios.

Imagen 14. Solución y proyecto Windows Forms en .Net. Realización Propia.

Las imágenes de prueba con las cuales se realiza el entrenamiento, se guardan en un

directorio dentro de la aplicación, esto con el fin de que se tengan los permisos suficientes

para crear y leer archivos.

Imagen 15. Formulario de la aplicación. Aplicación de Reconocimiento de Rostros. Realización Propia.

46

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.

Prueba Resultado Esperado

Detectar el rostro de una persona, ubicada

de frente a la cámara

Se debe resaltar el rostro en un recuadro.

Detectar el rostro de una persona ubicada

sobre una margen de la cámara.

Se debe resaltar el rostro en un recuadro.

Detectar el rostro de una persona que tiene

gafas oscuras.

No se debe detectar un rostro.

Detectar el rostro de una persona con una

gorra

No se debe detectar un rostro.

Detectar un rostro que no exista en las

imágenes de prueba

Se debe resaltar el rostro en un recuadro. Se

debe etiquetar como desconocido.

Detectar un rostro que se encuentre en las

imágenes de pruebas

Se debe resaltar el rostro en un recuadro. Se

debe etiquetar con el nombre de la persona

a la que pertenece el rostro.

Detectar el rostro de dos personas Se debe resaltar el rostro en un recuadro. Se

debe etiquetar con el nombre de la persona

a la que pertenece el rostro.

4.7. OPERACIÓN Y MANTENIMIENTO

La aplicación para el reconocimiento de rostros, debe instalarse en un computador que

cuente con una cámara web integrada, o con una conectada como periférico. La aplicación

inicia la captura de video tomando la cámara web por defecto que se encuentre configurada.

Cuando se inicia la aplicación y se inicia el reconocimiento de rostros, el sistema analiza

constantemente el flujo de video de la cámara en busca de rostros. Al detectar un rostro este

47

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.

Imagen 17. Entrenamiento de la aplicación. Aplicación de Reconocimiento de Rostros. Realización Propia.

48

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.

Imagen 18. Imágenes de entrenamiento. Aplicación de Reconocimiento de Rostros. Realización Propia.

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.

Imagen 19. Imagen donde se indica el nombre de la persona. Realización Propia.

49

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.

50

PARTE 3. CIERRE DE LA INVESTIGACIÓN

CAPÍTULO 5. RESULTADOS Y DISCUSIÓN

Como resultado de la presente investigación se logró desarrollar una aplicación que,

utilizando una librería de visión artificial, es capaz de reconocer el rostro de una persona en

una imagen. La aplicación puede ser entrenada para reconocer una o varias personas.

El proceso de reconocimiento inicia con la etapa de detección de rostros, en este proceso se

utilizó el algoritmo de Viola-Jones, que hace parte de la librería OpenCV, y que utiliza

clasificadores en cascada ya entrenados, en donde se utilizaron bases de datos como la de

AT&T Laboratories Cambridge (Cambridge, 1994), la cual cuenta con diez imágenes

diferentes del rostro de cuarenta personas.

Para el reconocimiento se utiliza Eigenfaces, que también viene implementado en OpenCV,

El cual realiza la comparación de la imagen del rostro detectado con las imágenes

guardadas, si encuentra una imagen que se acerqué mucho a la detectada, se indica la

correspondencia.

El reconocimiento facial implementado en la aplicación, es muy utilizado en la biometría,

para la autenticación y la verificación de personas. Utilizando la librería OpenCV, y un

lenguaje de programación es posible realizar aplicaciones de esta técnica orientadas a la

seguridad o al control de personas en oficinas, aulas de clase o para la presentación de

pruebas supervisadas de forma remota.

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.

El campo del reconocimiento facial y de objetos, sigue desarrollándose y en el futuro será

el estándar para la autenticación de personas en bancos y tramites gubernamentales.

51

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

De los resultados de la presente investigación, podemos concluir que es posible crear un

sistema de visión artificial con las tecnologías disponibles en el momento. Se logró

comprobar la hipótesis inicial, ya que utilizando OpenCv y un lenguaje de programación

orientado a objetos como C#, fue posible desarrollar una aplicación capaz de reconocer el

rostro de una persona, analizando el flujo de video capturado por una cámara web.

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.

CAPÍTULO 7. PROSPECTIVA DEL TRABAJO DE GRADO

La aplicación desarrollada en la presente investigación, puede ser utilizada en control de

presencia o control de acceso en diferentes ámbitos educativos y empresariales.

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.

52

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

53

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

54

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

55

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.

56

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.

57

PARTE 5. ANEXOS

5.1. RECONOCIMIENTO DE ROSTROS

Para realizar el reconocimiento de rostros, se utiliza un clasificador en cascada que ya está

entrenado por OpenCV. Este clasificador tiene el nombre de:

haarcascade_frontalface_default.xml.

public CascadeClassifier Face = new CascadeClassifier(Application.StartupPath +

"/Cascades/haarcascade_frontalface_default.xml");

Para la detección se utiliza el método de OpnCV: DetectMultiScale, el cual usa el

clasificador en cascada, y recibe la imagen en tonos de grises.

//DetectorderostrosRectangle[] 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.

//Rostrosdetectadosfor(inti=0;i<facesDetected.Length;i++){//SecalculanlospuntosparaelrectangulofacesDetected[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],newBgr(Color.Red),2);if(Eigen_Recog.IsTrained){stringname=Eigen_Recog.Recognise(result);intmatch_value=(int)Eigen_Recog.Get_Eigen_Distance;//SedibujaelrecuadroencerrandoelrostrodetectadocurrentFrame.Draw(name+"",reffont,newPoint(facesDetected[i].X-2,facesDetected[i].Y-2),newBgr(Color.LightGreen));ADD_Face_Found(result,name,match_value);}}

58

5.2. CLASE PRINCIPAL DE LA APLICACIÓN

La Clase ControlPresencia, se encarga de controlar el flujo de la aplicación, esta clase

corresponde al formulario principal de la aplicación en la cual se inicia el flujo de video

desde la cámara web y se analiza en busca de rostros.

Para la detección del rostro se utiliza el método:

Rectangle[]facesDetected=Face.DetectMultiScale(gray_frame,1.2,10,newSize(50,50),Size.Empty);

El código complete de la clase es el siguiente: #regionvariablesImage<Bgr,Byte>currentFrame;//ImagentomadaporlacamaraImage<Gray,byte>result,TrainedFace=null;//VariableparaguardarelentrenamientoImage<Gray,byte>gray_frame=null;//ImagenenescaladegrisesCapturegrabber;//Variabledecapturadevideostringpath=Application.StartupPath;//Metododedetección,seusaelcalsificador:haarcascade_frontalface_defaultpublicCascadeClassifierFace=newCascadeClassifier(Application.StartupPath+"/Cascades/haarcascade_frontalface_default.xml");MCvFontfont=newMCvFont(FONT.CV_FONT_HERSHEY_COMPLEX,0.5,0.5);intNumLabels;//EntrenamientoporEigenfacesClassifier_TrainEigen_Recog=newClassifier_Train();#endregionpublicControlPresencia(){InitializeComponent();//Loadofpreviustrainnedfacesandlabelsforeachimageif(Eigen_Recog.IsTrained){message_bar.ForeColor=Color.Green;message_bar.Text="Datosdeentrenamientolistos!!!";}else{message_bar.ForeColor=Color.Red;message_bar.Text="Noexistendatosdeentrenamiento.Deberealizarelentrenamiento.";}initialise_capture();}//CamaraStartStoppublicvoidinitialise_capture(){try{

59

grabber=newCapture();grabber.QueryFrame();//InitializetheFrameGrabereventApplication.Idle+=newEventHandler(FrameGrabber_Standard);}catch(Exceptionex){MessageBox.Show("Error",ex.Message,MessageBoxButtons.OK,MessageBoxIcon.Error);}}privatevoidstop_capture(){Application.Idle-=newEventHandler(FrameGrabber_Standard);if(grabber!=null){grabber.Dispose();}}voidFrameGrabber_Standard(objectsender,EventArgse){//SetomalaimagenactualqueestarecibiendolacamarawebcurrentFrame=grabber.QueryFrame().Resize(320,240,Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);//Seconvierteagrisesif(currentFrame!=null){gray_frame=currentFrame.Convert<Gray,Byte>();//DetectorderostrosRectangle[]facesDetected=Face.DetectMultiScale(gray_frame,1.2,10,newSize(50,50),Size.Empty);//Rostrosdetectadosfor(inti=0;i<facesDetected.Length;i++){//SecalculanlospuntosparaelrectangulofacesDetected[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],newBgr(Color.Red),2);if(Eigen_Recog.IsTrained){stringname=Eigen_Recog.Recognise(result);intmatch_value=(int)Eigen_Recog.Get_Eigen_Distance;//SedibujaelrecuadroencerrandoelrostrodetectadocurrentFrame.Draw(name+"",reffont,newPoint(facesDetected[i].X-2,facesDetected[i].Y-2),newBgr(Color.LightGreen));ADD_Face_Found(result,name,match_value);}}//Semuestraelrectanguloenpantallaimage_PICBX.Image=currentFrame.ToBitmap();}}

60

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.

El valor de Eigen_threshold, permite ajustar el umbral para indicar si se ha encontrado

concordancia o si se marca como desconocido.

///<summary>///RecogniseaGrayscaleImageusingthetrainedEigenRecogniser///</summary>///<paramname="Input_image"></param>///<returns></returns>publicstringRecognise(Image<Gray,byte>Input_image,intEigen_Thresh=-1){if(_IsTrained){FaceRecognizer.PredictionResultER=recognizer.Predict(Input_image);if(ER.Label==-1){Eigen_label="Desconocido";Eigen_Distance=0;returnEigen_label;}else{Eigen_label=Names_List[ER.Label];Eigen_Distance=(float)ER.Distance;if(Eigen_Thresh>-1)Eigen_threshold=Eigen_Thresh;//OnlyusethepostthresholdruleifweareusinganEigenRecognizer//sinceFisherandLBHPthresholdsetduringtheconstructorwillworkcorrectlyif(Eigen_Distance>Eigen_threshold)returnEigen_label;elsereturn"Desconocido";}}elsereturn"";}