目录
一.简要介绍
二.相关函数
三.算法流程
四.代码实现
五.效果展示
face_recognition 是一个基于Python的开源人脸识别库,它使用dlib库中的深度学习模型来实现人脸识别功能。这个库以其简洁的API和高效的性能而广受欢迎,成为许多开发者和研究者的首选工具。face_recognition库的主要功能包括:
1. 人脸检测:识别图像中所有的人脸并返回其位置信息。
2. 人脸编码:将检测到的人脸转换成128维的向量,这个向量可以用于比较人脸。
3. 人脸比较:比较两个人脸编码的相似度,判断是否为同一人。
face_recognition库在Labeled Faces in the Wild(LFW)人脸数据集上的离线识别率高达到99.38%,显示了其高精度的识别能力。此外,该库还支持从图像或视频中识别特定的人脸。face_recognition库不仅支持离线识别,还具备实时处理的能力,可以轻松集成到各种网络应用中。它兼容Python 2.7和Python 3.3+,并且支持macOS和Linux操作系统,虽然Windows不是官方支持的,但某些解决方案可能使其在Windows上也能运行。总的来说,face_recognition是一个功能强大且易于使用的人脸识别工具,适用于多种应用场景。
face_recognition官方API文档:https://pypi.org/project/face_recognition/
(1)图像载入函数——load_image_file
load_image_file(file,mode='RGB')
加载一个图像文件到一个numpy array类型的对象上
flie:待加载的图像文件名字
mode:转换图像的格式,只支持'RGB'(8位RGB,3通道)和'L‘(黑白)
返回值:一个包含图像数据的numpy array类型的对象
(2)人脸定位函数——face_locations
face_locations(face_image,number_of_times_to_upsample=1,model='hog')
利用CNN深度学习模型或者方向梯度直方图(Histogram of Oriented Gradient,HOG)进行人脸提取。返回值是一个数组(top,right,bottom,left)表示人脸所在边框的四条边的位置
face_image:输入的人脸图像
number_of_times_to_upsample=1:从图片样本中查找多少次人脸,该参数的值越高越能发现更小的人脸
model='hog':使用哪种人脸检测模型。'hog'准确率并不是很高,但是在CPU上运行更快。'cnn'更准确更深度,支持GPU/CUDA加速。默认参数为'hog'
返回值:一个元组列表,列表中的每个元组包含人脸的四边位置(top,right,bottom,left)
批次人脸定位函数(GPU)——batch_face_locations
batch_face_locations(face_images,number_of_times_to_upsample=1,batch_size=128)
使用CNN人脸检测器返回一个包含人脸特征的二维数组,如果使用了GPU,这个函数能够更快速的返回结果;如果不使用GPU的话,该函数就没必要使用
face_images:输入多张人脸图像组成的list,每个成员都是一个numpy array类型
number_of_times_to_upsample=1:同上
batch_size=128:每个GPU一次批处理多少个image
返回值:
一个元组列表,列表中的每个元组包含人脸的四边位置(top,right,bottom,left)
(3)人脸特征提取函数——face_landmarks
face_landmarks(face_image,face_locations=None,model="large")
给定一个图像,提取图像中每个人脸的脸部特征位置
face_image:输入的人脸图片
face_locations=None:可选参数,默认值为None,代表默认解码图片中的每一个人脸。若输入face_locations()[i]可指定人脸进行解码
model="large":输出的特征模型,默认为“large”,可选“small”。当选择为"small"时,只提取左眼、右眼、鼻尖这三种脸部特征。68个关键点or5个关键点
返回值:
返回值类型为:List[Dict[str,List[Tuple[Any,Any]]]],是由各个脸部特征关键点位置组成的字典记录列表,一个Dict对象对应图片中的一个人脸,其key为某个脸部特征(如输出中的nose_bridge、left_eye等),value是由该脸部特征各个关键点位置组成的List,关键点位置是一个Tuple(比如nose_bridge对应的关键点位置组成的列表为[(881L, 128L), (880L, 141L), (880L, 154L), (879L, 167L)] )
(4)人脸编码函数——face_encodings
face_encodings(face_image,known_face_locations=None,num_jitters=1)
给定一个图像,返回图像中每个人脸的128脸部编码(特征向量)
face_image:输入的人脸图像
known_face_locations:可选参数,如果已知每个人脸所在的边界框
num_jitters=1:在计算编码时要重新采样的次数。越高越准确,但速度越慢(100就慢100倍)
返回值:
一个128维的脸部编码列表
(5)人脸特征向量距离函数——face_distance
face_distance(face_encodings,face_to_compare)
给定一组面部编码,将它们与已经的面部编码进行比较,得到欧氏距离。对于每一个比较的脸,欧氏距离代表这些脸有多相似。
face_encodings:输入的人脸图片
face_to_compare:待进行对比的单张人脸编码数据
tolerance:对比阈值,即两张脸之间有多少距离才算匹配。