基于Python的人脸识别系统 深度学习 毕业设计 (附源码)

一、项目介绍

         人脸识别系统是一种基于人脸图像或视频进行人物身份认证和识别的技术。 技术进步:随着计算机视觉和深度学习技术的发展,人脸识别系统取得了长足进步。特别是卷积神经网络(CNN)的出现,使得人脸识别系统在准确性、鲁棒性和性能上都有了显著提升。

总体来说,人脸识别系统在算法的准确性和鲁棒性方面取得了显著进展。然而,仍然存在着一些技术挑战和伦理问题,需要进一步的研究和解决。随着技术的不断发展和应用领域的拓展,人脸识别系统将在安全、监控、人机交互等领域发挥越来越重要的作用。

近年来,人脸识别的技术愈发成熟,在大型数据集上的训练测试结果已超过人类,其应用也日益广泛,譬如刷脸支付、安防侦破、出入口控制、互联网服务等。人脸识别(Face
Recognition)是一种通过获取人面部的特征信息进行身份确认的技术,类似已用于身份识别的人体的其他生物特征(如虹膜、指纹等),人脸具备唯一性、一致性和高度的不可复制性,为身份识别提供了稳定的条件。人脸识别系统是博主一直想做的一个项目,通过人脸面部信息识别可以进行很多有趣的设计,如面部解锁、考勤打卡等。

        前面博主撰写了人脸性别识别系统表情识别系统等,其实是人脸属性识别的一种,即根据人脸面部图像中的相关特征判断其性别或表情属性,该任务本身也同样具有较强的现实意义。这篇博文则回到人脸识别的任务本身,采用深度学习的方法对人脸特征进行提取,计算其与已存在的人脸特征的相似度,判读其是否属于库中的某一人脸,达到身份识别的目的。不过我希望在实现的基础上,能多增加一些可操作性,因此尽可能设计一个功能完善的人脸识别系统。

        这里博主分享一个自主设计的人脸识别项目,包括识别人脸、录入人脸、管理人脸在内的多项功能,以下是界面的截图,供大家参考学习了:

在这里插入图片描述

检测识别人脸时的界面截图(点击图片可放大)如下图,可识别画面中存在的多个人脸,也可开启摄像头或视频检测,以及人脸录入管理等功能:

在这里插入图片描述

         详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。


二、 效果演示

(一)选择人脸图片识别

        在系统的功能选项按钮中选择“识别人脸”,点击下方的图片选择按钮图标选择图片后,在主显区域标记所有人脸识别的结果,并被逐条记录在表格中。本功能的界面展示如下图所示:

在这里插入图片描述

(二)人脸视频识别效果展示

        很多时候我们需要识别一段视频中的人脸信息,这里设计了视频选择功能。同样的在“识别人脸”功能选项下,点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别人脸,并将结果记录在右下角表格中,效果如下图所示:

在这里插入图片描述

(三)摄像头检测效果展示

        在真实场景中,我们往往利用设备摄像头获取实时画面,同时需要对画面中的人脸进行识别,同样可以在“识别人脸”功能选项下选择此项功能。如下图所示,点击摄像头按钮后系统进入准备状态,系统显示实时画面并开始检测画面中的人脸,识别结果展示如下图:

在这里插入图片描述
在这里插入图片描述

(四)录入人脸效果展示

        当出现一个新的人脸需要录入时,点击“录入人脸”功能选项按钮,此时底部功能界面切换至录入功能,首先输入人脸名字点击“新建”后可通过选择人脸图片或开启摄像头进行画面捕捉,系统检测到人脸后可选择“取图”,系统得到捕获的人脸区域图片,最后点击“录入”按钮,则提取所有人脸图片特征并写入系统库中,演示效果如下:

在这里插入图片描述

(五)管理人脸效果展示

        对于已经存在的人脸数据可选择“管理人脸”功能选项按钮,切换至管理界面,选择表格中要删除或更新的人脸数据栏,点击确定后系统自动更新人脸数据库,该功能展示如下图:

在这里插入图片描述

在识别某张特定人脸前,应该先在系统库中录入人脸信息,即送入一张人脸图像供系统提取特征,此过程可选择图片也可开启摄像头实时获取。至此系统的演示完毕,其实除了动图中演示的功能,当然还有许多细节功能无法一一演示,读者可以自行测试。


2. 人脸识别原理

        如今机器学习、神经网络方法广泛应用于人脸识别领域,而后深度学习广泛应用于各种目标检测领域,2015年,Google团队的FaceNet在LFW数据集上得平均准确率达到了99.63%,基于深度学习的人脸识别的准确率已经高于人类本身,深度学习在人脸识别领域基本占据了统治地位。

        Dlib是一个包含机器学习算法的C++开源工具包,目前已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。作为人脸识别工具之一,Dlib在图像处理及人脸面部特征处理、分类、识别等方面具有计算简单、较容易实现的优点。

        Dlib在人脸识别上的应用:(1)接受图像并将其加载到一个像素数组中进行处理;(2)使用局部二进制模式的人脸描述生成新的图像;(3)根据Dlib库中的scan_image_boxes等函数写入读取到的图片,进而计算人脸之间的特征向量;(4)与人脸数据库中的特征向量进行对比并利用全局函数threshold_image计算阈值,完成人脸识别1

        Dlib可通过Python调用,实现对图像预处理、提取特征向量、与人脸数据库中数据进行校验进而判别人物身份的流程。这里我们的人脸识别的过程有人脸检测(Face Detection)、人脸对齐(Face Alignment)、人脸表示(Face Representation)和人脸匹配(Face Matching)

在这里插入图片描述

(1)人脸检测(Face Detection):首先利用Dlib的get_frontal_face_detector方法检测人脸区域并输出人脸矩形的四个坐标点。调用get_frontal_face_detector会返回 dlib 库中包含的预训练方向梯度直方图 (HOG)结合线性支持向量机(SVM)的人脸检测器,该检测器快速高效。由于方向梯度直方图 (HOG) 描述符的工作原理,它对图像几何的和光学的形变都能保持很好的不变性。

         (2)人脸对齐(Face Alignment):这是人脸识别系统中的一种标准操作,即从人脸区域中检测到人脸特征点,并以特征点为依据对人脸进行归一化操作,使人脸区域的尺度和角度一致,方便特征提取与人脸匹配。一般通过旋转、平移与缩放将目标人脸区域放置在图像特定位置。这样做可以减小需要处理的人脸图像在空间分布上的差异。这里我们使用的是基于回归树的人脸对齐算法2,该算法是Vahid Kazemi 和 Josephine Sullivan在CVPR2014上发表的One Millisecond Face Alignment with an Ensemble of Regression Trees算法(以下简称GBDT),这种方法通过建立一个级联的残差回归树(GBDT)来使人脸形状从当前形状一步一步回归到真实形状。每一个GBDT的每一个叶子节点上都存储着一个残差回归量,当输入落到一个节点上时,就将残差加到改输入上,起到回归的目的,最终将所有残差叠加在一起,就完成了人脸对齐的目的。此处我们使用shape_predictor方法载入shape_predictor_68_face_landmarks.dat模型实现。

        (3)人脸表示(Face Representation):这一步我们从归一化的人脸区域中进行面部特征提取,采用深度神经网络方法得到具有128个特征的特征向量。这里利用Dlib中的残差学习深度神经网络(ResNet)3为待识别人脸创建128维特征向量。人脸的特征表示,最理想的情况是不同人脸的照片提取出的特征向量差异较大,而同一人脸在不同照片中可以提取出相似度高的特征向量。此处我们使用的是dlib库中的face_recognition_model_v1方法,使用预训练的dlib_face_recognition_resnet_model_v1.dat模型。

        (4)人脸匹配(Face Matching):将待识别图片中提取的特征向量与比对图中的进行对比,通过评估方法计算两幅照片的相似度。可以根据相似得分,将得分高的判断为同一人,得分低的判断为不同人。这里我们使用欧式距离计算,两个人脸特征向量的欧式距离越小,则两张人脸越相似,若人脸图像与待识别人像之间的欧式距离小于设定的阈值(这里我设置为0.4)时,则判定为同一人。

        除了以上介绍的人脸匹配流程,这部分代码中还给出了识别出人脸后的标记过程。如果检测出人脸,则根据人脸的坐标未知绘制矩形框,根据识别结果在矩形框上方添加识别结果的文字。

        有了以上实现的基础,我们可以把这部分功能进行改进,添加进UI界面中方便我们选择图像和管理人脸库。打开QtDesigner软件,拖动以下控件至主窗口中,调整界面样式和控件放置,人脸识别系统的界面设计如下图所示:

在这里插入图片描述

        控件界面部分设计好,接下来利用PyUIC工具将.ui文件转化为.py代码文件,通过调用界面部分的代码同时加入对应的逻辑处理代码。博主对其中的UI功能进行了详细测试,最终开发出一版流畅得到清新界面,就是博文演示部分的展示,完整的UI界面、测试图片视频、代码文件,以及Python离线依赖包(方便安装运行,也可自行配置环境),均已打包好,或者想学习更多的项目,可以关注博主,查看主页计科了解更多项目。


​我是源码之家,感谢您阅读本文,欢迎一键三连哦。

近千套项目源码,项目分享学习,涵盖Python/Java/大数据
查看主页学习更多项目~

了解更多项目源码链接: https://blog.csdn.net/2201_75772776

​我是源码之家,感谢您阅读本文,欢迎一键三连哦。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐