人脸识别功能演示
摘要:
人脸识别(Face Recognition)
是基于人的脸部特征信息进行身份识别的一种生物识别技术,可以用来确认用户身份。本文详细介绍了人脸识别基本的实现原理,并且基于python
与pyqt
开发了人脸识别与信息管理软件
,主要实现了通过图片或者摄像头的方式进行人脸识别
、人员信息录入与管理
以及人脸打卡信息管理
等功能。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末。
目录
- 人脸识别功能演示
- 1. 前言
- 2. 软件功能介绍及效果演示
- 2.1 登录注册功能
- 2.2 人脸信息录入功能
- 2.3 人脸识别功能
- 2.4 数据管理功能
- 2.5 识别记录功能
- 3. 人脸识别原理介绍
- 3.1 基本原理
- 3.2 核心功能代码实现
- 【获取方式】
- 结束语
点击跳转至文末《完整相关文件及源码》获取
---1. 前言
人脸识别技术是一种生物识别技术,可以用来确认用户身份。人脸识别技术相比于传统的身份识别技术有很大的优势,主要体现在方便性上。传统的身份认证方式诸如:密码、PIN码、射频卡片、口令、指纹等,需要用户记住复杂密码或者携带身份认证钥匙。而密码、卡片均存在丢失泄露的风险,相比于人脸识别,交互性于安全性都不够高。人脸识别可以使用摄像头远距离非接触识别,相比于指纹免去了将手指按在识别区域的操作,可由摄像头自动识别。
目前人脸识别技术已经广泛应用于安全、监控、一般身份识别、考勤、走失儿童搜救等领域,对于提升身份认证的效率起到了重要的作用。而且目前还有更深入的人脸识别的研究正在进行,包括性别识别、年龄估计、心情估计等,更高水平和更高准确率的人脸识别技术对于城市安全和非接触式身份认证有巨大的作用。
博主根据人脸识别技术,基于python与Pyqt5开发了一款简洁的人脸识别与人员信息管理软件,可通过图片或者摄像头的方式进行人脸录入以及人员信息管理、人脸打卡等功能。
登录后的软件初始界面如下图所示:
2. 软件功能介绍及效果演示
软件主要功能包括以下几个部分:
- 登录注册模块;
- 人脸特征及人员信息录入模块:用于人员的人脸信息采集与信息录入;
- 人脸识别模块:识别人员是否已录入数据库,如已录入则显示人员信息,支持单人或多人同时识别;
- 人员已录入信息管理模块:对已录入的人员信息进行管理;
- 人脸识别记录模块:进行已录入的人员进行人脸识别的时间信息,可用于人员的打卡管理等。
下面将详细介绍各个模块的基本功能:
2.1 登录注册功能
本软件提供了基础的登录注册功能,对于新用户需要先注册账号才可以进行登录。界面如下:
2.2 人脸信息录入功能
人脸信息录入功能主要是依据图片或者摄像头来进行人脸的特征采集以及人员相关信息的录入。
人脸采集提供了两种方式:一种方式是通过图片进行人脸采集,另一种方式是通过摄像头拍照的方式进行。
图片采集方式如下:
摄像头采集方式如下:先开启摄像头,人脸处于合适位置后,点击拍照按钮,采集成功后,点击关闭摄像头按钮即可。
人脸信息采集完成后,填写用户的基本信息,点击保存按钮就可以将信息保存至数据库中。保存后的人脸图片存放在data/user_imgs
目录中,命名方式为用户ID_用户名字
。
2.3 人脸识别功能
通过图片或者摄像头的方式,将识别到的人脸与数据库中的人脸信息进行匹配,然后将匹配到的人员信息,显示在软件界面中,人脸识别也可以通过图片或者摄像头的方式进行匹配识别。
图片识别方式如下:(多人情况下,可通过下拉框查看每个人的信息)
摄像头识别方式:点击开启摄像头按钮,即可进行人脸识别,识别成功后,可点击关闭按钮,关闭摄像头。
2.4 数据管理功能
支持已录入人员信息数据的搜索,修改,删除等操作。
界面如下:
搜索功能:支持姓名与人员ID进行搜索;
修改功能:双击表格信息,修改信息后,然后点击修改按钮,再点击保存操作,才会将修改的信息更新至数据库;
删除功能:删除某个人员信息。操作方式—选中删除行,然后点击删除按钮,再点击保存操作按钮,即可将删除信息更新至数据库。
显示全部按钮用于显示全部已录入的用户信息。
2.5 识别记录功能
该功能用于记录已经进行人脸识别信息的人员识别记录,支持搜索、与记录删除功能。
界面如下:
3. 人脸识别原理介绍
3.1 基本原理
多数人脸识别都包含如下几个流程:人脸检测(Face Detection)、人脸对齐(Face Alignment)、人脸表示(Face Representation)和人脸匹配(Face Matching)。
流程图如下图所示:
【1】人脸检测 Face Detection:从输入的图像中检测到人脸区域,并返回人脸包围框的坐标。
【2】人脸对齐(人脸配准)Face Alignment:从提取出的人脸区域中检测到人脸特征点,并以特征点为依据对人脸进行归一化操作,使人脸区域的尺度和角度一致,方便特征提取与人脸匹配。人脸对齐的最终目的是在已知的人脸方框中定位人脸的精准形状,主要分为两大类:基于优化的方法和基于回归的方法。这里基于回归树的人脸对齐算法是Vahid Kazemi 和 Josephine Sullivan于CVPR2014年发表的人脸特征点识别方法,是一种基于回归树的人脸对齐方法,这种方法通过建立一个级联残差回归树(GBDT)来使人脸从当前形状一点点回归到真实形状。
【3】人脸表示Face Representation:从归一化的人脸区域中进行特征提取,得到特征向量,比如有的深度神经网络方法使用128个特征表示人脸,最理想的情况是不同的人的照片提取出的特征向量不一样,而同一人的不同照片中可以提取出相似的特征向量。
【4】人脸匹配 Face Mataching:将两幅图片计算出的特征向量进行对比,获得两幅照片的相似得分。根据相似得分,得分高的可判断为同一人,得分低的判断为不同人。
本软件人脸识别功能的实现主要是通过一款免费、开源、实时、离线的Python人脸识别库face_recognition来是实现,它是一款十分简洁的人脸识别库。
face_recognition是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。因此,安装face_recognition前需要安装dlib库。
face_recognition与dlib库安装的whl文件已经打包至资源文件中。
3.2 核心功能代码实现
基于上述人脸识别流程,我们通过Python的人脸识别库face_recognition来进行实现。首先导入所需的库:
import face_recognition
(1)载入图片,并识别出人脸矩形区域
使用face_recognition.face_locations
函数实现人脸区域检测。
image = face_recognition.load_image_file("face.jpg")
face_locations = face_recognition.face_locations(image)
face_locations为人脸矩形区域的列表:每一个元素为一个矩形框列表信息---顺序为(顶部、右侧、底部、左侧)
人脸录入时,选择最大的一张人脸进行信息录入,实现函数如下:
def info_entry_face_detect(img):
"""
人脸录入时的人脸检测,每次只录入一张人脸,取面积最大的一张人脸
:param img:
:return:
"""
img = img.copy()
face_locations = face_recognition.face_locations(img)
max_area = 0
location = [0,0,0,0]
if len(face_locations) == 0:
return img, None
# 解析,取面积最大的一张人脸进行录入
for top, right, bottom, left in face_locations:
width = right - left
height = bottom - top
area = width * height
if area > max_area:
max_area = area
location = [top, right, bottom, left]
top, right, bottom, left = location
cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3)
return img, location
(2)对识别出的人脸区域进行对齐与编码
我们可以使用face_recognition.face_encodings
函数对人脸区域进行编码。
face_encodings = face_recognition.face_encodings(img, location)
face_recognition.face_encodings函数会返回图片中每一张人脸的128维编码列表信息。
其中:img参数为识别的图像,location为图像中的人脸矩形框列表信息。
(3)人脸匹配
matches = face_recognition.compare_faces(known_encodings, face_encoding, tolerance=0.5)
face_recognition.compare_faces将人脸编码列表与候选编码进行比较,以查看它们是否匹配。
known_face_encodings – 已知人脸编码的列表
face_encoding– 与列表进行比较的单张脸编码
tolerance – 将人脸之间的距离视为匹配。越低越严格。0.6 是典型的最佳值。
该结果会返回一个列表信息,True表示与图片匹配的人脸编码。
我们可以将图片中识别到的人脸编码信息与数据库中的人脸编码进行匹配查询,从而识别图片中的人员信息,代码如下:
# 对每个编码与数据库人脸进行比对
self.face_names = []
know_ids = []
for face_encoding in face_encodings:
matches = face_recognition.compare_faces(known_encodings, face_encoding, tolerance=0.5)
if True in matches:
first_match_index = matches.index(True)
name = face_datas[first_match_index][1]
know_ids.append(face_datas[first_match_index][0])
else:
name = "unknown"
self.face_names.append(name)
基于上述原理,为了便于展示与学习。博主最终开发出了一套完整的UI界面可以进行人脸识别、人员信息管理系统软件、打卡信息管理等功能的软件。完整的UI界面、测试图片视频、代码文件,均已打包上传,感兴趣的朋友可以通过下载链接获取。
【获取方式】
本文涉及到的完整全部程序文件:包括python源码、UI文件等(见下图),获取方式见文末:
注意:该代码采用Pycharm+Python3.8开发,运行界面的主程序为
main.py
(不含登录界面);login_main.py
(含登录界面)。为确保程序顺利运行,请按照requirements.txt配置Python依赖包的版本。具体请参考资源中的环境配置文档。
关注下方名片【阿旭算法与机器学习】,回复【人脸识别】可获取下载方式
结束语
以上便是博主开发的关于人脸识别与人员信息管理软件的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正。
关于本篇文章大家有任何建议或意见,也欢迎在评论区留言交流!
觉得不错的小伙伴,感谢点赞、关注加收藏哦!更多精彩内容持续更新…