毕设分享 基于深度学习的人脸识别系统

文章目录

  • 前言
  • 机器学习-人脸识别过程
    • 人脸检测
    • 人脸对其
    • 人脸特征向量化
    • 人脸识别
  • 深度学习-人脸识别过程
    • 人脸检测
    • 人脸识别
        • Metric Larning

前言

人脸识别目前使用越来越广泛,很多同学希望能在自己毕设系统中用到人脸识别技术,希望学长能介绍一下人脸识别技术与实现。

为了满足同学们的要求,今天学长向大家介绍一下人脸识别技术,以及如何使用python去实现它。

毕设帮助,开题指导,资料分享,疑问解答(见文末)


🧿 **选题指导, 项目分享:见文末**

机器学习-人脸识别过程

基于传统图像处理和机器学习技术的人脸识别技术,其中的流程都是一样的。

机器学习-人脸识别系统都包括:

  • 人脸检测
  • 人脸对其
  • 人脸特征向量化
  • 人脸识别

人脸检测

人脸检测用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于后续的人脸特征分析和识别。下图是对一张图像的人脸检测结果:

人脸对其

同一个人在不同的图像序列中可能呈现出不同的姿态和表情,这种情况是不利于人脸识别的。

所以有必要将人脸图像都变换到一个统一的角度和姿态,这就是人脸对齐。

它的原理是找到人脸的若干个关键点(基准点,如眼角,鼻尖,嘴角等),然后利用这些对应的关键点通过相似变换(Similarity Transform,旋转、缩放和平移)将人脸尽可能变换到标准人脸。

下图是一个典型的人脸图像对齐过程:

这幅图就更加直观了:

人脸特征向量化

这一步是将对齐后的人脸图像,组成一个特征向量,该特征向量用于描述这张人脸。

但由于,一幅人脸照片往往由比较多的像素构成,如果以每个像素作为1维特征,将得到一个维数非常高的特征向量, 计算将十分困难;而且这些像素之间通常具有相关性。

所以我们常常利用PCA技术对人脸描述向量进行降维处理,保留数据集中对方差贡献最大的人脸特征来达到简化数据集的目的

PCA人脸特征向量降维示例代码:

#coding:utf-8fromnumpyimport*fromnumpyimportlinalgaslaimportcv2importosdefloadImageSet(add):FaceMat=mat(zeros((15,98*116)))j=0foriinos.listdir(add):ifi.split('.')[1]=='normal':try:img=cv2.imread(add+i,0)except:print'load %s failed'%i FaceMat[j,:]=mat(img).flatten()j+=1returnFaceMatdefReconginitionVector(selecthr=0.8):# step1: load the face image data ,get the matrix consists of all imageFaceMat=loadImageSet('D:\python/face recongnition\YALE\YALE\unpadded/').T# step2: average the FaceMatavgImg=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)foriinxrange(shape(FaceMat)[1]):if(eigvals[eigSortIndex[:i]]/eigvals.sum()).sum()>=selecthr:eigSortIndex=eigSortIndex[:i]breakcovVects=diffTrain*eigVects[:,eigSortIndex]# covVects is the eigenvector of covariance matrix# avgImg 是均值图像,covVects是协方差矩阵的特征向量,diffTrain是偏差矩阵returnavgImg,covVects,diffTraindefjudgeFace(judgeImg,FaceVector,avgImg,diffTrain):diff=judgeImg.T-avgImg weiVec=FaceVector.T*diff res=0resVal=infforiinrange(15):TrainVec=FaceVector.T*diffTrain[:,i]if(array(weiVec-TrainVec)**2).sum()<resVal:res=i resVal=(array(weiVec-TrainVec)**2).sum()returnres+1if__name__=='__main__':avgImg,FaceVector,diffTrain=ReconginitionVector(selecthr=0.9)nameList=['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15']characteristic=['centerlight','glasses','happy','leftlight','noglasses','rightlight','sad','sleepy','surprised','wink']forcincharacteristic:count=0foriinrange(len(nameList)):# 这里的loadname就是我们要识别的未知人脸图,我们通过15张未知人脸找出的对应训练人脸进行对比来求出正确率loadname='D:\python/face recongnition\YALE\YALE\unpadded\subject'+nameList[i]+'.'+c+'.pgm'judgeImg=cv2.imread(loadname,0)ifjudgeFace(mat(judgeImg).flatten(),FaceVector,avgImg,diffTrain)==int(nameList[i]):count+=1print'accuracy of %s is %f'%(c,float(count)/len(nameList))# 求出正确率

人脸识别

这一步的人脸识别,其实是对上一步人脸向量进行分类,使用各种分类算法。

比如:贝叶斯分类器,决策树,SVM等机器学习方法。

从而达到识别人脸的目的。

这里分享一个svm训练的人脸识别模型:

from__future__importprint_functionfromtimeimporttimeimportloggingimportmatplotlib.pyplotaspltfromsklearn.cross_validationimporttrain_test_splitfromsklearn.datasetsimportfetch_lfw_peoplefromsklearn.grid_searchimportGridSearchCVfromsklearn.metricsimportclassification_reportfromsklearn.metricsimportconfusion_matrixfromsklearn.decompositionimportRandomizedPCAfromsklearn.svmimportSVCprint(__doc__)# Display progress logs on stdoutlogging.basicConfig(level=logging.INFO,format='%(asctime)s %(message)s')################################################################################ Download the data, if not already on disk and load it as numpy arrayslfw_people=fetch_lfw_people(min_faces_per_person=70,resize=0.4)# introspect the images arrays to find the shapes (for plotting)n_samples,h,w=lfw_people.images.shape# for machine learning we use the 2 data directly (as relative pixel# positions info is ignored by this model)X=lfw_people.data n_features=X.shape[1]# the label to predict is the id of the persony=lfw_people.target target_names=lfw_people.target_names n_classes=target_names.shape[0]print("Total dataset size:")print("n_samples: %d"%n_samples)print("n_features: %d"%n_features)print("n_classes: %d"%n_classes)################################################################################ Split into a training set and a test set using a stratified k fold# split into a training and testing setX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=42)################################################################################ Compute a PCA (eigenfaces) on the face dataset (treated as unlabeled# dataset): unsupervised feature extraction / dimensionality reductionn_components=80print("Extracting the top %d eigenfaces from %d faces"%(n_components,X_train.shape[0]))t0=time()pca=RandomizedPCA(n_components=n_components,whiten=True).fit(X_train)print("done in %0.3fs"%(time()-t0))eigenfaces=pca.components_.reshape((n_components,h,w))print("Projecting the input data on the eigenfaces orthonormal basis")t0=time()X_train_pca=pca.transform(X_train)X_test_pca=pca.transform(X_test)print("done in %0.3fs"%(time()-t0))################################################################################ Train a SVM classification modelprint("Fitting the classifier to the training set")t0=time()param_grid={'C':[1,10,100,500,1e3,5e3,1e4,5e4,1e5],'gamma':[0.0001,0.0005,0.001,0.005,0.01,0.1],}clf=GridSearchCV(SVC(kernel='rbf',class_weight='balanced'),param_grid)clf=clf.fit(X_train_pca,y_train)print("done in %0.3fs"%(time()-t0))print("Best estimator found by grid search:")print(clf.best_estimator_)print(clf.best_estimator_.n_support_)################################################################################ Quantitative evaluation of the model quality on the test setprint("Predicting people's names on the test set")t0=time()y_pred=clf.predict(X_test_pca)print("done in %0.3fs"%(time()-t0))print(classification_report(y_test,y_pred,target_names=target_names))print(confusion_matrix(y_test,y_pred,labels=range(n_classes)))################################################################################ Qualitative evaluation of the predictions using matplotlibdefplot_gallery(images,titles,h,w,n_row=3,n_col=4):"""Helper function to plot a gallery of portraits"""plt.figure(figsize=(1.8*n_col,2.4*n_row))plt.subplots_adjust(bottom=0,left=.01,right=.99,top=.90,hspace=.35)foriinrange(n_row*n_col):plt.subplot(n_row,n_col,i+1)# Show the feature faceplt.imshow(images[i].reshape((h,w)),cmap=plt.cm.gray)plt.title(titles[i],size=12)plt.xticks(())plt.yticks(())# plot the result of the prediction on a portion of the test setdeftitle(y_pred,y_test,target_names,i):pred_name=target_names[y_pred[i]].rsplit(' ',1)[-1]true_name=target_names[y_test[i]].rsplit(' ',1)[-1]return'predicted: %s\ntrue: %s'%(pred_name,true_name)prediction_titles=[title(y_pred,y_test,target_names,i)foriinrange(y_pred.shape[0])]plot_gallery(X_test,prediction_titles,h,w)# plot the gallery of the most significative eigenfaceseigenface_titles=["eigenface %d"%iforiinrange(eigenfaces.shape[0])]plot_gallery(eigenfaces,eigenface_titles,h,w)plt.show()

需要完整工程代码的同学,呼叫学长获取

深度学习-人脸识别过程

不同于机器学习模型的人脸识别,深度学习将人脸特征向量化,以及人脸向量分类结合到了一起,通过神经网络算法一步到位。

深度学习-人脸识别系统都包括:

  • 人脸检测
  • 人脸对其
  • 人脸识别

人脸检测

深度学习在图像分类中的巨大成功后很快被用于人脸检测的问题,起初解决该问题的思路大多是基于CNN网络的尺度不变性,对图片进行不同尺度的缩放,然后进行推理并直接对类别和位置信息进行预测。另外,由于对feature map中的每一个点直接进行位置回归,得到的人脸框精度比较低,因此有人提出了基于多阶段分类器由粗到细的检测策略检测人脸,例如主要方法有Cascade CNN、 DenseBox和MTCNN等等。

MTCNN是一个多任务的方法,第一次将人脸区域检测和人脸关键点检测放在了一起,与Cascade CNN一样也是基于cascade的框架,但是整体思路更加的巧妙合理,MTCNN总体来说分为三个部分:PNet、RNet和ONet,网络结构如下图所示。

人脸识别

人脸识别问题本质是一个分类问题,即每一个人作为一类进行分类检测,但实际应用过程中会出现很多问题。第一,人脸类别很多,如果要识别一个城镇的所有人,那么分类类别就将近十万以上的类别,另外每一个人之间可获得的标注样本很少,会出现很多长尾数据。根据上述问题,要对传统的CNN分类网络进行修改。

我们知道深度卷积网络虽然作为一种黑盒模型,但是能够通过数据训练的方式去表征图片或者物体的特征。因此人脸识别算法可以通过卷积网络提取出大量的人脸特征向量,然后根据相似度判断与底库比较完成人脸的识别过程,因此算法网络能不能对不同的人脸生成不同的特征,对同一人脸生成相似的特征,将是这类embedding任务的重点,也就是怎么样能够最大化类间距离以及最小化类内距离。

Metric Larning

深度学习中最先应用metric learning思想之一的便是DeepID2了。其中DeepID2最主要的改进是同一个网络同时训练verification和classification(有两个监督信号)。其中在verification loss的特征层中引入了contrastive loss。

Contrastive loss不仅考虑了相同类别的距离最小化,也同时考虑了不同类别的距离最大化,通过充分运用训练样本的label信息提升人脸识别的准确性。因此,该loss函数本质上使得同一个人的照片在特征空间距离足够近,不同人在特征空间里相距足够远直到超过某个阈值。(听起来和triplet loss有点像)。

🧿 项目分享:大家可自取用于参考学习,获取方式见文末!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1154684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【毕业设计】基于python-CNN深度学习对大白菜是否腐烂识别基于python-CNN卷积神经网络对大白菜是否腐烂识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

信安毕业设计创新的课题大全

1 引言 毕业设计是大家学习生涯的最重要的里程碑&#xff0c;它不仅是对四年所学知识的综合运用&#xff0c;更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要&#xff0c;它应该既能体现你的专业能力&#xff0c;又能满足实际应用需求&#xff…

‌2026年软件测试行业变革全景报告:AI原生范式下的角色重塑与实战路径

测试行业正经历从“执行者”到“质量架构师”的根本性跃迁‌ 2026年&#xff0c;软件测试已不再是开发流程的“最后一道防线”&#xff0c;而是企业质量体系的‌智能中枢‌。在AI原生平台、多智能体协同与无代码革命的共同驱动下&#xff0c;测试工程师的核心价值从“写脚本”…

‌2026年软件测试行业变革全景报告:AI原生范式下的角色重塑与实战路径

测试行业正经历从“执行者”到“质量架构师”的根本性跃迁‌ 2026年&#xff0c;软件测试已不再是开发流程的“最后一道防线”&#xff0c;而是企业质量体系的‌智能中枢‌。在AI原生平台、多智能体协同与无代码革命的共同驱动下&#xff0c;测试工程师的核心价值从“写脚本”…

从数值微分到梯度下降:深度学习的基石

从数值微分到梯度下降&#xff1a;深度学习的基石 在深度学习的世界里&#xff0c;梯度下降算法是训练神经网络的基石。而要理解梯度下降&#xff0c;首先要掌握数值微分这个关键概念。 导数&#xff1a;变化的瞬间捕捉 想象你正在跑马拉松&#xff0c;前10分钟跑了2千米。你的…

深度学习毕设选题推荐:基于python-CNN卷积网络的动物是否疲劳识别基于人工智能python-CNN卷积网络的动物是否疲劳识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

你的虚拟剑值一辆特斯拉?链游道具上链:一场让玩家“真赚钱”的成本革命

引言&#xff1a;当游戏道具成为“数字资产”在2025年的游戏产业中&#xff0c;一个颠覆性现象正在蔓延&#xff1a;玩家为虚拟剑支付的费用可能超过现实中的真剑&#xff0c;而一把链上铸造的“传说级法杖”甚至能在区块链交易所拍卖出数万美元。这种价值重构的背后&#xff0…

全网最全8个AI论文网站,助本科生轻松搞定毕业论文!

全网最全8个AI论文网站&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始借助 AI 工具来辅助完成毕业论文。尤其是在当前 AIGC&#xff08;人工智能生成内容&am…

【跨平台日志集中分析实战指南】:从零搭建企业级统一日志系统的5大核心步骤

第一章&#xff1a;跨平台日志集中分析概述 在现代分布式系统架构中&#xff0c;服务往往部署于多种操作系统和运行环境中&#xff0c;包括Linux服务器、Windows主机、容器化实例以及云原生平台。这种异构性使得日志数据分散在不同节点上&#xff0c;给故障排查、安全审计与性能…

计算机深度学习毕设实战-基于python的卷积神经网络对大白菜是否腐烂识别基于python-CNN卷积神经网络对大白菜是否腐烂识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026必备!本科生毕业论文神器TOP8:一键生成论文工具深度测评

2026必备&#xff01;本科生毕业论文神器TOP8&#xff1a;一键生成论文工具深度测评 2026年本科生论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着高校对毕业论文质量要求的不断提升&#xff0c;越来越多的本科生开始依赖智能写作工具来提高效率、优化内容…

神经网络的学习(数值微分)

数值微分 梯度法使用梯度的信息决定前进的方向。本节将介绍梯度是什么、有什 么性质等内容。在这之前&#xff0c;我们先来介绍一下导数。 导数 假如你是全程马拉松选手&#xff0c;在开始的10 分钟内跑了2 千米。如果要计算 此时的奔跑速度&#xff0c;则为2/10 0.2&#xff…

深度学习毕设选题推荐:基于python-CNN卷积神经网络对大白菜是否腐烂识别基于python 对大白菜是否腐烂识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

基于大数据Hadoop+机器学习预测算法+Echarts的用户信用评估系统的设计与实现(精品源码+精品论文+上万数据集+答辩PPT)

博主介绍&#xff1a;CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…

计算机毕设java高校二手商城系统 基于Java技术的高校二手交易平台设计与实现 Java环境下高校二手交易系统开发与应用

计算机毕设java高校二手商城系统78mg59 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着互联网技术的飞速发展&#xff0c;高校二手交易市场逐渐成为学生群体中不可或缺的一部…

Kanass一文快速上手,如何快速导入Jira、Mantis数据

本文将介绍如何快速导入Atlassian Jira与Mantis数据&#xff0c;以实现快速迁移切换。 1、Kanass的安装配置 1.1 安装 下载 点此下载 安装 以centos为例&#xff0c;将Linux下的centos安装包下载&#xff0c;并使用rpm命令安装kanass。 sudo rpm -ivh tiklab-kanass-1.2.…

计算机毕设Java基于MVC的社区党建信息系统的设计与实现 基于Java技术的社区党建信息管理平台的设计与开发 Java环境下社区党建信息系统的构建与实现

计算机毕设Java基于MVC的社区党建信息系统的设计与实现rh9169 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息技术的飞速发展&#xff0c;计算机技术已经渗透到社会的各…

AI人脸隐私卫士应用场景:从个人到企业的解决方案

AI人脸隐私卫士应用场景&#xff1a;从个人到企业的解决方案 1. 引言&#xff1a;AI驱动的隐私保护新范式 随着智能手机和社交平台的普及&#xff0c;图像数据已成为日常沟通的重要载体。然而&#xff0c;在分享照片时&#xff0c;无意中暴露他人面部信息的风险也随之增加——…

1.1 揭秘AI大模型:普通人如何抓住这波技术红利?

1.1 揭秘AI大模型:普通人如何抓住这波技术红利? 引言:我们正处在AI变革的时代 如果你经常刷社交媒体,一定看到过各种关于AI的新闻:某某公司发布了新的大模型,某位网红用AI生成了惊人的作品,或者某个工作岗位因为AI而面临挑战。那么,什么是大模型?它真的会改变我们的…

(183页PPT)某省市场营销MPR+LTC流程规划方案(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/89525616 资料解读&#xff1a;某省市场营销 MPRLTC 流程规划方案 P183 详细资料请看本解读文章的最后内容 本方案聚焦某省市场营销场景&am…