其他分享
首页 > 其他分享> > 【人脸识别】基于GUI BP神经网络人脸识别(含识别率)【Matlab 891期】

【人脸识别】基于GUI BP神经网络人脸识别(含识别率)【Matlab 891期】

作者:互联网

一、BP神经网络简介

1 BP神经网络概述
1.1 BP神经网络的内涵
BP神经网络是神经网络的一种经典结构,其结构简单、训练简单,是学习神经网络的一种输入算法,包含一个特定的模型(神经网络)和一个特定的训练算法[1,2,3]。神经网络被描述为多层神经元的叠加。外部输入首先通过连接传递给一组神经元。训练后,一些神经元之间的连接权值会很低,这意味着这些神经元之间的通信强度很低。通常使用“层”来表示一组神经元,最后一层神经元的输出是一维向量,可以代表分类任务中的特定类别。

1.2 BP神经网络原理
制造机器和机器控制是BP神经网络应用的最终目标。神经元在接收和处理信号后,会将结果传递给邻近的特定神经元,并建立一个神经网络来执行特定的任务:
layer_i=(layer_Ⅰ_1, layer_Ⅰ_2, …, layer_I_j, …, layer_I_K__) 。
layer_I-1层的神经元接收并处理信号后, 将信号传输到layer_I层的每个神经元。layer-i中的每个神经元都被接收并处理以产生新的信号。人工神经元实际上是一个逻辑回归模型, 其能输入线性组合并与SIGMOD函数映射, 以获得像“概率”的值。将x_2中最大的元素赋予值1,而其他元素被赋予值0,获得类标签。

1.3 BP神经网络技术在人脸识别中的应用
BP神经算法的核心是通过网络的误差函数计算出一个极小值,确定函数的权重分布,让神经网络的收敛处于一个相对平衡的状态,这样在网络接收到未知输入的时候,可以通过适当的输出来维持网络的稳定。BP神经元应用到人脸识别中,需要经过以下流程:第一,需要在人脸识别的样本特征中求出协方差矩阵,得出协方差矩阵的特征值,并计算出相应的特征向量,选取较大的特征根,定下特征向量,将第一步求出的特征向量与原始数据计算出一个乘积;第二,得到训练样本的主成分后,进入输入层进行训练,截取未知人脸的样本数据,与特征向量相乘进行分类识别,就能得到未知人脸的类别。

2 人脸识别技术
人脸识别算法利用卷积神经网络对大量的人脸图像进行深度学习,利用输入图像区分不同人脸的特征向量。在人脸识别算法中,每个人脸都被赋予了一组对应的特征值,机器从同一人的不同照片中提取特征值,并设定一个阈值,将其作为判断是否通过的标准。
人脸识别的应用场景很多。例如,对于智能相册的照片分类,其技术原理是将图像存储在与图像像素点阵相对应的数字矩阵中, 每个像素用一个数值的RGB表示, 无论它出现在图像中的什么位置, 它在数值分布上都会表现出一定的特征, 将所有与人脸识别相关的问题转化为基于数值矩阵的分类或回归问题。采用机器学习的方法定位人脸特征点,能够为每幅图像标记相应的特征点。人脸识别过程有4个关键步骤,即人脸检测、人脸对齐、人脸编码和人脸匹配。
(1)人脸检测。人脸检测的目的是找出人脸在图像中的位置。当在一张图片中发现一个人脸时,不管是什么样的人脸信息, 机器都会标记出人脸的坐标信息, 或者将人脸切割, 用HOG检测出人脸的位置, 然后计算出图像中的像素梯度。机器算法能够将图像转化为HOG, 进而得到人脸的位置信息。(2) 人脸对齐。人脸对齐是将不同角度的人脸图像对齐到同一标准的人脸形状中。机器算法首先会定位人脸上的特征点,然后通过几何变换将特征点对齐。
(3)人脸编码。人脸编码指将人脸图像的像素值转换为紧凑、可分辨的特征向量。在理想情况下,同一主题的所有面部信息都应该映射到相似的特征向量。
(4)人脸匹配。在人脸匹配模块构建中,将两个模板进行比对,度量两个人脸之间的相似度,判断两个人脸是否属于同一个人。

3 BP神经网络在人脸识别中的应用流程
3.1确定人脸识别的位置点

在进行人脸识别时需要确定机器算法,通过人脸数据库进行不同人脸形象的采集和抽取,确定特征点坐标,将左右眼的瞳孔、左右嘴角、眼眉外端、内端、鬓角鼻孔等20个特征点进行特征值定位,确定瞳孔、嘴角、两眉间的距离等关键信息,并将数据存储在处理器中。

3.2 预处理数据
第一,将人脸特征进行预处理处理后的样本作为原始样本,通过原始样本中数据采集的特征点确定出特征根,用特征根和原始样本数据进行比对。第二,从样本集中取一个样本(xp,yp),并将xp输入网络中,其中xp是输入向量,yp是期望输出向量。

3.3 人脸样本检验
第一,将BP神经网络算法中确定的神经元进行输入检验,将样本数据库中的数据与输入的数据进行对比。第二,调用MAT LAB神经网络工具箱, 构建BP神经网络, 在函数new ff中建立一个可训练的前馈网络。查准率和查全率的算法为:
[Precision l, Recall 1] =Precision_Recall(B, num_train) ;
disp(‘训练集查准率为:) , disp(Precision 1) ;
disp(‘训练集查准率为:) , disp(Recall 1) ;
disp(’------测试集(查准率和查全率)------’)
将对比图片和数据库中的图片进行比对,并确定判断的图片是否和选择的图片相匹配,如图1所示。
在这里插入图片描述
图1 BP神经网络检验对比

4 人脸识别技术应用中存在的问题及思考
“刷脸”逐渐成为新时期生物识别技术应用的主要领域,然而随之而来的风险问题也亟待解决。人脸识别包含实时检测攻击的视频人脸识别系统,如一个人眨眼和呼吸的视频,可以用来模拟验证,但是如果被不法分子构造并渲染一个三维建模, 将能欺骗人脸识别系统。2017年曾经曝出人脸识别只需要一张正面照片和换脸APP就能破解的问题。因此, 人脸识别监控技术应与公共设施的安全保密性密切结合,不允许随意增加使用权限。当下研究人员已经研究了各种人脸识别攻击技术,如活体识别、红外识别等,事实上更要加强法律规范。对于那些图谋不轨、试图钻技术漏洞的人,不仅要做好技术抵御,还要保留不法行为的证据,以法律约束公民的个人行为,确保公众的基本权益。
备注:简介部分仅作为理论参考,与本文程序和运行结果略有出入。

二、部分源代码

function varargout = recognize(varargin)
% RECOGNIZE MATLAB code for recognize.fig
%      RECOGNIZE, by itself, creates a new RECOGNIZE or raises the existing
%      singleton*.
%
%      H = RECOGNIZE returns the handle to a new RECOGNIZE or the handle to
%      the existing singleton*.
%
%      RECOGNIZE('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in RECOGNIZE.M with the given input arguments.
%
%      RECOGNIZE('Property','Value',...) creates a new RECOGNIZE or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before recognize_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to recognize_OpeningFcn via varargin.
%
%      *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 recognize

% Last Modified by GUIDE v2.5 16-May-2021 16:52:46

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @recognize_OpeningFcn, ...
                   'gui_OutputFcn',  @recognize_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 recognize is made visible.
function recognize_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 recognize (see VARARGIN)

% Choose default command line output for recognize
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes recognize wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = recognize_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)

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


% --- Executes on button press in input.
function input_Callback(hObject, eventdata, handles)
FastBPfacedetection(); %运行FastBPfacedetection程序,进行预置神经网络的训练
load Mat\accuracy;   % 加载accuracy变量到工作区,它表示该预置神经网络的准确率
set(handles.acu,'String',accuracy); %将accuracy显示在文本框内
msgbox('数据导入成功','提示');
% hObject    handle to input (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in ceshi.
function ceshi_Callback(hObject, eventdata, handles)
% set(handles.uipanel1,'visible','off');
[filename, pathname]=uigetfile({'*.bmp';'*.png';'*.jpg'},'打开测试图片');
% if filename~=0
%     fullfile([pathname filename]);
% %     load([pathname filename]);
% end

I=imread([pathname filename]);
axes(handles.axes4);
imshow(I);
save('Mat/I', 'I')
msgbox('人脸导入成功','提示');
% handles.I=I;
% guidata(hObject,handles);
% setappdata(0,'I',I);
% hObject    handle to ceshi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in result.
function result_Callback(hObject, eventdata, handles)
%           load Mat\test; 
          load Mat\I; 
          load Mat\meanVec; 
          load Mat\V; 
          load Mat\immin; 
          load Mat\average_face;      
face_train_projection=zeros(49,40*5);
for i=1:40*5
    %映射训练集图像
    Coefficient1=V'*immin(:,i);  %k*d x d*1=k*1;
    face_train_projection(:,i)=Coefficient1;
end         
         
B=I(1:112*92);
test=double(B')-average_face;
TestProjectedImage = (V'*test);
Euc_dist = [];
for p=1:length(face_train_projection)
      temp=normest(TestProjectedImage-face_train_projection(:,p));
      Euc_dist = [Euc_dist temp];
end
[Euc_dist_min , Recognized_index] = min(Euc_dist);%Recognized_index记录最小距离的行号
OutputClass = strcat('s',int2str((Recognized_index-1)/5),'class');
axes(handles.axes6);
imshow(reshape(((immin(:,Recognized_index))'+average_face'),112,92),[]);
title(strcat('识别人脸,类别:',int2str((Recognized_index-1)/5)));
msgbox('人脸识别完成','提示');
%          b=test(1:10304);
%          b=double(b);
%          TestFace=b;
%          [m n] = size(TestFace);
%          TestFace = (TestFace-repmat(meanVec, m, 1))*V; % 经过pca变换降维
%          TestFace = scaling(TestFace,1,A0,B0);
%          X = TestFace;
%          Z=sim(net,X');
%          [zi,index2]=max(Z);
%          addr=strcat('G:\硕士论文\作业\模式识别\FaceRecognitionPCA\FaceRecognitionPCA\faces','\s',num2str(int2str((index2-1)/5)),'/',num2str(index2),'.bmp');
%          res=imread(addr);
%          axes(handles.axes6);
%          imshow(res);
         %         a=imread(addr);

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



function acu_Callback(hObject, eventdata, handles)

% hObject    handle to acu (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 acu as text
%        str2double(get(hObject,'String')) returns contents of acu as a double

三、运行结果

在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]孟逸凡,柳益君.基于PCA-SVM的人脸识别方法研究[J].科技视界. 2021,(07)
[6]张娜,刘坤,韩美林,陈晨.一种基于PCA和LDA融合的人脸识别算法研究[J].电子测量技术. 2020,43(13)
[7]陈艳.基于BP神经网络的人脸识别方法分析[J].信息与电脑(理论版). 2020,32(23)
[8]戴骊融,陈万米,郭盛.基于肤色模型和SURF算法的人脸识别研究[J].工业控制计算机. 2014,27(02)

标签:891,人脸识别,gui,神经网络,识别率,hObject,handles,人脸
来源: https://blog.csdn.net/m0_54742769/article/details/120025808