使用 OpenCV 和 Keras 进行人脸比较(不是识别或检测)?

Posted

技术标签:

【中文标题】使用 OpenCV 和 Keras 进行人脸比较(不是识别或检测)?【英文标题】:Face comparison (Not recognition or detection) using OpenCV and Keras? 【发布时间】:2018-02-20 10:22:16 【问题描述】:

首先是我的github link for the question。

这是我的问题:

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

我的理解是这样的:

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

但是,我只有 2 张图片,如何进行比较?我应该考虑分类还是聚类(使用 KNN)?

非常感谢您的所有帮助。

【问题讨论】:

【参考方案1】:

您可以使用人脸嵌入的想法,例如在高被引论文FaceNet 中提出并在OpenFace 中实现(也经过预训练)。

总体思路:取一些经过预处理的人脸(正面、裁剪、...)并将其嵌入到具有特征的某个较低维度,即输入中相似的人脸在输出中应该具有较低的欧几里德距离。

所以在你的情况下:使用嵌入 CNN 将你的脸映射到缩小的空间(通常是大小为 128 的向量)并像在欧几里得空间中一样计算距离。当然,那时你也会对面孔进行聚类,但这不是你的任务。

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

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

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

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

他们甚至有一个比较演示here。

【讨论】:

【参考方案2】:

您需要学习人脸的相似度度量。它将允许提取有利于区分不同人的特征。然后,您将能够找到它们之间的差异(距离)。例如,您可以更详细地阅读here。 kNN 之类的东西对于查找相似的人脸组很有用,但它需要使用之前提取的特征。

【讨论】:

【参考方案3】:

使用face_recognition 库(比较人脸特征)。它将比较面部特征的编码并返回布尔值。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于使用 OpenCV 和 Keras 进行人脸比较(不是识别或检测)?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 和 opencv 进行人脸识别 [关闭]

使用OpenCVKeras和TensorFlow进行微笑检测

opencv人脸识别用哪种方法比较好?Eigenfaces?Fisherfaces?LBP?

keras 入门整理 如何shuffle,如何使用fit_generator

牛逼!大神用OpenCV/Keras/TensorFlow实现口罩检测

openCV实战项目--人脸考勤