本发明涉及信息化领域,具体涉及一种基于matlab的人脸识别登录系统及设计方法。
背景技术:
脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。由于人脸具有不可复制特性、采集方便、不需要被拍者的配合而深受欢迎。人脸识别系统具有广泛的应用,人脸识别出入管理系统、人脸识别门禁考勤系统、人脸识别监控管理、人脸识别电脑安全防范、人脸识别照片搜索、人脸识别来防登记等等。
人脸识别技术的基本原理是是基于人的脸部特征,对输入的人脸图象或者视频流。首先判断其是否存在人脸,如果存在人脸,则进一步的给出每个脸的位置、大小和各个主要面部器官的位置信息。并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比,从而识别每个人脸的身份。
发明专利内容
本发明涉及一种基于matlab的人脸识别登录系统及设计方法,本系统基于matlab进行开发,通过摄像头实时采集视频数据,从环境中找出人脸,并对其进行分析,以达到人脸识别的目的,并可以自由设定参照的人脸。
附图说明
图1为程序的设计流程图。
具体实施方式
为了使本发明专利的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明专利进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明专利,并不用于限定本发明专利。
本发明涉及一种基于matlab的人脸识别登录系统及设计方法,本系统基于matlab进行开发,通过摄像头实时采集视频数据,从环境中找出人脸,并对其进行分析,以达到人脸识别的目的,并可以自由设定参照的人脸。
进一步的,本发明将程序分成了摄像头调用和图像捕获模块、人脸区域检测模块、样本人脸预存储模块、人脸分析模块和人脸识别对比模块。程序的设计流程如图1所示。
进一步的,管理员人脸样本储存,要进行人脸识别登录,首先对管理员的人脸进行预设置,即储存一定数量的人脸样本。当密码验证正确后,程序调用之前的人脸检测裁剪模块进行人脸的检测,再将检测得到的人脸储存在硬盘上。为了确保样本的准确性,保证后面识别的成功率,本发明把样本数量定在了十张。如果对截取的人脸不满意,可以手动跳过当前将要保存的人脸,直到存满10张样本后程序会自动退出。本模块所需的代码如下:
disp('pleaseenterthepassword:');
ss=input('','s');
tf=strcmp(ss,'1234');%密码1234
iftf~=1
disp('passworderror');
delete(vid);
return
end
i=1;
while(i<11)
a=getsnapshot(vid);%捕获图像
flushdata(vid);%刷新缓冲区
b=getface(a);
imshow(b);
drawnow;%刷新屏幕
s=input('','s');
switchs
case'a'%跳过当前样本
continue;
case''%保存当前样本
str=strcat(int2str(i),'.bmp');
eval('imwrite(b,str)');
i=i+1;
end
end。
进一步的,基于k-l变换的管理员人脸样本分析,k-l变换的目的在于寻找任意统计分布的数据集合之主要分量的子集。相应的基向量组满足正交性且由它定义的子空间最有地考虑了数据相关性。本发明将原始数据集合变换到主分量空间使单一数据样本的互相关性降到最低点。本模块所需的代码如下:
fori=1:m
str=strcat('',int2str(i),'.bmp');
eval('img=imread(str);');
[irowicol]=size(img);
temp=reshape(img',irow*icol,1);
s=[stemp];
end。
进一步的,本发明对s进行规范化,以尽量消除光照等因素的影响,本模块所需的代码如下:
fori=1:size(s,2)
temp=double(s(:,i));
m=mean(temp);
st=std(temp);
s(:,i)=(temp-m)*ustd/st+um;
end。
进一步的,由k-l变换可知,本发明先计算出m*m维矩阵l=a*a'的特征向量vk和特征值uk。然后uk=a’vk就是矩阵c的特征向量。本模块所需代码如下:
dbx=[];%amatrix
fori=1:m
temp=double(s(:,i));
dbx=[dbxtemp];
end
a=dbx';
l=a*a';
%vv是l的特征向量
%dd是l=dbx'*dbxandc=dbx*dbx'的特征值;
[vvdd]=eig(l);
%排序并去掉0
v=[];
d=[];
fori=1:size(vv,2)
if(dd(i,i)>1e-4)
v=[vvv(:,i)];
d=[ddd(i,i)];
end
end
%排序并返回降序的
[bindex]=sort(d);
ind=zeros(size(index));
dtemp=zeros(size(index));
vtemp=zeros(size(v));
len=length(index);
fori=1:len
dtemp(i)=b(len+1-i);
ind(i)=len+1-index(i);
vtemp(:,ind(i))=v(:,i);
end
d=dtemp;
v=vtemp;
%对特征向量进行规范化
fori=1:size(v,2)
kk=v(:,i);
temp=sqrt(sum(kk.^2));
v(:,i)=v(:,i)./temp;
end
%得到c的特征向量矩阵
u=[];
fori=1:size(v,2)
temp=sqrt(d(i));
u=[u(dbx*v(:,i))./temp];
end
%对特征向量矩阵进行规范化
fori=1:size(u,2)
kk=u(:,i);
temp=sqrt(sum(kk.^2));
u(:,i)=u(:,i)./temp;
end。
进一步的,人脸特征处理,人脸数据库中记录了10幅管理员的图像,本发明将这十幅图像按照一定的平均值和方差进行规范化后再存储。采用k-l变换,找出样本人脸图像的特征向量,每一幅人脸图像都可以投影到特征向量组成的子空间中,构成特征脸。找出样本中每张脸的权重,存入数组。计算从摄像头处获得的人脸的权重。依次计算该人脸与各个样本人脸的euclidean距离,并通过分析这些距离判断身份是否正确。所用阈值经试验测得,所用距离为maximumvalue<1.3500e+004,或者minimumvalue<1.1800e+004;当最大值小于1.3500e+004时,则说明此人脸与样本人脸都很接近,当最小值小于1.1800e+004时,说明此人脸与样本的某张人脸很接近,这两种情况均说明人脸匹配。本发明先由10幅图像构造一个人脸特征空间,将一幅不是管理员的图像输入,计算它与10幅样本人脸的euclidean距离。
以上所述仅为本发明专利的较佳实施例而已,并不用以限制本发明专利,凡在本发明专利的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明专利的保护范围之内。