【Face Recognition人脸识别】3. 单张图片人脸识别

我们将使用7行代码实现python人脸识别

【 1. 读取图片 】

与前面不同,因为是识别图片,所以我们需要分别读取已知名字图片和未知名字图片:

known_image = face_recognition.load_image_file("picture1.jpg")
unknown_image = face_recognition.load_image_file("picture2.jpg")

【 2. 获取128维的特征向量 】

可以使用 face_encodings 函数对人脸进行编码,获取到对应128维的人脸特征向量:

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

#	face_image:包含单个或者多个人脸的图片对象;
#	known_face_locations:可选值,已经知道名字的人脸位置;
#	num_jitters:当计算编码时,进行多少次的re-sample操作,次数越多,越精准(但同时会更慢,例如,值为100时,会慢100倍)。

分别对已知名字的人脸和未知名字的人脸,进行编码,如下:

cyx_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

【 3. 比较特征向量 】

最后,使用 compare_faces函数,比较已经人脸与未知人脸之间特征向量:
如果未知图片高于指定的容错率阈值,将会返回真(True);
如果低于指定的阈值,将会返回假(False)。

compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

#	known_face_encodings:已知人脸特征向量的数组;
#	face_encoding_to_check:一个用于与已知向量相比较的未知人脸特征向量;
#	tolerance:容错率,默认的容错率是0.6,容错率越低,识别越严格准确。
#	如果未知图片高于指定的容错率阈值,将会返回真(True);如果低于指定的阈值,将会返回假(False)。

results = face_recognition.compare_faces([cyz_encoding], unknown_encoding, tolerance=0.4)

容错值的选取:

  • 若识别同一个人错误时,应当增大容错值。让识别不太严格。
  • 若识别不同的人错误时,应当减小容错值。让识别严格起来。
  • 综合以上两种方法选取不同的容错值进行测试(一般是0.7左右)。

【 4. 范例 】

1. 代码

import face_recognition
# 导入图片
known_image_cyz = face_recognition.load_image_file("picture1.jpg")
unknown_image = face_recognition.load_image_file("picture2.jpg")
# 编码获取128维特征向量
cyz_encoding = face_recognition.face_encodings(known_image_cyz)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
# 比较特征向量值,识别人脸
results = face_recognition.compare_faces([cyz_encoding], unknown_encoding, tolerance=0.5)
# 打印结果
print(results)

2. 容错值测试

picture1:
【Face Recognition人脸识别】3. 单张图片人脸识别_第1张图片
picture2:
【Face Recognition人脸识别】3. 单张图片人脸识别_第2张图片
picture3:
【Face Recognition人脸识别】3. 单张图片人脸识别_第3张图片
picture4:
【Face Recognition人脸识别】3. 单张图片人脸识别_第4张图片

  • 我们先令容错值为1:

让已知图片picture1 和 待识别图片picture2比较:可知是同一人,测试结果正确
【Face Recognition人脸识别】3. 单张图片人脸识别_第5张图片
让已知图片picture1和待识别图片picture3比较:可知是同一人,测试结果正确
【Face Recognition人脸识别】3. 单张图片人脸识别_第6张图片
让已知图片picture1和待识别图片picture4比较:可知是同一人,测试结果错误
【Face Recognition人脸识别】3. 单张图片人脸识别_第7张图片

  • 因此我们适当减小容错值,让它为0.5,让它识别更严格

让已知图片picture1 和 待识别图片picture2比较:可知是同一人,测试结果正确
【Face Recognition人脸识别】3. 单张图片人脸识别_第8张图片
让已知图片picture1和待识别图片picture3比较:可知是同一人,测试结果正确
【Face Recognition人脸识别】3. 单张图片人脸识别_第9张图片
让已知图片picture1和待识别图片picture4比较:可知不是同一人,测试结果正确。
【Face Recognition人脸识别】3. 单张图片人脸识别_第10张图片

你可能感兴趣的:(Python,机器视觉)