




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人脸识别经典算法实现首先需要2个第三方的库opencv-python、numpy安装完成后,可以编程了,还是先说明一下需要的算法:特征子脸技术的基本思想是:从统计的观点,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量称为特彳正脸(Eigenface)。实际上,特征脸反映了隐含在人脸样本集合内部的信息和人脸的结构关系。将眼睛、面颊、下颌的样本集协方差矩阵的特征向量称为特征眼、特征颌和特征唇,统称特征子脸。特征子脸在相应的图像空间中生成子空间,称为子脸空间。计算出测试图像窗口在子脸空间的投影距离,若窗口图像满足阈值比较条件,则判断其为人脸。基于特征分析的方法,也就是将人脸基准点的相对比率和其它描述人脸脸部特征的形状参数或类别参数等一起构成识别特征向量,这种基于整体脸的识别不仅保留了人脸部件之间的拓扑关系,而且也保留了各部件本身的信息,而基于部件的识别则是通过提取出局部轮廓信息及灰度信息来设计具体识别算法。现在Eigenface(PCA)算法已经与经典的模板匹配算法一起成为测试人脸识别系统性能的基准算法;而自1991年特征脸技术诞生以来,研究者对其进行了各种各样的实验和理论分析,FERET'96测试结果也表明,改进的特征脸算法是主流的人脸识别技术,也是具有最好性能的识别方法之一。该方法是先确定眼虹膜、鼻翼、嘴角等面像五官轮廓的大小、位置、距离等属性,然后再计算出它们的几何特征量,而这些特征量形成一描述该面像的特征向量。其技术的核心实际为“局部人体特征分析”和“图形/神经识别算法。”这种算法是利用人体面部各器官及特征部位的方法。如对应几何关系多数据形成识别参数与数据库中所有的原始参数进行比较、判断与确认。Turk和Pentland提出特征脸的方法,它根据一组人脸训练图像构造主元子空间,由于主元具有脸的形状,也称为特征脸,识别时将测试图像投影到主元子空间上,得到一组投影系数,和各个已知人的人脸图像比较进行识别。Pentland等报告了相当好的结果,在200个人的3000幅图像中得到95%的正确识别率,在FERET数据库上对150幅正面人脸象只有一个误识别。但系统在进行特征脸方法之前需要作大量预处理工作如归一化等。在传统特征脸的基础上,研究者注意到特征值大的特征向量(即特征脸)并不一定是分类性能好的方向,据此发展了多种特征(子空间)选择方法,如Peng的双子空间方法、Weng的线性歧义分析方法、Belhumeur的FisheRFace方法等。事实上,特征脸方法是一种显式主元分析人脸建模,—些线性自联想、线性压缩型BP网则为隐式的主元分析方法,它们都是把人脸表示为一些向量的加权和,这些向量是训练集叉积阵的主特征向量,Valentin对此作了详细讨论。总之,特征脸方法是一种简单、快速、实用的基于变换系数特征的算法,但由于它在本质上依赖于训练集和测试集图像的灰度相关性,而且要求测试图像与训练集比较像,所以它有着很大的局限性。基于KL变换的特征人脸识别方法基本原理:KL变换是图象压缩中的一种最优正交变换,人们将它用于统计特征提取,从而形成了子空间法模式识别的基础,若将KL变换用于人脸识别,则需假设人脸处于低维线性空间,且不同人脸具有可分性,由于高维图象空间KL变换后可得到一组新的正交基,因此可通过保留部分正交基,以生成低维人脸空间,而低维空间的基则是通过分析人脸训练样本集的统计特性来获得,KL变换的生成矩阵可以是训练样本集的总体散布矩阵,也可以是训练样本集的类间散布矩阵,即可采用同一人的数张图象的平均来进行训练,这样可在一定程度上消除光线等的干扰,且计算量也得到减少,而识别率不会下降。#encoding=utf-8importnumpyasnpimportcv2importosclassEigenFace(object):def__init__(self,threshold,dimNum,dsize):self.threshold=threshold#阈值暂未使用self.dimNum=dimNumself.dsize=dsizedefloadImg(self,fileName,dsize):'''''载入图像,灰度化处理,统一尺寸,直方图均衡化:paramfileName:图像文件名:paramdsize:统一尺寸大小。元组形式:return:图像矩阵img=cv2.imread(fileName)retImg=cv2.resize(img,dsize)retImg=cv2.cvtColor(retImg,cv2.COLOR_RGB2GRAY)retImg=cv2.equalizeHist(retImg)cv2.imshow('img',retImg)cv2.waitKey()returnretImgdefcreateImgMat(self,dirName):'''''生成图像样本矩阵,组织形式为行为属性,列为样本:paramdirName:包含训练数据集的图像文件夹路径:return:样本矩阵,标签矩阵'''dataMat=np.zeros((10,1))label=[]forparent,dirnames,filenamesinos.walk(dirName):printparentprintdirnamesprintfilenamesindex=0fordirnameindirnames:forsubParent,subDirName,subFilenamesinos.walk(parent+'/'+dirname):forfilenameinsubFilenames:img=self.loadImg(subParent+'/'+filename,self.dsize)tempImg=np.reshape(img,(-1,1))IFindex==0:dataMat=tempImgelse:dataMat=np.column_stack((dataMat,tempImg))label.append(subParent+'/'+filename)index+=1returndataMat,labeldefPCA(self,dataMat,dimNum):PCA函数,用于数据降维:paramdataMat:样本矩阵:paramdimNum:降维后的目标维度:return:降维后的样本矩阵和变换矩阵'''#均值化矩阵meanMat=np.mat(np.mean(dataMat,1)).Tprintu'平均值矩阵维度’,meanMat.shapediffMat=dataMat-meanMat#求协方差矩阵,由于样本维度远远大于样本数目,所以不直接求协方差矩阵,采用下面的方法covMat=(diffMat.T*diffMat)/float(diffMat.shape[1])#归一化#covMat2=np.cov(dataMat,bias=True)#print'基本方法计算协方差矩阵为’,covMat2printu'协方差矩阵维度’,covMat.shapeeigVals,eigVects=np.linalg.eig(np.mat(covMat))printu'特征向量维度’,eigVects.shapeprintu'特征值',eigValseigVects=diffMat*eigVectseigValInd=np.argsort(eigVals)eigValInd=eigValInd[::-1]eigValInd=eigValInd[:dimNum]#取出指定个数的前n大的特征值printu'选取的特征值',eigValIndeigVects=eigVects/np.linalg.norm(eigVects,axis=0)#归一化特征向量redEigVects=eigVects[:,eigValInd]printu'选取的特征向量’,redEigVects.shapeprintu'均值矩阵维度’,diffMat.shapelowMat=redEigVects.T*diffMatprintu'低维矩阵维度’,lowMat.shapereturnlowMat,redEigVectsdefcompare(self,dataMat,testImg,label):'''''比较函数,这里只是用了最简单的欧氏距离比较,还可以使用KNN等方法,如需修改修改此处即可:paramdataMat:样本矩阵:paramtestImg:测试图像矩阵,最原始形式:paramlabel:标签矩阵:return:与测试图片最相近的图像文件名testImg=cv2.resize(testImg,self.dsize)testImg=cv2.cvtColor(testImg,cv2.COLOR_RGB2GRAY)testImg=np.reshape(testImg,(-1,1))lowMat,redVects=self.PCA(dataMat,self.dimNum)testImg=redVects.T*testImgprintu'检测样本变换后的维度’,testImg.shapedisList=[]testVec=np.reshape(testImg,(1广1))forsampleinlowMat.T:disList.append(np.linalg.norm(testVec-sample))printdisListsortIndex=np.argsort(disList)returnlabel[sortIndex[0]]defpredict(self,dirName,testFileName):'''''预测函数:paramdirName:包含训练数据集的文件夹路径:paramtestFileName:测试图像文件名:return:预测结果testImg=cv2.imread(testFileName)d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告播出合同范本
- 图文驻场服务合同范本
- 委托工程付款合同范本
- 印制费合同范本
- 银行店面转租合同范本
- 职工派遣合同范本
- 门式起重机安装合同范本
- 三方合作合同范本
- 汽车废品回收合同范本
- 学校蔬菜采购合同范本
- 宠物运输合同样本
- 在优化营商环境工作座谈会上的讲话
- 2024-2025学年七年级数学下册第7章《幂的运算》检测卷(苏科版2024 含答案解析)
- 家具公司、店铺管理运营手册
- 2025年餐饮股权分配协议书模板
- 2025春季开学前学校安全隐患排查工作实施方案:5大安全排查一个都不能少
- 浙江省宁波市奉化区2024-2025学年高二上学期期末联考语文试题及答案
- 2025-2030年中国铅酸蓄电池行业市场需求分析与十三五规划研究报告
- 2024年苏州职业大学高职单招职业适应性测试历年参考题库含答案解析
- 2025年江苏苏州市常熟市交通公有资产经营有限公司招聘笔试参考题库附带答案详解
- 预防校园欺凌主题班会课件(共36张课件)
评论
0/150
提交评论