使用OpenCV和Keras进行面部比较(不识别或检测)?

时间:2017-09-12 04:55:56

标签: python opencv neural-network convolution face-recognition

首先,我的是github link for the question

这是我的问题:

我想使用Python进行面部比较功能。我可以使用OpenCV成功(?)识别人脸。现在,如何进行比较?

我的理解是:

在一般的机器学习方法中,我需要收集关于该特定人的大量数据并使用CNN完成它。

然而,我只有2张图片,我该怎么做比较?我应该在分类或聚类方面考虑它(使用KNN)吗?

非常感谢您提供所有帮助。

2 个答案:

答案 0 :(得分:10)

您可以使用面部嵌入的概念,例如在高度引用的论文FaceNet中提出并在OpenFace中实施(也是预先训练过的)。

一般的想法:采取一些预处理的面(正面,裁剪,......)并将其嵌入到具有特征的较低维度,输入中的相似面应该在输出中具有低欧氏距离。

所以在你的情况下:使用embedding-CNN将你的脸部映射到缩小的空间(通常是大小为128的向量)并计算距离在欧几里德空间中。当然你也会聚集面孔,但这不是你的任务。

除了一般的想法之外,这里的好处是:openface是一个很好的实现,可以使用它的主页也解释了这个想法:

  

使用深度神经网络在128维单位超球面上表示(或嵌入)面部。

     

嵌入是任何人脸上的通用表示。与其他面部表示不同,这种嵌入具有很好的特性,即两个面嵌入之间的距离越大意味着面部可能不是同一个人。

     

此属性使得聚类,相似性检测和分类任务比其他特征之间的欧几里德距离无意义的人脸识别技术更容易。

他们甚至进行了比较演示here

答案 1 :(得分:4)

您需要了解面部的相似性指标。它将允许提取良好的特征以区分不同的人。然后,您将能够找到它们之间的不相似(距离)。您可以更详细地阅读here。 kNN和这样的东西对于找到相似面部的组很有用,但它需要使用之前提取的特征。