face_recognition进行人脸识别

赵开诚
2023-12-01

face_recognition:API详细

1.1 将图像文件(.jpg,.png等)加载到numpy数组中

2.face_recognition.load_image_file(file,mode ='RGB')
参数:
	file –图像文件名或要加载的文件对象
	mode –将图像转换成的格式。仅支持“ RGB”(8位RGB,3通道)和“ L”(黑白)。
返回值:
	图像内容为numpy数组

1.2 使用cnn人脸检测器

cnn人脸检测器返回图像中人脸边界框的2d数组。如果您使用的是GPU,由于GPU可以一次处理一批图像,因此可以更快地获得结果。如果您不使用GPU,则不需要此功能。

face_recognition.batch_face_locations(images,number_of_times_to_upsample = 1,batch_size = 128 )

参数:
	img –图片列表(每个图片为一个numpy数组)
	number_of_times_to_upsample –对图像进行脸部上采样的次数。数字越大,面孔越小。
	batch_size –每个GPU处理批次中要包含多少个图像。
返回值:
	以css(上,右,下,左)顺序找到的脸部位置的元组列表

1.3 将面部编码列表与候选编码进行比较,以查看它们是否匹配

face_recognition.compare_faces(known_face_encodings,face_encoding_to_check,tolerance = 0.6 )

参数:
	known_face_encodings –已知面部编码列表
	face_encoding_to_check –与列表进行比较的单一面部编码
	tolerance –认为相匹配的两张脸之间的距离。越低越严格。0.6是典型的最佳性能。
返回值:
	真/假值列表,指示哪些known_face_encodings与面部编码匹配以进行检查

1.4 给定面部编码列表

给定面部编码列表,将其与已知的面部编码进行比较,并获得每个比较面部的欧式距离。距离告诉您面孔的相似程度。

face_recognition.face_distance(face_encodings,face_to_compare )

参数:	
    face_encodings –要比较的人脸编码列表
    face_to_compare –要比较的人脸编码
返回值:
    一个numpy ndarray,每个面的距离与“ faces”数组的顺序相同

1.5 给定图像,返回图像中每个面部的128维面部编码。

face_recognition.face_encodings(face_image,known_face_locations = None,num_jitters = 1 )

参数:
	face_image –包含一个或多个面部的图像
	known_face_locations –可选-每个面的边界框(如果您已经知道的话)。
	num_jitters –计算编码时对面部重新采样的次数。越高越准确,但越慢(即100慢100倍)
返回值:
	128维面部编码列表(图像中的每个面部一个)

1.6 给定图像,返回图像中每个面部的面部特征位置(眼睛,鼻子等)的决定

face_recognition.face_landmarks(face_image,face_locations = None,model ='large' )

参数:
	face_image –要搜索的图像
	face_locations –(可选)提供要检查的面部位置列表。
	model –可选-使用哪种模型。“large”(默认)或“small”仅返回5点,但速度更快。
返回值:
	面部特征位置(眼睛,鼻子等)的字典列表

1.7 返回图像中人脸边界框的数组

face_recognition.face_locations(img,number_of_times_to_upsample = 1,model ='hog' )

参数:
	img –图片(以numpy数组形式)
	number_of_times_to_upsample –对图像进行脸部上采样的次数。数字越大,面孔越小。
	model –要使用的人脸检测模型。“ hog”精度较低,但在CPU上更快。“ cnn”是经过GPU / CUDA加速(如果可用)的更准确的深度学习模型。默认值为“hog”。
返回值:
	以css(上,右,下,左)顺序找到的脸部位置的元组列表

demo:

import face_recognition

lxt_image = face_recognition.load_image_file("candidate-faces/lxt.jpg")
zxc_image = face_recognition.load_image_file("candidate-faces/cl.jpg")
# 从已知图像中获取脸部编码特征
lxt_face_encoding = face_recognition.face_encodings(lxt_image)[0]
zxc_face_encoding = face_recognition.face_encodings(zxc_image)[0]
# 人脸特征库
known_encodings = [lxt_face_encoding, zxc_face_encoding]
# 标签库
face_lib_label=["lxt","cl"]
# 装载图片并获取其编码特征
image_to_test = face_recognition.load_image_file("candidate-faces/lxt.jpg")
image_to_test_encoding = face_recognition.face_encodings(image_to_test)[0]
# See how far apart the test image is from the known faces
face_distances = face_recognition.face_distance(known_encodings, image_to_test_encoding)
result=None
cd=None

for i, face_distance in enumerate(face_distances):
    print(face_distance)
    if face_distance < 0.1:
        result=i
        cd="A"
        break
    if face_distance <= 0.2 and face_distance >= 0.1:
        result = i
        cd = "B"
        break
    if face_distance > 0.2:
        continue

if cd=="A":
    print(face_lib_label[i]," 精确匹配!")
if cd=="B":
    print(face_lib_label[i]," 普通匹配!")
if result is None:
    print("人脸库中不存在!")
 类似资料: