作者 | Priya Dwivedi
来源 | Towards Data Science
编辑 | 代码医生团队
介绍
人类总是具有识别和区分面部的天生能力。现在计算机能够做到这一点。这开辟了大量的应用程序。人脸检测和识别可以用来改善访问和安全性,就像最新的Apple Iphone一样,允许在没有物理卡的情况下处理付款 - iphone也这样做!,启用犯罪识别并允许个性化的医疗保健和其他服务。人脸检测和识别是一个研究很多的话题,网上有大量的资源。已经尝试了多个开源项目,以找到最准确实现的项目。还创建了一个管道,用于在加载图像后只需8行代码就任何输入图像进行检测,识别和情感理解!代码是开源的Github。
https://github.com/priya-dwivedi/face_and_emotion_detection
本博客分为3部分:
- 面部检测 - 能够检测任何输入图像或帧中的面部位置。输出是检测到的面的边界框坐标
- 面部识别 - 将多个面部进行比较以识别哪些面部属于同一个人。这是通过比较面嵌入向量来完成的
- 情绪检测 - 将脸上的情绪分类为快乐,愤怒,悲伤,中立,惊讶,厌恶或恐惧
面部检测
面部检测是管道的第一部分。使用了python库Face Recognition,发现它易于安装并且在检测面部时非常准确。此库扫描输入图像并返回所有检测到的面的边界框坐标,如下所示:
人脸检测
下面的代码段显示了如何使用face_recognition库来检测面部。
代码语言:javascript复制face_locations = face_recognition.face_locations(image)
top, right, bottom, left = face_locations[0]
face_image = image[top:bottom, left:right]
有关安装人脸识别和使用它的完整说明也在Github上
https://github.com/priya-dwivedi/face_and_emotion_detection
面部识别
面部识别验证两个面是否相同。面部识别的使用在安全性,生物指标,娱乐,人身安全等方面是巨大的。用于面部检测的相同python库face_recognition也可以用于面部识别。我们的测试显示它具有良好的性能。给定两个面匹配,它们可以相互匹配,结果为True或False。面部识别涉及的步骤是
https://github.com/ageitgey/face_recognition
- 在图像中查找面部
- 分析面部特征
- 比较2个输入面的特征
- 如果匹配则返回True,否则返回False。
执行此操作的代码段如下所示。为两个面创建面编码矢量,然后使用内置函数来比较矢量之间的距离。
代码语言:javascript复制encoding_1 = face_recognition.face_encodings(image1)[0]
encoding_2 = face_recognition.face_encodings(image1)[0]
results = face_recognition.compare_faces([encoding_1], encoding_2,tolerance=0.50)
在下面两张图片上测试模型:
面部1
面部2
如图所示有两张不同姿势的莱昂纳多迪卡普里奥面孔。在第一个面部也不是正面镜头。当使用上面共享的代码运行识别时,人脸识别能够理解这两个面部是同一个人!
情绪检测
人类习惯于从面部情绪中获取非语言暗示。现在计算机也越来越好地阅读情感。那么如何检测图像中的情绪呢?使用了一个开源数据集 - 来自Kaggle的Face Emotion Recognition(FER),并构建了一个CNN来检测情绪。情绪可分为7类 - 快乐,悲伤,恐惧,厌恶,愤怒,中立和惊讶。
https://github.com/npinto/fer2013
模型 - 在Keras中构建了一个6层卷积神经网络(CNN),并使用图像增强来提高模型性能。尝试了许多不同的模型,并在此链接上开源了最好的实现。
可以使用以下两行代码加载预训练模型并在图像上运行它:
代码语言:javascript复制model = load_model("./emotion_detector_models/model.hdf5")
predicted_class = np.argmax(model.predict(face_image)
结论
这个博客演示了在应用程序中实现面部检测和识别模型是多么容易。面部检测可以作为许多定制解决方案的起点。希望尝试开源代码。
https://github.com/priya-dwivedi/face_and_emotion_detection
参考文献:
人脸识别库
https://github.com/ageitgey/face_recognition
FaceNet - 用于了解面部识别模型的构建方式
https://arxiv.org/abs/1503.03832
情绪检测数据集
https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data