基于face_recognition的人脸识别

 

 

目录

一.简要介绍

二.相关函数

三.算法流程

四.代码实现

五.效果展示


一.简要介绍

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:对比阈值,即两张脸之间有多少距离才算匹配。

你可能感兴趣的:(人脸识别,人工智能,opencv,计算机视觉)