Está en la página 1de 16

UNIVERSIDAD CATOLICA DE SANTA MARIA

FACULTAD DE CIENCIAS E INGENIERIAS FISICAS Y FORMALES


ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

TEMA:

INFORME FINAL

PROYECTO DE RECONOCIMIENTO FACIAL

USO DE SEGURIDAD DE UN LOCAL GRACIAS AL

USO DE CAMARA CELULAR VIA WIFI Y INDICACION CON ARDUINO


CURSO:
PROCESAMIENTO DIGITAL DE SEÑALES

DOCENTE:
ING. LUCY DELGADO BARRA

REALIZADO POR:
PINTO MEDINA, BRIAN
CUTIPA NOA, HECTOR

Arequipa – Perú
2016
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

INFORME FINAL
PROYECTO DE RECONOCIMIENTO FACIAL POR METODO DE EIGENFACES

1. INTRODUCCION:

El reconocimiento de caras es un método biométrico para la identificación de individuos mediante


características faciales. Existen diversas aplicaciones prácticas, abarcando numerosas disciplinas,
donde puede utilizarse el reconocimiento de caras. Dichas aplicaciones pueden categorizarse en
aplicaciones de seguridad o comerciales. Dentro de las aplicaciones relacionadas a la seguridad
se encuentra el reconocimiento sobre retratos policiales, vigilancia de video, etc. Todas estas
aplicaciones exigen a un sistema de reconocimiento de caras a enfrentar diferentes condiciones
de capacidad de procesamiento, memoria, velocidad, sensibilidad a cambios en la cara y
variabilidad de las imágenes utilizadas, entre otras.

Dos problemas centrales en un sistema automático de reconocimiento de caras son la selección


de características para la representación de la cara y su clasificación basada en la representación
de características elegido. Dicha selección de características puede ser afectada por variaciones
en las imágenes de caras, como la iluminación, expresión y pose.

Eigenfaces es construido sobre técnicas de Análisis de Componentes Principales (PCA) introducido


por M.A. Turk and A.P. Pentland. PCA consigue una reducción de la dimensión proyectando los
datos sobre la dirección que maximice la distribución total sobre todas las clases.

2. MARCO TEORICO

METODO DE EIGENFACES:

El proceso de reconocimiento de caras consiste en tomar una imagen de dos dimensiones, a filas
y b columnas, a la que se transforma en un vector unitario contenido en un espacio de imágenes
n-dimensional (n = a × b). Luego se le substrae la imagen promedio y se proyecta el vector
resultante en un subespacio de menor dimensión utilizando uno de los métodos de reducción de
dimensión.

Esta proyección es comparada con la proyección de un conjunto de imágenes de una base. La


clase del vector más similar, utilizando algún criterio de similitud, es el resultado del proceso de
reconocimiento.

Este método realiza una proyección lineal del espacio de imágenes a un espacio de características
de menor dimensión. Esta reducción se realiza utilizando la técnica PCA la cual toma aquella
proyección lineal que maximiza la dispersión de todas las imágenes proyectadas.

En primer lugar se considera un conjunto de N imágenes con valores en el espacio de imágenes


n-dimensional.

2
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

Se asume además que cada una de las imágenes pertenece a una de las c clases {X1, X2,. . ., Xc}.
Asimismo se considera una transformación lineal que lleva el espacio de imágenes original de n
dimensiones al espacio de características de dimensión m, donde m < n. Los nuevos vectores de
características yk ∈ ℜm son definidos por la siguiente transformación lineal.

Donde W ∈ ℜnxm es una matriz con columnas ortonormales. Se define además la matriz de
distribución total ST como:

Donde µ ∈ ℜn es la media de todas las imágenes. Luego de aplicar la transformación lineal WT, la
distribución de los vectores de características {y1, y2,..., yN} es WT ST W. Se toma aquella
proyección Wopt que maximiza el determinante de la distribución total de la matriz de las
imágenes proyectadas, esto es:

Donde {wi | i = 1, 2,..., m} es el conjunto de vectores propios n-dimensionales de ST


correspondiente a los mayores m vectores propios. Dichos vectores propios tienen la misma
dimensión que las imágenes originales y se les denomina eigenfaces. En la figura se muestra las
primeras cinco eigenfaces obtenidas con un conjunto de imágenes.

Figura (1) – Desarrollo de Eigenfaces

3. OBJETIVOS

 Implementar el algoritmo de Eigenfaces y realizar un registro de fotografías de al menos


5 personas.
 Reconocer satisfactoriamente los rostros de las personas registradas en nuestra base de
datos.
 Detectar una persona que no pertenezca a nuestra base de datos y mostrar un mensaje
de desconocido debido a que esta no se encuentra en nuestra base de datos.
 Una vez cumplido el objetivo anterior, el programa deberá prender un led de
reconocimiento led 1 = persona 1, led2 = persona 2,… así sucesivamente.

3
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

4. DESARROLLO

Como primer objetivo tenemos que realizar la base de datos para lo cual le pediremos ayuda a
nuestros compañeros y también implementaremos el algoritmo de Eigenfaces mediante el
software de Matlab.

4.1- CAPTURA DE IMÁGENES PARA EL REGISTRO DE ROSTROS

Las fotos que utilizaremos poseerán un tamaño de 640 x 480 pixeles. Se pedirá la participación
de nuestros compañeros para así lograr un reconocimiento de rostros en un tiempo real. Las
personas que colaboraran con el proyecto serán:

Figura (1) – Hector Cutipa Figura (2) – Brian Pinto

4
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

Figura (2) – Martha Jesus Figura (3) – Andres Pumacayo

Figura (5) – Maryorin

Una vez armado nuestro registro de fotografías procedemos con la implementación del
algoritmo las imágenes deberán estar en una misma carpeta asociada al Path de Matlab para
facilitar el trabajo.

4.2- PROGRAMA DE RECONOCIMIENTO FACIAL MEDIANTE METODO DE EIGENFACES

a) CAMBIAR EL TAMAÑO DE TODAS LAS IMÁGENES EN FUNCIONES DE N x N

Cada imagen ri con i=1,2,…, M es reorganizada como un vector de dimensión NxN cuyo
valor es construido como la concatenación de cada una de las filas de la imagen, formando
así una matriz de NxNxM.

clear all, close all ;clc;

N=50; %Tamaño de las matrices utilizadas


M=5; %Numero de rostros

% TAMAÑO DE LA PANTALLA
scrsz=get(0,'ScreenSize');
ancho=scrsz(3);
alto=scrsz(4);
ancho=round(ancho/3);
alto=round(alto/2)-40;

% CARGAR IMAGENES Y REDIRECCIONAR PARA SU PROCESAMIENTO

5
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
% Hector
Hector=imread('C:\Users\TOSHIBA\Desktop\entrenar\Hector.jpg','jpg
');
Hector=rgb2gray(Hector);
Hector=imresize(Hector,[N N]);
figure('Position',[10 alto ancho alto])
subplot(2,3,1),imshow(Hector,'Initialmagnification','fit');title(
'Hector')
% Brian
Brian=imread('C:\Users\TOSHIBA\Desktop\entrenar\Brian.jpg','jpg')
;
Brian=rgb2gray(Brian);
Brian=imresize(Brian,[N N]);
subplot(2,3,2),imshow(Brian,'Initialmagnification','fit');title('
Brian')
% Martha
Martha=imread('C:\Users\TOSHIBA\Desktop\entrenar\Martha.jpg','jpg
');
Martha=rgb2gray(Martha);
Martha=imresize(Martha,[N N]);
subplot(2,3,3),imshow(Martha,'Initialmagnification','fit');title(
'Martha')
% Andres
Andres=imread('C:\Users\TOSHIBA\Desktop\entrenar\Andres.jpg','jpg
');
Andres=rgb2gray(Andres);
Andres=imresize(Andres,[N N]);
subplot(2,3,4),imshow(Andres,'Initialmagnification','fit');title(
'Andres')
% CaraFeliz
carafeliz=imread('C:\Users\TOSHIBA\Desktop\entrenar\carafeliz.jpg
','jpg');
carafeliz=rgb2gray(carafeliz);
carafeliz=imresize(carafeliz,[N N]);
subplot(2,3,5),imshow(carafeliz,'Initialmagnification','fit');tit
le('carafeliz')

% CONCATENAR IMÁGENES DE NxNxM


MC(:,:,1)=Hector;
MC(:,:,2)=Brian;
MC(:,:,3)=Martha;
MC(:,:,4)=Andres;
MC(:,:,5)=carafeliz;
st.names={'Hector','Brian','Martha','Andres','carafeliz'};
st.data{1}=Hector;
st.data{2}=Brian;
st.data{3}=Martha;
st.data{4}=Andres;
st.data{5}=carafeliz;

b) SE OBTIENE EL ROSTRO PROMEDIO Ψ SEGÚN LA FÓRMULA

% CALCULO DEL ROSTRO PROMEDIO

6
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
avImg=zeros(N);
figure('Position',[ancho alto ancho alto])
for k=1:M
st.data{k}=im2single(st.data{k}); %Obtiene el promedio de la
imagen con respecto a la siguiente
avImg=avImg+(1/M)*st.data{k}; %Acumula la imagen y el
promedio
subplot(2,3,k),imshow(avImg,'Initialmagnification','fit');
title(['Promedio con ',st.names{k},])
pause(2)
end

c) ELIMINAR EL PROMEDIO

El rostro promedio Ψ obtenido es restado a cada una de las imágenes ri con i entre 1…M
obteniendo un nuevo conjunto de vectores

Que conforman la matriz

% RESTA DEL PROMEDIO DE CADA UNA DE LAS IMAGENES


for k=1:M
st.dataAvg{k}=st.data{k}-avImg;
end
z=[st.dataAvg{1} st.dataAvg{2} st.dataAvg{3} st.dataAvg{4}
st.dataAvg{5}];
ZC(:,:,1)=st.dataAvg(1);
ZC(:,:,2)=st.dataAvg(2);
ZC(:,:,3)=st.dataAvg(3);
ZC(:,:,4)=st.dataAvg(4);
ZC(:,:,5)=st.dataAvg(5);
figure('Position',[(2*ancho) alto ancho
alto]),imshow(z,'Initialmagnification','fit');title(' resta
promedio ')
pause(5)

d) CALCULAR LA MATRIZ DE COVARIANZA

En este punto se buscan los autovectores de la matriz de covarianza de Λ

De dimensión N2 xN2. Estos vectores propios son los vectores ortonormales usados para
construir la representación de las imágenes. El tamaño de la matriz C hace intratable este
paso por el espacio y el tiempo requerido). Para solucionar este problema, se obtiene una
aproximación de dichos vectores.

% CALCULO DE AUTOVECTORES MATRIZ COVARIANZA


A=zeros(N*N,M); %Generar vector A=[img(:) img2(:)... imgM(:)]
for k=1:M

7
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
A(:,k)=st.dataAvg{k}(:);
end
C=A'*A;
figure(6),imagesc(C);title('convarianza')

e) VECTORES DE EIGENFACES

% VECTORES EIGEN EN PEQUEÑAS DIMENSIONES


[Veigvec,Deigval]=eig(C); %Vector MxM unicamente diagonal de 4
valores eigen
%Eigenface en largas dimensiones A*veigvec es un vector eigen de
C largo
Vlarge=A*Veigvec; %2500*M*M*M
eigenfaces=[]; %Redimensiona el eigenface
for k=1:M
c=Vlarge(:,k);
eigenfaces{k}=reshape(c,N,N);
end
x=diag(Deigval);
[xc,xci]=sort(x,'descend'); %El valor mas large eigenval en orden
mayor a menor
z=[eigenfaces{xci(1)} eigenfaces{xci(2)} eigenfaces{xci(3)}
eigenfaces{xci(4)} eigenfaces{xci(5)}];
figure('Position',[10 10 ancho alto]),
imshow(z,'Initialmagnification','fit')
pause(5)

f) OBTENER EL PATRON

Se obtiene el patron:

Donde:

% PATRONES DE RECONOCIMIENTO
nsel=3 %Seleccion de eigenfaces
for mi=1:M %Numero de imagenes
for k=1:nsel %Eigenface para numero de coeficiente
wi(mi,k)=sum(A(:,mi).*eigenfaces{xci(k)}(:));
end
end

g) RECONOCIMIENTO DE LA CAMARA

En esta parte se presentó un problema debido a que Matlab no mostraba los dispositivos
de videos conectados mediante el comando imaqhwinfo después de instalar los toolbox
Vision for Matlab y Image Acquisition se logró solucionar el problema satisfactoriamente.
Se agregó otro dispositivo para captura de imágenes mediante celular el cual estaba
conectado por Wi-Fi. El cual paso a ser (‘winvideo’,1) dejando a la webcam como
(‘winvideo’,2).

8
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

9
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
% RECONOCIMIENTO DE LA CAMARA
video1=videoinput('winvideo',1); %Reconoce la camara
info1=imaqhwinfo('winvideo',1);
video1.BayerSensorAlignment='grbg';
set(video1, 'SelectedSourceName','input1')
preview(video1)
pause(2)
s=getsnapshot(video1); %Toma una fotografia con la camara
s=rgb2gray(s); %Pasa a escala de grises la fotografia
imwrite(s,'C:\Users\TOSHIBA\Desktop\entrenar\camara.jpg','jpg')
closepreview(video1) %Cierra el entorno de la camara
testFaceMic=imresize(s,[N N]); %Convierte la fotografia en un
vector de NxN
testFaceMic=im2single(testFaceMic);
figure('Position',[ancho 10 ancho alto]),
imshow(testFaceMic,'Initialmagnification','fit')
pause(5)

h) RECONOCIMIENTO DEL ROSTRO

Dada la imagen de un rostro como entrada del sistema, el proceso de reconocimiento


intenta encontrar en la base de imágenes, aquella que se corresponde con el rostro dado,
para lo cual se calcula su patrón Ω utilizando el mismo procedimiento anteriormente
descrito, y se busca la distancia mínima.

Una vez encontrada la distancia mínima se indica cuál es la imagen correspondiente.

% RECONOCIMIENTO FACIAL
Aface=testFaceMic(:)-avImg(:); %Normalizacion del rostro.
for tt=1:nsel
wface(tt)=sum(Aface.*eigenfaces{xci(tt)}(:));
end
%Calcula la distancia
for mi=1:M
fsumcur=0;
for(tt=1:nsel)
fsumcur=fsumcur+(wface(tt)-wi(mi,tt)).^2;
end
diferencia(mi)=sqrt(fsumcur); %Diferencia entre la foto y el
registro
end
desconocido=imread('C:\Users\TOSHIBA\Desktop\entrenar\desconocido
.png','png');
[val in]=min(diferencia);
if val<=200 %Si el rostro es conocido se mostrara la foto de la
persona
figure('Position',[2*ancho 10 ancho alto]),
imshow(st.data{in}),title(['La imagen corresponde a
',st.names{in},])
else
figure,imshow(desconocido) % Si el rostro es desconocido se
mostrara un mensaje de DESCONOCIDO
end

10
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

Una vez completado el primer objetivo pasaremos con el siguiente el cual será probar nuestro
programa en tiempo real y ver si reconoce el rostro de la persona fotografiada y que también ver
qué pasaría si tomamos una fotografía a una persona que no está en nuestro registro.

4.3- FUNCIONAMIENTO DEL PROGRAMA

Primero se muestran las imágenes cargadas (las que están en nuestro registro) y se muestran
en pantalla.

Figura (7) – Muestra del registro de fotos

Después el programa realiza el promedio de la primera foto con la segunda, luego el promedio
obtenido de la primera con la segunda se promedia con la tercera y así sucesivamente con
todo el registro.

Figura (8) – Promedio de todas las imágenes del registro

11
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

Una vez realizado el promedio de todas las fotografías se restan dichos promedios para
eliminar dicho promedio.

Figura (9) – Resta de los promedios

Como se puede observar en la Figura 9 los promedios han sido eliminados quedando así
características únicas de cada fotografía. Una vez tengamos las características de cada foto
hallamos la covarianza de estas mismas.

Figura (10) – Covarianza de las fotografías

Ya obtenida la covarianza podemos realizar la captura de la persona a la cual queremos


identificar en este caso será Héctor. Se enciende la cámara y se realiza la captura.

12
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

Figura (11) – Captura de fotografía

Al realizar la captura la fotografía se pasa a escala de grises y se distribuye en una matriz de


50x50, esto servirá para ser comparada con las fotografías del registro. Se pasa a escala de
grises debido a que sería más difícil identificar con colores debido a los fondos, las tonalidades
de los colores, etc.

El programa procesa la fotografía de Héctor y nos devuelve la respuesta.

Figura (12) – Respuesta del programa

En caso de que la persona no se encuentre en el registro de rostros el programa debería


responder mostrando un mensaje de “PERSONA DESCONOCIDA”. Como se puede apreciar en
la siguiente Figura

13
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

Foto tomada por la cámara del celular

Resultado

En esta parte tuvimos algunas dificultades debido a que los fondos se confundían y el
programa al no tener el umbral bien definido, elegía a la persona con menor diferencia. La
diferencia tenía que variar bastante para que muestre el mensaje de “DESCONOCIDO”.

Por último y para concluir todos nuestros objetivos trazados implementaremos el Hardware
mediante un arduino para esto necesitaremos instalar el paquete de arduino para Matlab una vez
instalado procederemos con la programación.

4.4- IMPLEMENTACION DEL HARDWARE

Para nuestro proyecto decidimos utilizar el arduino UNO el cual hará que se encienda el led1
si la persona reconocida por el programa pertenece a la persona 1, que en este caso sería
Héctor, el led2 para Brian, el led3 para Martha, el led4 para Andrés y por último el led5 para
Maryelin.

Una vez instalada la librería de Matlab procederemos con el código que es el que se muestra
a continuación:

ard=arduino('COM6') % enlazar el puerto donde esta el arduino


ard.pinMode(8,'output'); %Declaración del pin 8 como salida
ard.pinMode(9,'output'); %Declaración del pin 9 como salida
ard.pinMode(10,'output'); %Declaración del pin 10 como salida
ard.pinMode(11,'output'); %Declaración del pin 11 como salida
ard.pinMode(12,'output'); %Declaración del pin 12 como salida
while(true) %ciclo infinito
%como hicimos en el programa dimos un número a cada persona
if in==1 % si es hector
ard.digitalWrite(8,1); % activo pin 8
else
ard.digitalWrite(8,0); % desactivo pin 8
end

14
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
if in==2 % si es brian
ard.digitalWrite(9,1);
else
ard.digitalWrite(9,0);
end
if in==3 % si es martha
ard.digitalWrite(10,1);
else
ard.digitalWrite(10,0);
end
if in==4 % si es andres
ard.digitalWrite(11,1);
else
ard.digitalWrite(11,0);
end
if in==5 % si es maryorin
ard.digitalWrite(12,1);
else
ard.digitalWrite(12,0);
end
end

Corriendo el programa vemos que funciona correctamente y enciende el led definido


anteriormente.

Como podemos ver en este caso la persona elegida fue el número 1 que corresponde a
Héctor por eso se hace el prendido del led 1 y los demás se mantienen apagados

5. CONCLUSIONES

 Gracias a este proyecto logramos aprender cómo funciona el algoritmo de Eigenfaces, el


cual es bastante robusto a la hora de reconocimiento facial, tiene algunos problemas con
el tema de los fondos, pero fuera de eso es un algoritmo que no falla.

15
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL

 Tuvimos algunas dificultades al momento de definir el umbral de diferencia debido al


tema de los fondos ya que al haber mucha luz el algoritmo puede confundirse, y muestra
a la persona más parecida.
 Este proyecto lo hicimos como un prototipo de seguridad de un local para evitar a las
personas vetadas pero lo que tenemos que ver es el lugar donde se tomara las fotos para
no fallar
 Gracias a la resolución del proyecto pudimos ver la interacción que podemos hacer con la
cámara de un celular y con el arduino
 Vimos cómo hacer el tratamiento de las imágenes usando sus pixeles o convertir en varias
matrices donde pudimos ver la diferencia que hay entre estas
6. REFERENCIAS

 http://sedici.unlp.edu.ar/bitstream/handle/10915/22881/Documento_completo
.pdf?sequence=1.
 http://www.bib.uia.mx/tesis/pdf/014620/014620_00.pdf
 http://www.justdocument.com/download/4827134690/eigenfaces-para-
recongnition-analisis-preliminar-de-algoritmos/
 https://www.youtube.com/c/adaniieel

16