Professional Documents
Culture Documents
Además se puede apreciar las opciones de encender capturar y apagar la cámara, las cuales se
ha configurado de la siguiente manera.
% Boton Encender camara
function pushbutton2_Callback(hObject, eventdata, handles)
global vid
set(handles.axes1,'visible','on');
axes(handles.axes1);
vid=videoinput('winvideo',1);
vid.ReturnedColorSpace='rgb';
vidRes=get(vid,'VideoResolution');
nBanda=get(vid,'NumberOfBands');
hImage=image(zeros(vidRes(2),vidRes(1),nBanda));
preview(vid,hImage);
% boton capturar.
function pushbutton3_Callback(hObject, eventdata, handles)
global vid
global BBOX
set(handles.axes2,'Visible','On');%pantalla
set(handles.popupmenu1,'Visible','On');%opciones de imagen
set(handles.pushbutton6,'Visible','On');%limpiar
set(handles.pushbutton7,'Visible','On');%procesar
foto=getsnapshot(vid);%capturar foto
facedetector=vision.CascadeObjectDetector(); %barrido de la imagen
BBOX=step(facedetector,foto);%encuentra el rostro
axes(handles.axes2);
imshow(foto);
rectangle('position',BBOX(1,:),'edgecolor','b','linewidth',2);%dibuja
recuadro
folder='D:\INFORMACION\DOCUMENTOS\MATLAB\ejemplo';
imwrite(foto,fullfile(folder,'imagen_in.jpg'));
Es importante para este proyecto el uso de variables globales ya que usaremos otra pantalla
de opciones y será requisito necesario los datos obtenidos por la primera pantalla.
También se ha hecho necesario usar funciones para llamadas a los objetos usados en la
interfaz guide del programa como son los handles.
Tabien ofrece un botón de limpiar si la captura no es la mas optima o no se visualiza muy bien.
% boton limpiar
function pushbutton6_Callback(hObject, eventdata, handles)
logo=imread('io.jpg');
axes(handles.axes1);
imshow(logo);
axes(handles.axes2)
imshow(logo);
set(handles.pushbutton6,'Visible','off');
set(handles.popupmenu1,'Visible','off');
set(handles.pushbutton7,'Visible','off');
set(handles.edit1,'Visible','off');
En la segunda Pantalla o a la que se puede acceder mediante el botón de crear un nuevo
usuario se procede a registrar nuevos usuarios donde nos permite tomar una foto y guardar en
la base de datos mediante un nombre y este a su vez en la base de datos tomara solo un área
de trabajo en cual será tomado para las respectivas comparaciones, las dimensiones sera de
58x74
% --- boton crear usuario
function pushbutton1_Callback(hObject, eventdata, handles)
close(Registro);
BaseD
input_dir='D:\INFORMACION\DOCUMENTOS\MATLAB\ejemplo\Banco';
image_dimensiones=[74 58];%se estableces que las medidas sera
74x58
filenames=dir(fullfile(input_dir,'*.jpg')); %lista y lee que hay
en la carpeta
if n==1
images=zeros(prod(image_dimensiones),num_images); % se
establece el vector contenedor
end
images(:,n)=img(:); %se guarda en un vector correspondiente
end
%normalizamos+++++++++++++++++++++++++++++++++++++++++++++++++++++
input_work=imread('ejemplo\area_trabajo.jpg');
input_work=imresize(input_work,[74 58]); %se adapta el area de
trabajo
input_work=im2double(input_work);% realiza la comparacion
%++++++++++++++++++++++++++++++++++++++++
else
foto_=imread('incognito.jpg');
axes(handles.axes1);
imshow(foto_);
texto=sprintf('La semejanza es mínima, esta persona no esta
registrada');
set(handles.edit1,'String',texto);
set(handles.edit1,'Visible','On');
end
Esto se puede dar a la necesidad de registrarse si el usuario no tiene una cámara y cuente con
fotos capturadas por otros dispositivos.
global BBOX
global work_area
[filename path] = uigetfile(('*.jpg'),'Abrir Imagen')
if isequal(filename,0)
return
else
folder='D:\INFORMACION\DOCUMENTOS\MATLAB\ejemplo';
foto=imread(strcat(path,filename));
imwrite(foto,fullfile(folder,'imagen_in.jpg'));%sobre escribe a la
foto
facedetector=vision.CascadeObjectDetector();
BBOX=step(facedetector,foto);
set(handles.axes5,'Visible','On');%pantalla
axes(handles.axes5);
imshow(foto)
rectangle('position',BBOX(1,:),'edgecolor','b','linewidth',3)
set(handles.text3,'Visible','On');%static nombre
set(handles.text4,'Visible','On');%static codigo
set(handles.edit1,'Visible','On');%text edit1
set(handles.edit2,'Visible','On');%text edit2
set(handles.pushbutton20,'Visible','On');% guardar
imagen_gray=rgb2gray(foto);
recorte=imcrop(imagen_gray,BBOX(1,:));
work_area=imresize(recorte,[74 58]);
end
Y también el botón de guardar este es muy importante ya que es aquí donde se dan uso a las
variables globales anterior mente mencionada, este botón toma la información obtenida por
las otras opciones y procede a guardar en la base de datos.
boton guardar
function pushbutton20_Callback(hObject, eventdata, handles)
global work_area
global BBOX
folder='D:\INFORMACION\DOCUMENTOS\MATLAB\ejemplo\Banco';
nombre=get(handles.edit1,'String');
if isempty(nombre)
msj=questdlg('Ingrese nombre de Usuario','Mensaje','OK','OK');%
question dialogo
if strcmp (msj,'OK')%%compara los espacios de cadena ok y ok
return;
end
end
nombre=char(nombre); %concatena cadena horizontal
name=strcat(nombre,'.jpg')
imwrite(work_area,fullfile(folder,name));
msj=questdlg('Se guardo correctamente','Mensaje','Ok','Ok');
close(BaseD);
Registro;