仅使用2张图片进行自动面部验证

时间:2017-07-27 13:14:18

标签: image-processing machine-learning computer-vision

问题陈述:

给出两张图片,例如下面的布拉德皮特的两张图片,找出图片是否包含相同的人物。困难在于我们每个人只有一个参考图像,以及如果任何其他传入图像包含同一个人或不包含该图像的内容。

enter image description here

一些研究:

有几种不同的方法可以解决这个问题,这些方法是

  1. 使用颜色直方图
  2. 面向关键点的方法
  3. 使用深度卷积神经网络或其他ML技术
  4. 直方图方法涉及基于颜色计算直方图并在它们之间定义某种度量,然后确定阈值。我尝试过的是Earth Mover's Distance。然而,这种方法缺乏准确性。 因此,最佳方法应该是第二种和第三种方法之间的某种混合,以及一些预处理。

    对于预处理,要执行的明显步骤是:

    1. 运行Viola-Jones等面部检测并分隔包含面部的区域
    2. 将所述面转换为灰度
    3. 使用opencv
    4. 的haar_cascades运行眼,嘴,鼻子检测算法
    5. 根据找到的地标对齐脸部图像
    6. 所有这些都是使用opencv完成的。

      提取SIFT和MSER等功能可以产生73-76%的准确率。经过一些额外的研究后,我使用fisherfaces来看这篇论文。而且opencv现在能够创建fisherface探测器并对其进行训练这一事实非常棒,而且非常有效,可以达到论文对耶鲁数据集所承诺的准确性。

      问题的复杂性在于我的情况我没有包含同一个人的多个图像的数据库,以便训练探测器。我所拥有的只是一个与单个人相对应的单个图像,而另一个图像我想知道这是同一个人还是不同。

      所以我有兴趣知道的是` 有没有人尝试过这种类型的东西?我应该研究哪些论文/方法/图书馆?

      您对如何解决问题有什么建议吗?

4 个答案:

答案 0 :(得分:2)

由于您只有一个图像,因此您可以尝试使用DLib来提供此方法。我每人使用3-4张图片,效果很好。

  • 检测面部(sample_face)
  • 使用dlib compute_face_descriptor获取面部描述符(128 D向量)(检查link
  • 获取您要识别脸部的新图片
  • 检测面部并计算描述符(让我们调用test_face)。
  • 计算test_face描述符与所有sample_faces描述符之间的欧氏距离
  • 为test_face指定具有最小欧氏距离的类(人名)。

如果您开始取得好成绩,可以使用面部对齐。

答案 1 :(得分:0)

  

所以我有兴趣知道的是`有没有人尝试过任何事情   排序?

是。这是2017年,面部识别已经研究了几十年。

  

我应该研究哪些论文/方法/图书馆?

谷歌搜索任何东西时都会搜索"单个图像/样本面部识别"

  

您对如何解决问题有什么建议吗?

见上文

  

提取SIFT和MSER等功能可以产生73-76%的准确度。

我怀疑人类,只有1张图像作为参考,面部识别无法比拟的表现要好得多。我的意思是我无法确定那个布拉德皮特是否只是一个相似的东西,而且我已经看过他的照片和几小时的电影......

答案 2 :(得分:0)

这是计算机视觉领域的热门话题之一。如您所述,可以使用多种解决方案。

但我建议看OpenFace,它具有很高的准确性。在Github有一个项目的实现。

由于

答案 3 :(得分:0)

您需要了解机器学习并不是那么有效,在您的模型能够取得一些好成绩之前,需要进行强化培训。

对于一个人的单个图像,你无法预测它是同一个人,因为你需要在不同光强度,角度和许多其他不同场景下训练你的模型在人的不同图像上。

仍然我想试试这个链接: http://hanzratech.in/2015/02/03/face-recognition-using-opencv.html

你至少可以找到一些匹配的图像。