毕设系列之 您所在的位置:网站首页 蔡徐坤swin托脸图 毕设系列之

毕设系列之

2023-12-21 04:00| 来源: 网络整理| 查看: 265

文章目录 前言机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 深度学习-人脸识别过程人脸检测人脸识别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 实验室设备网 版权所有