Reconocimiento facial mediante redes neuronales “hopfield”, “backpropagation” y algoritmo pca: un enfoque comparativo

Resumen

Hoy en dia unas de las aportaciones a los sistemas de acceso a las diferentes aplicaciones y control es mediante el reconocimiento facial.El presente trabajo enfoca un análisis comparativo del uso de diferentes redes neuronales para el reconocimiento facial, este obedece a un análisis previo para el desarrollo de una aplicación sobre un control de acceso mediante esta técnica, para ello se establecieron específicamente las de Hopfield, Backpropagation y Algoritmo PCA. Todas ellas bajo las misma condiciones, sin embargo una de las condiciones que mas afectaron el resultado de este comparativo era la iluminación al momento de captar la imagen a identificar.


Palabras clave: Reconocimiento Facial, Redes Neuronales, Hopfield, Backpropagation, Algoritmo PCA

Abstract

Today one of the inputs to access systems and control different applications is through facial recognition. This paper focuses on a comparative analysis of using different neural networks for face recognition; this follows a previous analysis for the development of an application for access control using this technique, for it specifically established the Hopfield, Backpropagation and PCA algorithm. All under the same conditions, however one of the conditions that most affected the results of this comparison was the lighting when the picture is taken to identify.


Keywords: facial recognition, neural networks, Hopfield, Backpropagation, PCA algorithm.

Introducción

Generalidades

En la actualidad, existen diversas aplicaciones cuyo funcionamiento está basado en el reconocimiento facial, dividiéndose en tres grandes grupos [1]. El grupo más conocido por la gente, es el comercial, es decir, aplicaciones para la introducción de un usuario en redes de computadoras, seguridad electrónica, acceso a internet, cajeros automáticos, controles de acceso, teléfonos móviles, etc. Entre estas aplicaciones podemos mencionar  los ejemplos de Google y Facebook.

El segundo gran grupo al que se hace referencia, es el gubernamental, cuyas aplicaciones son las vinculadas a documentos identificativos (DNI, pasaporte, permiso de conducir), Seguridad Social, control de fronteras, control de aeropuertos, etc. La aplicación más conocida y moderna, perteneciente a este segundo grupo es el ABC system, utilizado para el chequeo de pasaportes (se pone un pasaporte y se comprueba que la foto coincide con la del mismo, registrada en la base de datos

En el tercer grupo, el forense, tienen lugar investigaciones criminales, identificación de cadáveres, terrorismo, identificación de personas desaparecidas, etc.[2]

Estado del Arte

El reconocimiento facial cada día cobra un mayor auge derivado principalmente a las nuevas aplicaciones que lo incluyen como mecanismo de control de seguridad y acceso a las mismas.

Steve  Rossius enfatiza en su artículo Reconocimiento de Objetos Mediante Webcam en tiempo real “sin duda alguna, uno de los campos más interesantes y revolucionarios es la robótica y su estrecha relación con la inteligencia artificial” [3]Ya no hace falta dominar un lenguaje computacional  para interactuar con los sistemas inteligentes. Los sistemas de inteligencia artificial ya son capaces de entender y procesar nuestras órdenes empleando el lenguaje natural. Igual  que  en  los  humanos,  la  entrada  de  datos  más  importante es  la visión. Menciona también que en un sistema inteligente, normalmente se trata de una cámara compuesta por multitud de lentes y sensores específicos para cada sistema y campo de aplicación. La visión artificial engloba a cualquier  proceso óptico  mediante  el  cual un  sistema inteligente es capaz de extraer información de  un  entorno  para su interpretación mediante el uso de la computadora.

Algunos de los principales desafíos para lograr un reconocimiento facial con mayor precisión pueden ser el rechazo de usuarios no permitidos, independizar el reconocimiento de la iluminación, poder realizar el reconocimiento tanto de día como de noche y la detección de gafas de sol para que el usuario se las quite en el caso que quiera arrancar el coche[4].

Los sistemas de reconocimiento facial se basan fundamentalmente en 2  técnicas: Biometría  y PCA/2DPCA (Principal Component Analysis /2 Dimensional PCA).

Sebastián Bronte Palacios de la Universidad de Alcalá nos habla en su artículo Sistema de Detección y Reconocimiento Facial de Conductores Mediante Sistemas de Visión Computacional[5]; que la Biometría se basa en calcular distancias entre partes significativas de la cara, como pueden ser la distancia entre ojos, dimensiones de la nariz, tamaño de la boca, etc.

Este cálculo de distancias puede fallar si las cámaras se descalibran o si están mal enfocadas o si el objetivo se mueve mucho obteniendo unas imágenes borrosas no aptas para un buen cálculo de distancias. Otras posibles variaciones que nos podemos encontrar a la hora de medir distancias en una cara son los gestos, con los cuales podemos modificar sustancialmente las dimensiones de la boca y de los ojos. Si queremos unas buenas medidas de distancia entre puntos característicos de la cara, no se puede confiar únicamente en una proyección 2D de la cara.

Con respecto a los sistemas basados en PCA, tienen el inconveniente de que se basan en la apariencia de las imágenes para proceder a la comparación, esto es, que influye en gran medida el gesto que tenga la cara de la persona en el instante que se proceda al reconocimiento. Este problema se soluciona enriqueciendo la base de datos con suficientes gestos de una misma persona.

En estas dos técnicas de reconocimiento facial aparece el problema de la iluminación de la escena, la cual hace que varíen los colores de ciertas zonas de la cara dependiendo de dónde esté el foco, y esta es una alinealidad que no es fácilmente eliminable.

Pamela Alejandra Pereyra de la universidad de Buenos Aires, habla en su tesis Reconocimiento Facial Mediante Imágenes Estereoscópicas Para Control de Ingreso; “Los seres humanos se reconocen entre sí por medio de los rostros”, se puede decir que se almacenan en la memoria las imágenes de las caras de gente que se conoce.

Para ello, se tienen en cuenta los rasgos característicos que permiten identificarlas. Generalmente se logra el reconocimiento aún con cambios importantes producto del paso del tiempo, el uso de accesorios y maquillaje entre otros.

Esta capacidad es excelente para reconocer caras de conocidos, aunque no es tan buena cuando se trata de caras poco familiares. El progreso computacional de las últimas décadas, permitió automatizar el reconocimiento facial modelizando los mecanismos de la percepción visual de los seres humanos con el objeto de poder emplearlo en diversos campos de aplicación, principalmente, en los casos que se requiere mejorar la seguridad a todo nivel.

Con la evolución de las tecnologías asociadas a la información, nuestra sociedad está cada día más conectada electrónicamente. Labores que tradicionalmente eran realizadas por seres humanos son, gracias a las mejoras tecnológicas, realizadas por sistemas automatizados. Dentro de la amplia gama de posibles actividades que pueden automatizarse, aquella relacionada con la capacidad para establecer la identidad de los individuos ha cobrado una gran importancia y como consecuencia directa, la biometría se ha transformado en un área emergente.

Carmen Virginia Gámez Jiménez argumenta en su artículo Diseño y desarrollo de un sistema de Reconocimiento de Caras [6] que no cualquier característica anatómica puede ser utilizada con éxito por un sistema biométrico y que para que esto sea así debe cumplir ciertas características como se mencionan a continuación: Universalidad, Unicidad, Permanencia y Cuantificación.

En principio, cualquier característica física o determinados tipos de comportamiento pueden ser utilizados como rasgos biométricos, siempre y cuando posean las propiedades mencionadas anteriormente:

En la actualidad existen tres métodos de reconocimiento facial [7]:

Luis Blanquez Pérez nos dice en su proyecto  Reconocimiento Facial Basado en Puntos Característicos de la Cara en entornos no controlados [8]; que la biometría se encarga del reconocimiento automático de personas mediante sus rasgos físicos (cara, retina, iris, voz, huellas dactilares, etc.) o rasgos de conducta (forma de andar, de escribir, etc.).

Hay tres enfoques predominantes en el problema de reconocimiento facial: i) geométrico: basado en los rasgos, ii) fotométrico: basado en lo visual, y iii) la combinación de los dos enfoques anteriores[9] como se muestra en la Ilustración 1,en ella se puede apreciar los puntos que conforman el rostro humano y que son identificados en el reconocimiento facial. Conforme a que el interés en reconocimiento facial continuó, fueron desarrollados muchos algoritmos diferentes; se deben destacar tres de ellos, los cuales han sido bien estudiados en la literatura del reconocimiento facial:

Los sistemas de reconocimiento facial modernos se basan en estos algoritmos.

Ilustración 1 Conformación del Rostro Humano

Desarrollo

Metodología

Este proyecto se baso en el modelo en espiral [10], el cual, es un modelo de procesos de software evolutivo que conjuga la naturaleza iterativa de construcción de prototipos con los aspectos controlados y sistemáticos del modelo lineal secuencial. Este modelo sigue una serie de versiones incrementales, durante las primeras iteraciones puede ser un modelo basado en prototipos  y durante las últimas iteraciones se pueden llegar a producir versiones cada vez más completas del sistema dañado como se muestra en la siguiente ilustración.

Ilustración 2 Modelo Espiral y sus Fases

El modelo en espiral se divide en un número de actividades de marco de trabajo, también llamadas regiones de tareas. Generalmente, existen entre tres y seis regiones laterales:

Comunicación con el cliente. Las tareas requeridas para establecer comunicación entre el desarrollador y el cliente. Planificación.  Las tareas requeridas para definir recursos, el tiempo y otra información relacionadas con el proyecto. Análisis de riesgos.  Las tareas requeridas para evaluar los riegos técnicos y de gestión. Ingeniería. Las tareas requeridas para construir una o más representaciones de la aplicación. Construcción y acción.  Las tareas requeridas para construir, probar, instalar y proporcionar soporte al usuario. Evaluación del cliente.  Las tareas requeridas para obtener la reacción del cliente según la evaluación de las representaciones del software creadas durante la etapa de ingeniería e implementada durante la etapa de instalación.

Requerimientos

Como resultado de la fase de análisis, primera fase del proyecto se determino los Requerimientos Funcionales del Sistema de Control de Acceso mediante el Reconocimiento facial, sin embargo derivado del comportamiento de los diferentes algoritmos de reconocimiento, se determinaron como lo muestra la siguiente tabla en la cual se resumen para efectuar un análisis comparativo sobre los diferentes algoritmos el Hopfield, Backpropagation y Algoritmo PCA.

Requerimientos Funcionales Determinados para el Reconocimiento Facial
ID Requisito Descripción del requisito Medio Prioridad
rfRF-01 Captura fotográfica Para realizar el reconocimiento del usuario es importante capturar una imagen del usuario. Cámara web Alta
rfRF-02 Procesado de la imagen Esta es la parte más importante del sistema, ya que para realizar el reconocimiento es necesario procesar la extracción de características capaz de encontrar en la imagen todos aquellos elementos que pueden ser de interés para el reconocimiento y posteriormente realizar el reconocimiento. MATLAB Alta
rfRF-03 Reconocimiento Facial En esta parte el sistema definirá si el usuario tendrá acceso o no. El proceso de reconocimiento facial se llevara a cabo utilizando el algoritmo PCA. MATLAB Alta
rfRF-04 Resultado Si el resultado del reconocimiento fue correcto el sistema arrojara un aviso diciendo que el usuario fue reconocido y por ende tendrá acceso. INTERFAZ EN MATLAB Alta

Tabla 1 Requerimientos Funcionales

Captura de Imagen

El primer requerimiento funcional es la captura fotográfica, bajo este esquema se programo una función que permitiera esta captura mediante la siguiente interfaz.

Ilustración 3 Interfaz para la Captura de Imagen

Para esta interfaz se desarrollo el siguiente código, que muestra el funcionamiento para la captura de la imagen mediante una cámara web integrada al equipo de cómputo.

function encender_Callback(hObject, eventdata, handles)

global vid

global bandera

if bandera == 0

vid = videoinput('winvideo', 1,'YUY2_640x480');

vid.LoggingMode = 'memory';

FocusMode= 'auto';

src = getselectedsource(vid);

vid.ReturnedColorspace = 'RGB';

vidRes = get(vid, 'VideoResolution');

imWidth = vidRes(1);

imHeight = vidRes(2);

nBands = get(vid, 'NumberOfBands');

hImage = image( zeros(imHeight, imWidth,

nBands),'Parent',handles.webcam);

preview(vid,hImage);

bandera = 1;

elseif bandera == 1

flushdata (vid);

delete(vid);

bandera = 0;

end

La función encender_Callback mostrada anteriormente, se utiliza para encender y apagar la cámara. Las condiciones nos ayudaran a determinar cuándo encendemos la cámara o la apagamos.

Procesamiento de Imagen

La función imagen_Callback contiene el código para capturar la fotografía y a su vez se realiza la detección de rostros. Esta función solo se activa al momento de pulsar el botón capturar mediante el método callback, el siguiente código muestra dicha función.

function image_Callback(hObject, eventdata, handles)
global vid
cap = getsnapshot(vid);
nombre = 'captura.jpg';
imwrite(cap,nombre);
I = imread(nombre);
faceDetector = vision.CascadeObjectDetector('FrontalFaceLBP');
% detectar cara
bbox = step(faceDetector, I);
%% usando un nuevo objeto con anotaciones
           I_faces = insertObjectAnnotation(I,'rectangle',bbox,[1:size(bbox,1)]);
imshow(I_faces);
Icrop = imcrop(I,bbox(1,:));
figure;
% imshow(Icrop);
Icrop = imresize (Icrop, [50 50]);
IM = Icrop;

Se realiza la captura de la imagen, esta debe almacenarse en la variable cap, a la imagen tomada se le asignara un nombre, después de asignar el nombre se guarda la imagen en el disco duro en la ubicación de donde se encuentra la interfaz.Con imread se hará la lectura de la imagen capturada y se almacenara en la variable I. En la variable bbox, se guardara el resultado de la detección de rostros faceDetector (vision.CascadeObjectDetector('FrontalFaceCART');) y la variable I. después se dibujara un cuadro en la imagen capturada, y con imcrop se hace un recorte a la imagen ya que solo se necesitara el rostro de la persona.

Reconocimiento Facial

El reconocimiento facial es el requerimiento más importante ya por medio de él se coteja la imagen para determinar su identidad y por consiguiente saber si se trata de la misma persona. Para hacer el reconocimiento facial se utilizó una red neuronal la cual se entrena con las imágenes a reconocer, para este proyecto se entrenaron con tres algoritmos para su análisis.

El siguiente código esta enfocado a una red Hopfield y determinara si el reconocimiento fue o no exitoso.

load images.mat
load entrenada.mat
imagenprueba = im2bw(Icrop,.4)
datos{1} = imagenprueba(:);
sale = sim(red,{1 100},{},datos);
resul =(reshape(sale{50},[50 50])+1)/2;
subplot(1,2,1), subimage(IM), title('imagen capturada');
if(any(resul - sonia) == 0)
im = imread('image/Sonia.jpg')
subplot(1,2,2), subimage(im), title('Sonia Perea Juarez');
elseif(any(resul - daniel) == 0)
im = imread('image/Daniel.jpg')
subplot(1,2,2), subimage(im), title('Jesus Daniel Crespo Hernandez');
elseif(any(resul - chema) == 0)
subplot(1,2,2), subimage(im), title('Jose Manuel Torres Mandujano'); elseif(any(resul - chisko) == 0)
im = imread('image/Francisco.jpg')
subplot(1,2,2), subimage(im), title('Francisco Xavier');
elseif(any(resul - chemartin) == 0)
im = imread('image/Martin.jpg')
subplot(1,2,2), subimage(im), title('José Martin Lara Vite');
elseif(any(resul - gero) == 0)
im = imread('image/Geronimo.jpg')
subplot(1,2,2), subimage(im), title('Geronimo Hernandez de la Cruz');
else
msgbox('El usuario no se encuentra Registrado');
end

Una vez que la imagen es recortada se guarda en la variable Icrop, como ya se mencionó anteriormente; a esta imagen se convierte a blanco y negro con im2bw y se guarda en la variable imagenprueba. Esta variable imagenprueba, se trabaja en la red neuronal; al terminar el procesamiento facial indica si el reconocimiento fue exitoso.

Evaluación

Se hicieron Pruebas con Cinco Personas diferentes entrenando las redes neuronales con los tres algoritmos Hopfield, Backpropagation y Algoritmo PCA. Una vez entrenados se procedió a la captura de imagen y reconocimiento facial para cada uno de ellos en las tres redes.

Prueba Resultado

Tabla 2 Proceso de Reconocimiento Facial

En la tabla anterior se muestra el resultado del proceso descrito el cual inicia con la captura de la Imagen, posteriormente se delimita el rostro de la persona y como ultimo paso se reconoce y coteja contra la red neuronal entrenada, para que se dictamine si es correcto el reconocimiento o no.

Resultados

Por último se muestran los resultados obtenidos en la evaluación de las tres técnicas empleadas para el reconocimiento facial siendo los siguiente :

Ilustración 4-Comparación de resultados de las evaluaciones.

Al Comparar los resultados de la evaluación, se puede observar cuál de los tres métodos realizados es el mejor para el reconocimiento facial. La Red Neuronal de Hopfield es el más apto para el reconocimiento facial ya que obtuvo el mayor porcentaje de efectividad con un 80%.

La primer técnica utilizada fue la implementación de la red neuronal de Hopfield, la cual se encarga de reconstruir el patrón que se le ha introducido, que en este caso fue la imagen del usuario y lo va asociando con los patrones con los que ha sido entrenada, cabe mencionar que esta red se vuelve muy estable cuando los patrones de entrenamiento son muy  diferentes lo cual asegura mucho más su funcionamiento ya que si los rostros de los usuarios registrados son diferentes asegura la confiabilidad del sistemas.

La segunda técnica utilizada es el PCA que por sus siglas se puede interpretar como análisis de componentes principales la cual tiene como función analizar algunas partes fundamentales del rostro como son el color, el brillo, etc. Todas estas características pueden ser comúnmente conocidas como eigenfaces.

La tercer técnica utilizada es el Backpropagation la cual con base a las investigaciones se descubrió que es uno de los mejores para clasificar imágenes y el más usado por algunos investigadores, su principal característica es que reduce el tiempo para determinar la similitud entre los patrones establecidos, se puede reducir como consecuencia de que la red puede aprender el algoritmo correcto sin que alguien tenga que deducirlo por anticipado.

La desventaja de utilizar la técnica Backpropagation es el tiempo de entrenamiento ya que a diferencia de la red Hofield, la red Backpropagation tardo mucho más al momento de entrenar la red con los patrones de entrada.

Conclusiones

Al aplicar estas tres técnicas se llegó a la conclusión que aunque el backpropagation es una de las mejores, no fue lo suficiente efectivo en la prueba de reconocimiento ya que el que más dio eficacia y seguridad fue el de Hopfield con un porcentaje del 80% en el reconocimiento facial, lo cual hace que ocupe el puesto número uno en este proyecto, y como segundo numero tenemos al algoritmo PCA con un porcentaje de 65% de eficacia, y como  tercer puesto lo ocupa el algoritmo Backpropagation con un porcentaje de 25%.

Para cada algoritmo se realizaron las mismas pruebas, y a partir de los resultados se obtuvieron los porcentajes para cada red, a partir de estos resultados se optó por el algoritmo de Hopfield para ser implementado en este proyecto.

Es importante mencionar que se debe tener en cuenta el medio ambiente en el cual nos encontramos al momento de realizar el reconocimiento, ya que ciertos factores influyeron al momento reconocer al usuario.

Bibliografia

[1]Incera, J. A. (2007). Nuevas Interfaces y sus Aplicaciones en las Tecnologías de Información y Comunicaciones. Reporte técnico.

[2]Binetskaya, M. (2013). Reconocimiento facial en el ambito forence. Madrid.

[3]Rossius, S. (2013). Reconocimiento de objetos mediante webcam en tiempo real. Valencia, España.

[4]Palacios, S. B. (2008). Sistema de deteccion y reconocimiento facial de conductor mediante sistemas de vision computacional. Madrid, España.

[5]Bronte, S., Bergasa, L. M., Nuevo, J., & Barea, R. Sistema de reconocimiento facial de conductores.

[6]Jiménez, C. G. (2009). Diseño y Desarrollo de un sistema de Reconocimiento de Caras. Proyecto Fin de Carrera de Ingeniera de Telecomunicaciones. Universidad Carlo III, Madrid.

[7]Chiriboga Maldonado, M. P., & Salcedo Eches, E. A. (2003). Implementacion de algoritmos para procesamiento, deteccion de bordes y segmentacion de imagenes digitales a color. Quito, Ecuador.

[8]Blázquez, L. (2013). Reconocimiento Facial Basado en Puntos Característicos de la Cara en entornos no controlados. Universidad Autónoma de Madrid.

[9]Marquez, C. S. (2015). Sistema basico de identificacion de usuario en matlab .

[10]Alfonso, M., Botía, A., Mora, F., & Trigueros, J. P. (2005). Ingeniería del software. I. Sommerville. Pearson Educación.


[a] Profesor Investigador de la Universidad Autónoma del Estado de Hidalgo - Escuela Superior Huejutla.