0.引言
利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的;
可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建预设人脸特征;
根据抠取的 / 已有的同一个人多张人脸图片提取128D特征值,然后计算该人的128D特征均值;
然后和摄像头中实时获取到的人脸提取出的特征值,计算欧氏距离,判定是否为同一张人脸;
人脸识别 / face recognition的说明:
wikipedia 关于人脸识别系统 / face recognition system 的描述:theywork by comparing selected facial featuresfrom given image with faces within a database.
本项目中就是比较 预设的人脸的特征和 摄像头实时获取到的人脸的特征;
核心就是提取128D人脸特征,然后计算摄像头人脸特征和预设的特征脸的欧式距离,进行比对;
效果如下(摄像头认出来我是default_person预设的人脸 / 另一个人不是预设人脸显示diff):
图1 摄像头人脸识别效果gif
1.总体流程
先说下 人脸检测 (face detection) 和 人脸识别 (face recognition) ,前者是达到检测出场景中人脸的目的就可以了,而后者不仅需要检测出人脸,还要和已有人脸数据进行比对,识别出是否在数据库中,或者进行身份标注之类处理,人脸检测和人脸识别两者有时候可能会被理解混淆;
我的之前一些项目都是用dlib做人脸检测这块,这个项目想要实现的功能是人脸识别功能,借助的是 dlib官网中 face_recognition.py这个例程 (link:http://dlib.net/face_recognition.py.html);
核心在于 利用 “dlib_face_recognition_resnet_model_v1.dat” 这个model,提取人脸图像的128D特征,然后比对不同人脸图片的128D特征,设定阈值计算欧氏距离来判断是否为同一张脸;
# face recognition model, the object maps human faces into 128D vectorsfacerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat") shape = predictor(img, dets[0])face_descriptor = facerec.compute_face_descriptor(img, shape)
图2 总体设计流程
2.源码介绍
主要有
这三个py文件;
2.1get_face_from_camera.py / 采集构建XXX人脸数据
人脸识别需要将 提取到的图像数据 和已有图像数据进行比对分析,所以这个py文件实现的功能就是采集构建XXX的人脸数据;
新闻热点
疑难解答