1、环境搭建
基于dlib库的人脸识别环境配置需求如下:
conda create -n dlibFace python=3.6.4
conda activate dlibFacepip install dlib==19.8.1
pip install opencv-python==3.4.1.15
pip install tqdm
- 安装如下:
2、模块介绍
2.1 源代码下载
源代码点击:下载源代码
2.2 源码文件介绍
- 下载下来的源代码模型解压后目录结构如下:
- 具体目录结构如下:
FaceRecognition_Dlib├─collect_face_data.py #离线图像采集├─config.py #配置文件├─face_recognition.py #离线人脸识别├─get_128_features.py #提取128纬特征向量├─LICENSE├─README.md├─realtime_collect_face_data.py #实时图像采集├─realtime_face_recognition.py #实时人脸识别├─data #数据│ ├─faceName.txt #人脸库名│ ├─csv│ │ └─features.csv #提取的128纬人脸特征数据│ ├─faceData 采集的人脸数据│ │ ├─person_0│ │ ├─person_1│ │ └─...│ ├─faceData_points #128纬特征可视化数据│ │ ├─person_0│ │ ├─person_1│ │ └─...│ └─video #待提取的数据文件夹│ └─...└─data_dlib #Dlib库中用于人脸特征提取和关键点检测的模型文件├─dlib_face_recognition_resnet_model_v1.dat└─shape_predictor_68_face_landmarks.dat
解释如下:
- 图像采集:
- collect_face_data.py:离线图像采集,即通过离线的视频即可采集人脸图像数据.
- realtime_collect_face_data.py:实时图像采集,通过实时的摄像头采集人脸图像数据.
- 配置文件:config.py
- 提取128纬特征向量:get_128_features.py :从人脸图像中提取128维特征向量,并将其保存到CSV文件中.
- 人脸识别:
- face_recognition.py:离线人脸识别,即通过离线的视频即可识别人脸的功能
- realtime_face_recognition.py:实时人脸识别,通过实时摄像头去实现人脸识别的功能.
- 各种数据:data
- faceName.txt :人脸库名,即里面是人脸数据每一个person_n人脸数据对应的每次,例如person_0里面存放的是"杨xx"的采集到的人脸图像,则该文件的第一行是"杨xx",以此类推.
- csv:features.csv提取的128纬人脸特征数据后保存的csv文件.
- faceData:采集的人脸数据:采集到的人脸数据库,每一个唯一面部占一个文件夹,例如person_0是采集到的第一个人脸数据,person_1是采集到的第二个人脸数据,以此类推.
- faceData_points :对每一个采集到的人脸数据(faceData文件夹下)进行128纬特征可视化数据,文件夹与faceData一一对应,即person_0\person_1等等以此类推.
- video:待提取的数据文件夹
- data_dlib:Dlib库中用于人脸特征提取和关键点检测的模型文件,下面有两个模型:(1)dlib_face_recognition_resnet_model_v1.dat:这是一个预训练的深度学习模型,用于从人脸图像中提取128维特征向量。它基于 ResNet 架构,能够提供高度准确的人脸特征描述。(2)shape_predictor_68_face_landmarks.dat:这是一个预训练的模型,用于检测人脸上的68个关键点(landmarks)。这些关键点包括眼睛、鼻子、嘴巴等面部特征点,对于人脸对齐和特征提取非常有用。
2.3 人脸识别的主要流程概括
人脸识别的主要流程:人脸采集-->提取128纬特征向量-->人脸识别,即:
人脸采集(collect_face_data.py\realtime_collect_face_data.py)-->提取128纬特征向量(get_128_features.py)-->人脸识别(face_recognition.py\realtime_face_recognition.py)
3、人脸采集
3.1 离线人脸采集
(1) 介绍
首先,准备一个视频,用于采集人脸面部数据,数据存放在./data/video/目录下,然后在collect_face_data.py文件下找到视频文件路径位置,把准备的视频的文件的路径替换上去,示例如下:
说明:准备的视频里面要能清晰的看到人物的脸,而且视频中只有一个人脸,视频示例如下:
(2) 人脸采集
- 第一步:点击运行collect_face_data.py:会出现如下画面
- 第二步:按键盘"n"键输入,创建文件夹,然后按在目标红框锁定人脸面部时,按"s"键进行保存,多保存几张,然后按"q"键结束采集,如下:
最终人像采集成功,采集到的人像保存在data/faceData/目录下,如下,因为我前面已经有三个人人像数据(即person_0\person_1\person_2),所以从第四个开始保存,即从person_3开始:
(3)标签配置
找到./data/faceName.txt文件打开,因为person_3是第四个人像采集文件,所以在faceName.txt文件中的第四行输入对应的人物名字,因为我这个是AI生成的视频,我暂且命名为"AI仙女",所以我在第四行中手动填入"AI仙女",如下:
注意:person_x和faceName.txt文件里面的人名必须是一一对应,即例如我的person_0文件夹里面是LiuDeHua的图像,则faceName.txt的第一行就是"LiuDeHua",person_1是"BingBing",则第二行就是"BingBing",以此类推.
3.2 实时人脸采集
(1)介绍
实时人脸采集用realtime_collect_face_data.py模块,实时人脸采集不需要事先准备视频,而是运行时打开摄像头采集摄像头前的实时人像.不过,值得注意的是,实时人像采集不需要像上述离线采集一样手动配置标签,而是运行该模块时,首先弹出框输入人物标签名字.
(2)实时人脸采集
- 第一步:点击运行realtime_collect_face_data.py模块:弹出如下GUI界面,手动输入当前所以采集的人像对应的名字,例如"YangMouMou":
- 第二步:点击ok后,就会打开摄像头开始采集人像:
会提示倒计时3秒,倒计时结束后开始采集当前摄像头面前的人像,采集人像的过程中自动创建文件夹自动采集人像,采集完成后会提示是否继续采集其他人像,点击yes是继续采集其他人像,点击no结束当前采集,如下图:
采集结束后在对应的文件夹下可以看到已经采集了5张图像,表示人像已经采集成功了:
打开faceName.txt文件,发现人物对应的名字已自动保存在该文件里面了,如下:
4、提取128纬特征向量
(1)介绍
运行get_128_features.py模块提取128纬特征向量,该模块的主要功能是从人脸图像中提取128维特征向量,并将其保存到CSV文件中。它支持两种模式:导入所有特征和仅更新部分特征。提取特征的过程中,还会绘制人脸框和关键点,并保存结果图像。
(2)提取128纬特征向量
- 第一步:点击运行该模块提取128纬特征向量,如下:
因为./data/faceData/目录下有五个人物的图像数据集,即分别是person_0到person_4,所以要对每一个文件夹下的人像都进行提取128纬的特征向量.
- 第二步:提取的128纬特征向量保存在./data/csv/目录下features.csv文件,如下:
- 第三步:绘制人脸框和关键点的图像保存在./data/faceData_points/目录下,如下:
5、人脸识别
5.1 离线人脸识别
(1)介绍
运行face_recognition.py模块进行人脸识别,是通过运行该模块去识别离线的视频或者人物的面部,视频可以进行多人识别.
(2)人脸识别
- 第一步:同理,替换需要识别的视频或者图像文件的路径,如下:
- 第二步:点击运行face_recognition.py模块进行人脸识别:
识别成功!!!
- 多人识别:该模块可以同时识别多个人
5.2 实时人脸识别
(1)介绍
运行realtime_face_recognition.py模块进行人脸识别,是通过运行该模块去实时识别人脸,即运行该模块打开当前摄像头,去实时的识别摄像头面前的人物,可以进行多人识别.
(2)实时人脸识别
- 第一步:点击运行realtime_face_recognition.py模块进行人脸识别:
人脸识别成功,至此人脸识别任务到处完成.