毕设系列之 | 您所在的位置:网站首页 › 蔡徐坤swin托脸图 › 毕设系列之 |
文章目录
前言机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别
深度学习-人脸识别过程人脸检测人脸识别Metric Larning
最后 - 技术解答 - 毕设帮助
前言
人脸识别目前使用越来越广泛,很多同学希望能在自己毕设系统中用到人脸识别技术,希望学长能介绍一下人脸识别技术与实现。 为了满足同学们的要求,今天学长向大家介绍一下人脸识别技术,以及如何使用python去实现它。 毕设帮助,开题指导,资料分享,疑问解答(见文末) 机器学习-人脸识别过程基于传统图像处理和机器学习技术的人脸识别技术,其中的流程都是一样的。 机器学习-人脸识别系统都包括: 人脸检测人脸对其人脸特征向量化人脸识别 人脸检测人脸检测用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于后续的人脸特征分析和识别。下图是对一张图像的人脸检测结果: 人脸对其同一个人在不同的图像序列中可能呈现出不同的姿态和表情,这种情况是不利于人脸识别的。 所以有必要将人脸图像都变换到一个统一的角度和姿态,这就是人脸对齐。 它的原理是找到人脸的若干个关键点(基准点,如眼角,鼻尖,嘴角等),然后利用这些对应的关键点通过相似变换(Similarity Transform,旋转、缩放和平移)将人脸尽可能变换到标准人脸。 下图是一个典型的人脸图像对齐过程: 这幅图就更加直观了: 人脸特征向量化这一步是将对齐后的人脸图像,组成一个特征向量,该特征向量用于描述这张人脸。 但由于,一幅人脸照片往往由比较多的像素构成,如果以每个像素作为1维特征,将得到一个维数非常高的特征向量, 计算将十分困难;而且这些像素之间通常具有相关性。 所以我们常常利用PCA技术对人脸描述向量进行降维处理,保留数据集中对方差贡献最大的人脸特征来达到简化数据集的目的 PCA人脸特征向量降维示例代码: #coding:utf-8 from numpy import * from numpy import linalg as la import cv2 import os def loadImageSet(add): FaceMat = mat(zeros((15,98*116))) j =0 for i in os.listdir(add): if i.split('.')[1] == 'normal': try: img = cv2.imread(add+i,0) except: print 'load %s failed'%i FaceMat[j,:] = mat(img).flatten() j += 1 return FaceMat def ReconginitionVector(selecthr = 0.8): # step1: load the face image data ,get the matrix consists of all image FaceMat = loadImageSet('D:\python/face recongnition\YALE\YALE\unpadded/').T # step2: average the FaceMat avgImg = mean(FaceMat,1) # step3: calculate the difference of avgimg and all image data(FaceMat) diffTrain = FaceMat-avgImg #step4: calculate eigenvector of covariance matrix (because covariance matrix will cause memory error) eigvals,eigVects = linalg.eig(mat(diffTrain.T*diffTrain)) eigSortIndex = argsort(-eigvals) for i in xrange(shape(FaceMat)[1]): if (eigvals[eigSortIndex[:i]]/eigvals.sum()).sum() >= selecthr: eigSortIndex = eigSortIndex[:i] break covVects = diffTrain * eigVects[:,eigSortIndex] # covVects is the eigenvector of covariance matrix # avgImg 是均值图像,covVects是协方差矩阵的特征向量,diffTrain是偏差矩阵 return avgImg,covVects,diffTrain def judgeFace(judgeImg,FaceVector,avgImg,diffTrain): diff = judgeImg.T - avgImg weiVec = FaceVector.T* diff res = 0 resVal = inf for i in range(15): TrainVec = FaceVector.T*diffTrain[:,i] if (array(weiVec-TrainVec)**2).sum() |
CopyRight 2018-2019 实验室设备网 版权所有 |