Sie sind auf Seite 1von 15

TEMA:

APRENDIZAJE DE UNA RED NEURONAL IDENTIFICACIÓN DE GESTOS


FACIALES

1. OBJETIVOS

1.1 OBJETIVO GENERAL

Implementar una red neuronal que aprenda a identificar gestos faciales como feliz, triste entre
otros.

1.2 OBJETIVOS ESPECIFICOS

 Crear una arquitectura para que la neurona aprenda de una forma más eficiente.
 Investigar los gestos faciales producidos por una persona en diferentes estados de
ánimo.

2. INTRODUCCION

Desde la década de los 40, en la que nació y comenzó a desarrollarse la informática, el


modelo neuronal la ha acompañado. De hecho, la aparición de los computadores digitales y el
desarrollo de las teorías modernas acerca del aprendizaje y del procesamiento neuronal se
produjeron aproximadamente al mismo tiempo, a finales de los años cuarenta.

Desde entonces hasta nuestros días, la investigación neurofisiológica y el estudio de sistemas


neuronales artificiales (ANS, Artificial Neural Systems) han ido de la mano. Sin embargo, los
modelos de ANS no se centran en la investigación neurológica, si no que toma conceptos e

1
ideas del campo de las ciencias naturales para aplicarlos a la resolución de problemas
pertenecientes a otras ramas de las ciencias y la ingeniería.

Podemos decir que la tecnología ANS incluye modelos inspirados por nuestra comprensión del
cerebro, pero que no tienen por qué ajustarse exactamente a los modelos derivados de dicho
entendimiento.

Los primeros ejemplos de estos sistemas aparecen al final de la década de los cincuenta. La
referencia histórica más corriente es la que alude al trabajo realizado por Frank Rosenblatt en
un dispositivo denominado perceptrón. Hay otros ejemplos, tales como el desarrollo del
Adaline por el profesor Bernard Widrow.

Durante todos estos años, la tecnología ANS no siempre ha tenido la misma consideración en
las ramas de la ingeniería y las ciencias de la computación, más ansiosas de resultados que las
ciencias neuronales. A partir de 1969, el pesimismo debido a las limitadas capacidades del
perceptrón hizo languidecer este tipo de investigación.

A principios de los 80, por un lado Hopfield y sus conferencias acerca de la memoria
autoasociativa y por otro lado la aparición del libro Parallel Distributed Processing (PDP),
escrito por Rumelhart y McClelland reactivaron la investigación en el campo de las redes
neuronales. Hubo grandes avances que propiciaron el uso comercial en campos tan variados
como el diagnóstico de enfermedades, la aproximación de funciones o el reconocimiento de
imágenes.

3. MARCO TEORICO
3.1 Redes Neuronales Artificiales con Matlab

Las redes neuronales artificiales son una técnica de aprendizaje y procesamiento automático
inspirada en el funcionamiento del cerebro humano. Podemos definir las redes neuronales
artificiales como una estructura de procesamiento paralelo masivo constituida por unas

2
unidades muy sencillas (denominadas neuronas), que tienen la capacidad de almacenar
conocimiento experimental y ponerla a disposición para su uso.

 Las redes neuronales artificiales se asemejan a las redes neuronales biológicas en


varios aspectos:
 Las neuronas son elementos simples y altamente interconectados (aunque las neuronas
artificiales son mucho más simples).

Las conexiones entre las neuronas determinan la función de la red. Estas conexiones,
conocidas como pesos (pesos sinápticos), se utilizan para almacenar el conocimiento
adquirido.

El conocimiento es adquirido a partir de su entorno mediante un proceso de aprendizaje.

3.1.1 Arquitectura

La arquitectura (o topología) de la red hace referencia a la disposición de las neuronas en la


red. Las neuronas se organizan formando capas, de modo que la red neuronal puede consistir
en una o más capas de neuronas.

Cada neurona recibe un conjunto de entradas multiplicadas por su interconexión (peso), que
son sumados y operados por una función de transferencia (o función de activación) antes de
transmitirse a la siguiente capa o como salida de la red.

Fig. 1 Red con una sola capa, N elementos de capa de entrada y S neuronas.

3
La capa que contiene las salidas de la red se conoce como capa de salida y el resto de capas
como capas ocultas.

Es habitual clasificarlas por su arquitectura. Así nos encontramos con:

 Redes con propagación hacia adelante


 Redes con retro propagación

3.1.2 Aprendizaje

En numerosas ocasiones, se suelen también clasificar en función del tipo de aprendizaje que
realizan. Así, distinguimos entre:

Aprendizaje supervisado, donde un conjunto conocido de datos de entrada-salida se utiliza


para iterativamente ajustar los pesos de la red.

Aprendizaje no supervisado, en donde únicamente se disponen de datos de entrada y una


función de coste a minimizar.

Aprendizaje reforzado, situado a medio camino entre el aprendizaje supervisado y no


supervisado. En este aprendizaje la información proporcionada a la red es mínima, limitándose
a indicar si la respuesta de la red es correcta o incorrecta.

Fig. 2 proceso de ajuste de peso en el aprendizaje supervisado

3.1.3 Aplicaciones

Las redes neuronales artificiales han sido y son ampliamente utilizadas en muchos campos:
Aero espacio (pilotos automáticos, simulaciones de trayectorias de vuelo, detección de fallo de
componentes), automoción (sistemas de guiado automático, controladores, análisis de la
garantía), finanzas (lectores automáticos de cheques, solicitudes de crédito, detección de

4
fraude, calificación de bonos), defensa (seguimiento de objetos, reconocimiento facial,
eliminación de ruido), medicina (análisis de células cancerígenas, diseño de prótesis, análisis
de electroencefalografía y electrocardiograma), telecomunicaciones (reconocimiento y
compresión de voz, compresión de imágenes, traducción en tiempo real de un idioma), etc.

4. DESARROLLO
Reconocimiento facial mediante visión artificial
El reconocimiento facial es el proceso de identificación de una o varias personas en imágenes
o vídeos mediante análisis y comparación de patrones. Los algoritmos normalmente extraen
las características faciales y las comparan con una base de datos para obtener la mejor
coincidencia.
Es una parte importante de muchos sistemas biométricos, de seguridad y de vigilancia, así
como de sistemas de indexación de imágenes y vídeos.

Pasos en el flujo de trabajo


Aprovecha visión artificial para extraer información discriminada de imágenes faciales
y reconocimiento de patrones o técnicas de Machine Learning para modelar la apariencia de
las caras y para clasificarlas.
Se pueden utilizar técnicas de visión artificial para realizar extracción de características para
codificar la información discriminada necesaria para reconocimiento facial como un vector de
características compactas utilizando técnicas y algoritmos como
 Extracción de características locales densas con descriptores SURF, BRISK o FREAK
 Histograma de gradientes orientados
 Distancia entre zonas faciales detectadas como ojos, narices o labios

5
Técnicas de Machine Learning se pueden aplicar para extraer características para realizar
reconocimiento facial o clasificación mediante:
 Técnicas de aprendizaje supervisado como máquinas de vector soporte (SVM) y
árboles de decisión
 Métodos de aprendizaje ensamblado
 Redes neuronales profundas

El proceso consta de cuatro módulos principales:

 Detección de la cara: detecta que hay una cara en la imagen, sin identificarla. Si se
trata de un video, también podemos hacer un seguimiento de la cara. Proporciona la
localización y la escala a la que encontramos la cara.

 Alineación de la cara: localiza las componentes de la cara y, mediante


transformaciones geométricas, la normaliza respecto propiedades geométricas, como el
tamaño y la pose, y fotometricas, como la iluminación. Para normalizar las imágenes
de caras, se pueden seguir diferentes reglas, como la distancia entre las pupilas, la
posición de la nariz, o la distancia entre las comisuras de los labios. También se debe
definir el tamaño de las imágenes y la gama de colores. Normalmente, para disminuir
la carga computacional del sistema, se acostumbra a utilizar imágenes pequeñas en
escala de grises. A veces también se realiza una ecualización del histograma.

 Extracción de características: proporciona información para distinguir entre las caras


de diferentes personas según variaciones geométricas o fotométricas.

 Reconocimiento: el vector de características extraído se compara con los vectores de


características extraídos de las caras de la base de datos. Si encuentra uno con un
porcentaje elevado de similitud, nos devuelve la identidad de la cara; si no, nos indica
que es una cara desconocida.

6
Los resultados obtenidos dependen de las características extraídas para representar el patrón de
la cara y de los métodos de clasificación utilizados para distinguir los rostros, pero para extraer
estas características apropiadamente, hace falta localizar y normalizar la cara adecuadamente.

5. PROCEDIMIETO

7
8
6. CONCLUSIONES

 La digitalización es imprescindible para poder tratar la imagen en un computador y


supone el muestreo y cuantificación de la imagen. El muestreo es la división que se
realiza sobre dos dimensiones espaciales y genera los pixeles. La elección del número
de pixeles de la imagen y numero de niveles de gris dependerá de la precisión que
requiera la aplicación y la capacidad de almacenamiento y procesamiento disponibles.

 A diferencia de trabajar en scrip el momento que se intenta reproducir un archivo de


audio desde una interfaz de usuario no se puede realizar directamente desde la interfaz
de consola, se tuvo que hacer el uso de una librería de la interfaz propia de Matlab para
de esta manera poder corroborar nuestros resultados.

7. BIBLIOGRAFIA
https://es.mathworks.com/discovery/redes-neuronales.html

http://avellano.fis.usal.es/~lalonso/RNA/index.htm
https://www.frro.utn.edu.ar/repositorio/catedras/quimica/5_anio/orientadora1/monograias/mati
ch-redesneuronales.pdf

8. ANEXOS

GUIDE
function varargout = guide(varargin)

% GUIDE MATLAB code for guide.fig


% GUIDE, by itself, creates a new GUIDE or raises the existing
% singleton*.
%
% H = GUIDE returns the handle to a new GUIDE or the handle to
% the existing singleton*.
%
% GUIDE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in GUIDE.M with the given input arguments.
%
% GUIDE('Property','Value',...) creates a new GUIDE or raises the
% existing singleton*. Starting from the left, property value pairs
are
% applied to the GUI before guide_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to guide_OpeningFcn via varargin.
%

9
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help guide

% Last Modified by GUIDE v2.5 05-Aug-2018 20:28:27

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @guide_OpeningFcn, ...
'gui_OutputFcn', @guide_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
% End initialization code - DO NOT EDIT

% --- Executes just before guide is made visible.


function guide_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to guide (see VARARGIN)

% Choose default command line output for guide


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes guide wait for user response (see UIRESUME)


% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = guide_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

10
% Get default command line output from handles structure
varargout{1} = handles.output;

% --- Executes on button press in em1.


function em1_Callback(hObject, eventdata, handles)
clear cam
cam = webcam(1)
for idx = 1:20
img = snapshot(cam);
%image(img);
imwrite(img,'feliz.jpg');
if(idx==19)
imwrite(img,'feliz.jpg');
end
end
img = imread('feliz.jpg');
img = imresize(img, 0.5);
guide(handles.axes1)
I = rgb2gray(img);
subplot (4,3,4)

%hist = imhist(I)

detector1 = vision.CascadeObjectDetector;%('Mouth');
detector1.MergeThreshold = 5;
box1 = step(detector1, I);

out1 = insertObjectAnnotation(I,'Rectangle',box1,'boca');
imshow(out1);
for i = 1:size(box1,1)
J= imcrop(out1,box1(i,:));
end
J = imresize (J, [110 110]);
J = J *1.65;
J=imagerbg(J);
imwrite(J,'feliz_boca.jpg');
clear cam
% --- Executes on button press in em2.
function em2_Callback(hObject, eventdata, handles)
clear cam
cam = webcam(1)

for idx = 1:20


img = snapshot(cam);
%image(img);
if(idx==19)
imwrite(img,'triste.jpg');
end
end
img = imread('triste.jpg');
img = imresize(img, 0.5);
guide(handles.axes1)
I = rgb2gray(img);
subplot (4,3,5);

11
detector1 = vision.CascadeObjectDetector;%('Mouth');
detector1.MergeThreshold = 5;
box1 = step(detector1, I);

out1 = insertObjectAnnotation(I,'Rectangle',box1,'boca');
imshow(out1);
for i = 1:size(box1,1)
J= imcrop(out1,box1(i,:));
end
J = imresize (J, [110 110]);
J = J *1.65;
J=imagerbg(J);
imwrite(J,'triste_boca.jpg');
clear cam

% --- Executes on button press in em3.


function em3_Callback(hObject, eventdata, handles)
clear cam
cam = webcam(1)

for idx = 1:20


img = snapshot(cam);
%image(img);
if(idx==19)
imwrite(img,'enojado.jpg');
end
end
img = imread('enojado.jpg');
img = imresize(img, 0.5);
guide(handles.axes1)
I = rgb2gray(img);
subplot (4,3,6);
imshow(I);

detector1 = vision.CascadeObjectDetector;%('Mouth');
detector1.MergeThreshold = 5;
box1 = step(detector1, I);

out1 = insertObjectAnnotation(I,'Rectangle',box1,'boca');
imshow(out1);
for i = 1:size(box1,1)
J= imcrop(out1,box1(i,:));
end
J = imresize (J, [110 110]);
J = J *1.65;
J=imagerbg(J);
imwrite(J,'enojado_boca.jpg');
clear cam
% --- Executes on button press in cap.
function cap_Callback(hObject, eventdata, handles)
clear cam
cam = webcam(1)

12
for idx = 1:20
img = snapshot(cam);
%image(img);
if(idx==19)
imwrite(img,'muestra.jpg');
end
end
img = imread('muestra.jpg');
img = imresize(img, 0.5);
guide(handles.axes1)
I = rgb2gray(img);
subplot (4,3,11)

detector1 = vision.CascadeObjectDetector;%('Mouth');
detector1.MergeThreshold = 5;
box1 = step(detector1, I);

out1 = insertObjectAnnotation(I,'Rectangle',box1,'boca');
imshow(out1);
for i = 1:size(box1,1)
J= imcrop(out1,box1(i,:));
end
J = imresize (J, [110 110]);
J = J *1.65;
J=imagerbg(J);;
imwrite(J,'muestra_boca.jpg');

p=double(imread('muestra_boca.jpg'));
%p = imresize(p, 0.25);
%grisp=double(rgb2gray(p));

muestraNeurona=[p(:)]

y=cris6(muestraNeurona);
y
date= round (y)

if date(1)==1
disp('Feliz');
set(handles.text4,'String','Em1')
end
if date(2)==1
disp('Enojado');
set(handles.text4,'String','Em3')
end
if date(3)==1
disp('Triste');
set(handles.text4,'String','Em2')
end
clear cam

function edit1_Callback(hObject, eventdata, handles)

13
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text


% str2double(get(hObject,'String')) returns contents of edit1 as a
double

% --- Executes during object creation, after setting all properties.


function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
clear cam

% --- Executes during object creation, after setting all properties.


function axes7_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
axes(hObject);
imshow('logo.png')
% Hint: place code in OpeningFcn to populate axes7

% --- Executes during object creation, after setting all properties.


function axes3_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes3

MATRIZ ENTRADA
grisx=double(imread('feliz_boca.jpg'));
% grisx=imagerbg(x);
% figure, imshow(grisx);
%x = imresize(x, 0.25);
%grisx=double(rgb2gray(x));
figure(1)
subplot(1,3,1);
imshow(grisx)
grisy=double(imread('enojado_boca.jpg'));
%y = imresize(y, 0.25);
%grisy=double(rgb2gray(y));
figure(1)

14
subplot(1,3,2);
imshow(grisy)

grisz=double(imread('triste_boca.jpg'));
%z = imresize(z, 0.25);
%grisz=double(rgb2gray(z));
figure(1)
subplot(1,3,3);
imshow(grisz)
grism=imread('muestra_boca.jpg');
%z = imresize(z, 0.25);
%grism=double(rgb2gray(m));

Entradasyy=[grisx(:),grisy(:),grisz(:)]

Muestrayy=[grism(:)]

Salidasyy=[1,0,0;
0,1,0;
0,0,1;]

LLAMAR NEURONA

m=double(imread('enojado_boca.jpg'));
%grism=double(rgb2gray(m));

Muestrayy=[m(:)]
y=CRIS5(Muestrayy);
round (y)

15