Professional Documents
Culture Documents
FACULTAD DE CIENCIAS
TEMA:
SISTEMA DE SEGURIDAD CON RECONOCIMIENTO FACIAL MEDIANTE
PROCESAMIENTO DIGITAL DE IMGENES.
PIURA PERU
DICIEMBRE, 2015
DEDICATORIA
El presente trabajo lo dedico a toda mi
familia, especialmente a mis padres que
me apoyan cada da y hermanas que son
un pilar fundamental de mi vida, que me
han apoyado para luchar por mis sueos
y hacerlos realidad.
Dilmer Javier Puel Cruz
AGRADECIMIENTO
Agradezco de todo corazn a Dios
y a mis padres que alimentan mi
espritu con su amor para siempre
seguir adelante. A mis maestros
que da a da han sabido transmitir
sus conocimientos.
Dilmer Javier Puel Cruz
INTRODUCCIN
En el presente proyecto se desarrolla el prototipo del Sistema de seguridad con
reconocimiento facial mediante el Procesamiento Digital de Imgenes. Se basa
fundamentalmente en el uso de cmaras para capturar la zona de inters, a travs
de la programacin desarrollada en Matlab identificar el rostro de las personas
comparando con una foto previa en la base de datos y as definir si corresponde o
no para luego accionar una salida digital, mediante las salidas del Arduino.
Los humanos a menudo utilizan los rostros para reconocer individuos y los avances
en las capacidades de computacin en las ltimas dcadas, ahora permiten
reconocimientos similares en forma automtica. Los algoritmos de reconocimiento
facial anteriores usaban modelos geomtricos simples, pero el proceso de
reconocimiento actualmente ha madurado en una Ciencia de Sofisticadas
representaciones matemticas y procesos de coincidencia. Importantes avances e
iniciativas en los pasados diez a quince aos han propulsado a la tecnologa de
reconocimiento facial al centro de la atencin.
CAPITULO I
EL PROBLEMA
I.3 Justificacin
La seguridad hoy en da es unos de los temas ms importantes en la ciudadana
por ende nos conllevan a tomar medidas en este caso un Sistema de seguridad
con reconocimiento facial mediante procesamiento digital de imgenes, de tal
manera que solo permita el ingreso a personas que estn registrados y formen parte
de una determinada base de datos.
I.4 Objetivos
I.4.1 General
Disear un sistema de seguridad con reconocimiento facial mediante
procesamiento digital de imgenes.
I.4.2 Especficos
Investigar la situacin actual de la seguridad a nivel general.
Estudiar los distintos tipos de seguridad con reconocimiento facial.
Analizar las diferentes tcnicas para el procesamiento digital de las imgenes
aplicadas en la seguridad.
Implementar un prototipo de sistema de seguridad con reconocimiento facial
mediante el procesamiento digital de Imgenes.
5
CAPITULO II
MARCO TEORICO
II.1 Antecedentes
El reconocimiento facial automatizado es relativamente un concepto nuevo.
Desarrollado en los aos 60, el primer sistema semiautomtico para reconocimiento
facial requera del administrador para localizar rasgos (como ojos, orejas, nariz y
boca) en las fotografas antes de que este calculara distancias a puntos de
referencia en comn, los cuales eran comparados luego con datos de referencia.
En los aos 70 Goldstein, Harmon, & Lesk, usaron 21 marcadores subjetivos
especficos tales como el color del cabello y grosor de labios para automatizar el
reconocimiento facial. El problema con estas soluciones previas era que se
computaban manualmente. En 1988 Kirby & Sirobich aplicaron anlisis de
componentes principales, una tcnica estndar del lgebra lineal, al problema del
reconocimiento facial. Esto fue considerado algo as como un hito al mostrar que
eran requeridos menos de 100 valores para cifrar acertadamente la imagen de una
cara convenientemente alineada y normalizada.
En 1991 Turk & Pentland utilizando las tcnicas Eigenfaces, el error residual poda
ser utilizado para detectar caras en las imgenes - un descubrimiento que permiti
sistemas automatizados de reconocimiento facial en tiempo real fidedignos. Si bien
la aproximacin era un tanto forzada por factores ambientales, cre sin embargo un
inters significativo en posteriores desarrollos de stos sistemas.
La tecnologa inicialmente captur la atencin del pblico a partir de la reaccin de
los medios a una prueba de implementacin en el Super Bowl de la NFL en enero
de 2001, la cual captur imgenes de vigilancia y las compar con una base de
datos de fotoarchivos digitales. Esta demostracin inici un muy requerido anlisis
sobre cmo usar la tecnologa para satisfacer necesidades nacionales, mientras se
tomaban en consideracin las preocupaciones sociales y de privacidad del pblico.
Hoy la tecnologa de reconocimiento facial est siendo utilizada para combatir el
fraude de pasaportes, soporte al orden pblico, identificacin de nios extraviados
y minimizar el fraude en las identificaciones
Por su naturaleza amigable, este tipo de sistemas siguen siendo atractivos a pesar
de la existencia de otros mtodos muy fiables de identificacin personal biomtricos,
como el anlisis de huellas dactilares y el reconocimiento del iris.
Mscara B
Fuente: Tcnicas y Algoritmos Bsicos de Visin Artificial, Grupo
de Investigacin EDMANS
Matriz Resultante
Fuente: Tcnicas y Algoritmos Bsicos de Visin Artificial, Grupo
de Investigacin EDMANS
La dilatacin tiende a unir los objetos entre ellos y rellena los agujeros
en el interior de los mismos. En la figura se observa una imagen
original y su dilatacin.
Erosin Binaria
Dadas las matrices Ay B se denota como erosin a AB, donde A es
la matriz de la imagen y B es la mscara. Se muestra un ejemplo en
la figura una mscara B.
Mscara B
Fuente: Tcnicas y Algoritmos Bsicos de Visin Artificial, Grupo de
Investigacin EDMANS
10
Matriz A
Fuente: Tcnicas y Algoritmos Bsicos de Visin Artificial, Grupo de
Investigacin EDMANS
Matriz Resultante
Fuente: Tcnicas y Algoritmos Bsicos de Visin Artificial, Grupo de
Investigacin EDMANS
Apertura
La apertura es una operacin en la que primero la imagen sometida a
la erosin y luego a la dilatacin, la imagen resultante no ser la
original debido a que estas operaciones no son inversas. En la figura
se puede observar una imagen con ruido y su apertura.
Cierre
El cierre realiza las mismas operaciones que la apertura, pero primero
realiza la dilatacin y luego la erosin. Con esta operacin se suaviza
contorno y remueve agujeros. En la figura se observa un ejemplo de
cierre.
13
Histograma
Fuente: Procesamiento digital de imgenes usando Matlab y Simulink, Erick
Cuevas
14
Imagen Dividida
Fuente: Anlisis de Mtodos de Procesamiento de Imgenes, Alvaro
Surez
la bsqueda del valor mximo del gradiente, sobre cada lnea que
forma la imagen. Cuando un mximo es encontrado, un algoritmo de
trazado trata de seguir el mximo del gradiente alrededor del objeto,
hasta encontrar de nuevo el punto inicial, para luego buscar el prximo
mximo en el gradiente. Para la deteccin de bordes existen diferentes
mtodos u operadores, se describen a continuacin:
1. Operador Roberts
Este operador proporciona una aproximacin de la gradiente, es
ms efectivo en bordes diagonales.
Las mscaras usadas en el operador Roberts se muestran en la
figura.
16
Matrices de Kernell
Fuente: Deteccin de bordes de una imagen, Departamento de Ingeniera
Electrnica
3. Operador de Canny
En 1986 Canny di a conocer un mtodo para la deteccin de
bordes con mejores resultados que los operadores anteriormente
mencionados pero con mayor complejidad computacional. El
mtodo de Canny se basa en tres criterios:
Criterio de deteccin, tiene como finalidad evitar la
eliminacin de bordes importantes y no generar bordes
falsos.
Criterio de localizacin, que establece que la distancia entre
la posicin real y la posicin localizada para el borde debe
ser minimizada.
Criterio de respuesta nica, permite obtener un pixel por
cada punto de borde, es decir no se generan mltiples
bordes. Para realizar el mtodo de canny se siguen los
siguientes pasos:
Suavizado de la imagen: Se obtiene mediante la aplicacin de un
filtro Gaussiano que consiste en aplicar la convolucin como se
muestra en la ecuacin entre la matriz de la imagen y una mscara
determinada.
I = A *B
17
Donde:
I, es la matriz de la imagen resultante.
A,es la matriz de la imagen original.
B, es la mscara.
En la figura se muestran la mscaras tpicas para el filtro gaussiano.
18
Placa Arduino
Fuente: http://media.digikey.com/Photos/Arduino/A000046.jpg
20
21
CAPITULO III
METODOLOGIA
III.1 Modalidad bsica de la investigacin
III.1.1 Investigacin Bibliogrfica
En el presente proyecto se ha hecho una investigacin bibliogrfica ya que se ha
recopilado informacin de libros, tesis de postgrado y tutoriales, relacionados al
tema tanto en teora como en el uso del software. Ampliando as los conocimientos
para el desarrollo del proyecto.
CAPITULO IV
DESARROLLO DE LA PROPUESTA
IV.1 Antecedentes
Principalmente en sistemas de seguridad para el reconocimiento de usuarios. En
estos sistemas se utiliza un lector que define las caractersticas del rostro, y cuando
este solicita el acceso, se verifica comparando los datos obtenidos con la base de
datos. Sin embargo, estos sistemas no son tiles a largo plazo ya que, a medida
que pasan los aos, los rasgos faciales varan y al solicitar el acceso ya no coinciden
con la imagen en la base de datos. Para solucionar este problema se puede utilizar
un algoritmo que interprete el paso de los aos, aunque igualmente sigue sin ser
del todo fiable), o bien, renovar frecuentemente la base de datos.
IV.2 Factibilidad
IV.2.1 Tcnica
El desarrollo del proyecto es tcnicamente factible, debido a que los elementos
electrnicos utilizados para la elaboracin del prototipo planteado son de fcil
adquisicin en el pas.
IV.2.2 Econmica
El desarrollo del proyecto no representa grandes gastos y se encuentran al alcance
del investigador. Los elementos electrnicos y recursos bibliogrficos a utilizar son
fcilmente accesibles en el pas y no ha sido necesaria ninguna exportacin lo cual
implica gastos adicionales.
IV.2.3 Bibliogrfica
La informacin necesaria para el desarrollo del presente proyecto se encuentra
tanto en libros, revistas cientficas, tesis de postgrado, investigaciones y
publicaciones tcnicas relacionadas a los temas. Matlab es uno de los softwares
ms utilizados a nivel de ingeniera, de este existen diversos tutoriales para su uso
tanto en libros como en la web. Con respecto a Arduino est es una plataforma de
hardware libre, del cual existen muchos proyectos desarrollados en la web con su
cdigo y conexiones respectivas.
23
IV.4.1 Software
Para el desarrollo del sistema se requiere software que contenga libreras para
procesamiento de imgenes, fcil de usar, amigable con el usuario y adems de
ser capaz de comunicarse con tarjetas para adquisicin de datos.
IV.4.2 Hardware
Para el funcionamiento del sistema de semaforizacin inteligente son necesarios
los siguientes dispositivos:
Computador: Este debe contar con un procesador de alto nivel para el
sistema trabaje en tiempo real. Debe soportar como mnimo 3 puertos usb,
para conectar las cmaras y la tarjeta de adquisicin.
24
25
26
Para el desarrollo del prototipo se opt por la cmara Klip Xtreme, ya que
es la ms econmica y presenta un distancio focal de 30 mm, ptima para
un ngulo de visin de 57.
Caractersticas de la cmara KLIP La webcam seleccionada es la klip
xtreme kdc-600, se ilustra en la figura.
Las caractersticas principales de esta cmara son:
27
for k=1:M
A(:,k)=st.dataAvg{k}(:);
end
C=A'*A;
5. Multiplicacin de los vectores eigen en pequeas dimensiones aplicados a la
imagen
% vectores eigen en pequeas dimensiones
[veigvec,Deigval]=eig(C);
Vlarge=A*veigvec;
eigenfaces=[];
for k=1:M
c=Vlarge(:,k);
eigenfaces{k}=reshape(c,N,N);
end
x=diag(Deigval);
[xc,xc1]=sort(x,'descend');
z=[eigenfaces{xc1(1)}];
29
wface(tt)=sum(Aface.*eigenfaces{xc1(tt)}(:));
end
for mi=1:M
fsumcur=0;
for(tt=1:nsel)
fsumcur=fsumcur+(wface(tt) - wi(mi,tt)).^2;
end
diferencia(mi)=sqrt(fsumcur)
end
[val in] = min(diferencia)
mindiferencia=min(diferencia)
if (mindiferencia<=190)
axes(handles.axes3);
imshow(st.data{in});
title(['la imagen pertenece a ',st.names{in}]);
com='COM4';
%Inicializo el puerto serial que utilizar
delete(instrfind({'Port'},{com}))
puerto_serial=serial(com)
puerto_serial.BaudRate=9600
warning('off','MATLAB:serial:fscanf:unsuccessfulRead')
%Abro el puerto serial
fopen(puerto_serial);
pause(0.2);
dato=1;
%unicodestr = native2unicode(i); % Convierte el entreo i (0 a 255) a codigo ASCII
fwrite(puerto_serial,dato,'uint8'); % se envia un dato de tipo entero sin signo de 8 bits,
% pause(2);
fclose(puerto_serial);
delete(puerto_serial)
clear puerto_serial
disp('STOP')
end
if (mindiferencia>=200)
axes(handles.axes3);
imshow('ERROR.jpg');
title('EL ROSTRO NO CORRESPONDE');
end
30
31
Donde:
p, es el pxel de la imagen
u, es el umbral determinado por el usuario.
Se debe considerar que esta operacin se repite por cada pxel de la
imagen.
32
33
Ventana de inicio
Fuente: Manual de Interfaz Grfica de Usuario, Barragn Diego.
Entorno de Diseo
Fuente: Manual de Interfaz Grfica de Usuario, Barragn Diego.
34
Entorno de Diseo
Fuente: El Investigador.
35
Los IDs pertenecientes a las cmaras utilizadas para la aplicacin son: [2] y [3], para
obtener ms informacin de los dispositivos se ejecuta el comando.
37
38
Instalar Arduino
Fuente: El Investigador
del
sistema
de
Acceso correcto
39
seguridad
con
Acceso denegado.
40
CAPITULO V
CONCLUSIONES Y RECOMENDACIONES
1. Conclusiones
La investigacin realizada sobre el tema de seguridad con reconocimiento
facial nos ofrece y nueva idea u opcin a tomar en cuenta.
Se determin la constante e intervalo de mnima diferencia para que este
sistema compare de manera minuciosa pixel a pixel y as determinar si
corresponde o no el rostro a una determinada persona.
El prototipo se ve afectado directamente por la luminosidad existente. Esta
es una variable que no se puede controlar ya que esta vara en el trancurso
de las horas y por el clima.
2. Recomendaciones:
Modernizar el sistema seguridad actual por el sistema del prototipo para
mejorar la movilidad vehicular en la ciudad de Ambato. Para que el sistema
funcione de forma ptima la cmara debe presentar la distancia focal menor
a 25mm. Para detectar el cambio de luminosidad se recomienda la
integracin de un sensor de lmenes, cuya seal permita la eleccin
automtica del factor de contraste aplicado en el sistema.
41
BIBLIOGRAFIA
42
ANEXOS
1.- CODIGO DE LA APLICACIN EN MATLAB
function varargout = pds2final(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pds2final_OpeningFcn, ...
'gui_OutputFcn', @pds2final_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function pds2final_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
global video
handles.output = hObject;
guidata(hObject, handles);
video=videoinput('winvideo',2,'YUY2_640x480');
set(video,'FramesPerTrigger',inf);
set(video,'ReturnedColorSpace','rgb');
vid=get(video,'VideoResolution');
imWidth = vid(1);
imHeight = vid(2);
nBands = get(video,'NumberOfBands');
imagen=image(zeros(imHeight, imWidth, nBands),'Parent',handles.axes1);
preview(video,imagen);
function varargout = pds2final_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function capturar_Callback(hObject, eventdata, handles)
global captura
global video
captura=getsnapshot(video);
imwrite(captura,'captura.jpg');
testFaceMic=imread('captura.jpg');
axes(handles.axes1);
image(testFaceMic,'Parent',handles.axes1);
axis off
function guardar_Callback(hObject, eventdata, handles)
guardar=getimage(handles.axes2);
if guardar==0
return
43
end
formatos={'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
[nomb,ruta]=uiputfile(formatos,'GUARDAR IMAGEN');
if nomb==0, return, end
fname=fullfile(ruta,nomb);
imwrite(guardar,fname);
function grises_Callback(hObject, eventdata, handles)
global captura
imgr=rgb2gray(captura);
axes(handles.axes2);
imshow(imgr)
function binario_Callback(hObject, eventdata, handles)
global captura
imBi=im2bw(captura);
axes(handles.axes2);
imshow(imBi)
function negativo_Callback(hObject, eventdata, handles)
global captura
imgr=rgb2gray(captura);
imneg=255-imgr;
axes(handles.axes2);
imshow(imneg)
function cerrar_Callback(hObject, eventdata, handles)
close all
function bordes_Callback(hObject, eventdata, handles)
global captura
filter=[1 2 1;0 0 0;-1 -2 -1];
imgr=rgb2gray(captura);
imout=filter2(filter,imgr);
axes(handles.axes2);
imshow(imout)
function filtrar_Callback(hObject, eventdata, handles)
global captura
imgr=rgb2gray(captura);
imgN=medfilt2(imgr);
axes(handles.axes2);
imshow(imgN)
function umbral_Callback(hObject, eventdata, handles)
global captura
imgr=rgb2gray(captura);
[fil col]=size(imgr);
HUMBRAL=100;
for j=1:fil
for i=1:col
if (imgr(j,i)<=HUMBRAL);
imZ(j,i)=0;
else
imZ(j,i)=255;
end
end
end
axes(handles.axes2);
imshow(imZ)
function grisinvertido_Callback(hObject, eventdata, handles)
global captura
44
imgr=rgb2gray(captura);
[fil col]=size(imgr);
p1=50;
p2=225;
[fil col]=size(imgr);
for j=1:fil
for i=1:col
if (imgr(j,i)<=p1 ||imgr(j,i)>=p2);
imZ(j,i)=255;
else
imZ(j,i)=255-imgr(j,i);
end
end
end
axes(handles.axes2);
imshow(imZ)
function PROCESAR_COMPARAR_Callback(hObject, eventdata, handles)
N=50; %tamao de la imagen
M=1;
%numero de rostros
scrsz=get(0,'ScreenSize');
ancho=scrsz(3);
alto=scrsz(4);
ancho=round(ancho/3);
alto=round(alto/2)-40;
% cargar la imagen y redimencionar
puel1=imread('eigen/puel1.jpg');
puel1=rgb2gray(puel1);
puel1=imresize(puel1,[N N]);
MC(:,:,1)=puel1;
st.names={'puel1'};
st.data{1}=puel1;
avImg=zeros(N);
for k=1:M
st.data{k} = im2single(st.data{k});
avImg = avImg+(1/M)*st.data{k};
end
% Resta el promedio a cada una de las imagenes
for k= 1:M
st.dataAvg{k}=st.data{k}-avImg;
end
z=[st.dataAvg{1}; %st.dataAvg{3} st.dataAvg{4} st.dataAvg{5}
st.dataAvg{6} ];
ZC(:,:,1)=st.dataAvg{1};
% autovectores matriz covarianza
45
A=zeros(N*N,M);
for k=1:M
A(:,k)=st.dataAvg{k}(:);
end
C=A'*A;
% vectores eigen en pequeas dimenciones
[veigvec,Deigval]=eig(C);
Vlarge=A*veigvec;
eigenfaces=[];
for k=1:M
c=Vlarge(:,k);
eigenfaces{k}=reshape(c,N,N);
end
x=diag(Deigval);
[xc,xc1]=sort(x,'descend');
z=[eigenfaces{xc1(1)}];
testFaceMic=imread('captura.jpg');
testFaceMic=rgb2gray(testFaceMic);
testFaceMic=imresize(testFaceMic,[N N]);
testFaceMic=im2single(testFaceMic);
nsel=1;
for mi=1:M
for k=1:nsel
wi(mi,k)=sum(A(:,mi).*eigenfaces{xc1(k)}(:));
end
end
Aface=testFaceMic(:)-avImg(:);
for tt=1:nsel
wface(tt)=sum(Aface.*eigenfaces{xc1(tt)}(:));
end
for mi=1:M
fsumcur=0;
for(tt=1:nsel)
fsumcur=fsumcur+(wface(tt) - wi(mi,tt)).^2;
end
diferencia(mi)=sqrt(fsumcur)
end
[val in] = min(diferencia)
mindiferencia=min(diferencia)
if (mindiferencia<=190)
axes(handles.axes3);
imshow(st.data{in});
title(['la imagen pertenece a
',st.names{in}]);
com='COM4';
%Inicializo el puerto serial que utilizar
delete(instrfind({'Port'},{com}))
puerto_serial=serial(com)
puerto_serial.BaudRate=9600
46
warning('off','MATLAB:serial:fscanf:unsuccessfulRead')
end
if (mindiferencia>=200)
axes(handles.axes3);
imshow('ERROR.jpg');
title('EL ROSTRO NO CORRESPONDE');
end
% --- Executes on button press in limpiar.
function limpiar_Callback(hObject, eventdata, handles)
% hObject
handle to limpiar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
cla reset
global video
handles.output = hObject;
guidata(hObject, handles);
video=videoinput('winvideo',2,'YUY2_640x480');
set(video,'FramesPerTrigger',inf);
set(video,'ReturnedColorSpace','rgb');
vid=get(video,'VideoResolution');
imWidth = vid(1);
imHeight = vid(2);
nBands = get(video,'NumberOfBands');
imagen=image(zeros(imHeight, imWidth, nBands),'Parent',handles.axes1);
preview(video,imagen);
47
48
49
INDICE
Contenido
Pg.
Introduccin
CAPITULO I: El problema
I.1 Tema de investigacin
I.3 Justificacin
I.4 Objetivos
I.4.1 objetivo General
13
19
20
21
22
22
22
22
22
50
23
IV.2 Factibilidad
IV.2.1 Tcnica
23
IV.2.2 Econmica
23
IV.2.3 Bibliogrfica
23
24
24
24
24
25
25
26
28
31
34
36
37
41
Bibliografa
43
Anexos
44
51
39