该项目通过读取笔记本电脑内置摄像头的画面,在调用开源人脸识别库 face_recognition 中的函数的基础上实现了简单的人脸识别及活体检测功能。
本项目仅为人脸识别等功能的具体实现,不包含其中的原理
- 找出每一帧图像中的主要人脸(即面积最大的人脸)并进行识别
- 以眨眼和张嘴动作进行活体判定
- 若识别过程中主要人脸发生变化,新的脸会被重新认定为假人
- Python 3.3+ or Python 2.7
请务必参考开源项目 face_recognition 中Installation栏目中的的需求,里面有不同系统安装face_recognition的具体教程
- 获取人脸特征点,计算
ear
(eye aspect ratio, 眼睛纵横比 )和mar
(mouth aspect ratio, 嘴巴纵横比) - 当
ear
小于一定阈值ear_threshold
时,判定人物闭眼 - 当
mar
大于一定阈值mar_threshold
时,判定人物嘴巴张开 - 眼睛闭上超过一帧后再睁开算作一次眨眼
- 嘴巴张开超过一帧后再合上算作一次张嘴
- 能眨眼且能张嘴才会被认定为真人
real
,否则为假人fake
眨眼动作过快,摄像头可能无法捕捉到闭眼的图像
face_recognition
库中返回人脸特征点的函数face_landmarks
返回的字典(dictionary)中将嘴巴分为了上嘴唇“top_lip”
和“bottom_lip”
两个部分。为了直接得到整个嘴巴的特征点,方便后续对嘴巴纵横比的计算,新定义了函数face_landmarks_2
,函数执行内容与face_landmarks
相同,返回值在face_landmarks
的基础上加入了键"mouth"
,对应的值为20个嘴部特征点。
-
复制本项目中
face_landmarks_2.py
文件中的所有代码 -
在本机的python安装目录中找到
face_recognition
库的安装目录例:C:\python3\Lib\site-packages\face_recognition
-
打开该目录中的
api.py
文件,将复制的内容粘贴至最后,保存 -
打开该目录中的
__init__.py
文件,在from .api import
的末尾加上”, face_landmarks_2“,保存示例:
from .api import load_image_file, face_locations, batch_face_locations, face_landmarks, face_encodings, compare_faces, face_distance, face_landmarks_2
-
打开本项目中的
main_function.py
文件 -
找到该行代码,将路径改为本机上存有人脸照片的文件夹路径
# 例: path = 'C:\\Users\\windows\\Desktop\\SRTP_FILE\\demo\\pictures'
文件夹内容如下:
注:加载已知人脸图片后,已知人名列表由人脸图片名自动生成
-
运行程序
-
按下英文字母
q
退出程序
本项目中main_function.py
文件为主体,sub_functions.py
文件包含了额外编写的有关活体检测等功能的函数