8行代码中的人脸检测,识别和情感检测!

2019-06-21 17:06:30 浏览数 (1)

作者 | Priya Dwivedi

来源 | Towards Data Science

编辑 | 代码医生团队

介绍

人类总是具有识别和区分面部的天生能力。现在计算机能够做到这一点。这开辟了大量的应用程序。人脸检测和识别可以用来改善访问和安全性,就像最新的Apple Iphone一样,允许在没有物理卡的情况下处理付款 - iphone也这样做!,启用犯罪识别并允许个性化的医疗保健和其他服务。人脸检测和识别是一个研究很多的话题,网上有大量的资源。已经尝试了多个开源项目,以找到最准确实现的项目。还创建了一个管道,用于在加载图像后只需8行代码就任何输入图像进行检测,识别和情感理解!代码是开源的Github。

https://github.com/priya-dwivedi/face_and_emotion_detection

本博客分为3部分:

  1. 面部检测 - 能够检测任何输入图像或帧中的面部位置。输出是检测到的面的边界框坐标
  2. 面部识别 - 将多个面部进行比较以识别哪些面部属于同一个人。这是通过比较面嵌入向量来完成的
  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

0 人点赞