进行到这里就不得不去讲一下face_recognition的一些应用原理,下面是我的一些总结,如有不当欢迎指教。
face_recognition模块人脸识别应用实现的原理:
(1) 给定想要识别的人脸的图片并对其进行编码(每个人只需要一张),并将这些不同的人脸编码构建成一个列表。编码其实就是将人脸图片映射成一个128维的特征向量。
(2) 计算图像向量之间的相似度根据阈值或者是容错度来决定是否是同一个人
(3) 输出识别结果标签。
毫不夸张地说,face_recognition整个的核心就在于这一块的向量化处理中,输入的每一张人脸图像都会被转化为一个128维的特征向量进行存储,128维特征向量的生成也是一个算法在里面的感兴趣的话可以去查一下深入了解一下,我这里就不展开了,之后的人脸识别就转化为了两个人脸图像之间向量相似度的问题了。
这里使用一张成龙大哥的图像来进行测试,原始图像如下所示:
向量化结果如下:
如果自己想要构建自己的个性化应用的话一般会选择在这里进行改造,首先就是需要保存这里的特征向量。
4、输入两张人脸图像,判断是否是同一个人
def demoFunc(one_pic=‘c1.jpg’,two_pic=‘c2.jpg’):
‘’’
给定两张图片,判断是否是同一个人
‘’’
chenglong = face_recognition.load_image_file(one_pic)
unknown_image = face_recognition.load_image_file(two_pic)
biden_encoding = face_recognition.face_encodings(chenglong)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
print('results: ',results)
return results[0]
这里其实跟上面第三部分的有点相似,这部分是建立在第三部分基础上的只不过是自带了compare_faces这个相似度计算接口,这里其实可以自己去实现替换的。
同样,使用了两张成龙大哥的图像来进行测试,原始图像如下所示: