我们将使用7行代码实现python人脸识别
与前面不同,因为是识别图片,所以我们需要分别读取已知名字图片和未知名字图片:
known_image = face_recognition.load_image_file("picture1.jpg")
unknown_image = face_recognition.load_image_file("picture2.jpg")
可以使用 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]
最后,使用 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)
容错值的选取:
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)
picture1:
picture2:
picture3:
picture4:
让已知图片picture1 和 待识别图片picture2比较:可知是同一人,测试结果正确
让已知图片picture1和待识别图片picture3比较:可知是同一人,测试结果正确
让已知图片picture1和待识别图片picture4比较:可知是同一人,测试结果错误
让已知图片picture1 和 待识别图片picture2比较:可知是同一人,测试结果正确
让已知图片picture1和待识别图片picture3比较:可知是同一人,测试结果正确
让已知图片picture1和待识别图片picture4比较:可知不是同一人,测试结果正确。