7

我正在做一个个人项目,试图找到一个人的相似之处,给定一个其他人的照片数据库,所有这些照片都是以一致的方式拍摄的——人们直视相机,表情中性,头部没有倾斜(想想护照照片)。

我有一个系统可以在脸上放置 2d 坐标的标记,我想知道是否有任何已知的方法可以在给定这种方法的情况下找到与该脸相似的外观?

我发现了以下面部识别算法: http: //www.face-rec.org/algorithms/

但没有人处理寻找相似物的具体任务。

谢谢你的时间。

4

3 回答 3

6

我相信你也可以尝试搜索“人脸验证”而不仅仅是“人脸识别”。这可能会给你更多相关的结果。

严格来说,这两者在科学文献中实际上是不同的东西,但有时被归为人脸识别。有关它们的差异和一些示例代码的详细信息,请查看此处:http ://www.idiap.ch/~marcel/labs/faceverif.php

但是,出于您的目的,Edvard 和 Ari 等其他人提出的建议也可以。基本上,他们建议使用 K-最近邻风格的人脸识别分类器。首先,您可以尝试一下。首先,为数据库中的每个人脸图像计算一个特征向量。一种可能使用的特性是本地二进制模式 (LBP)。您可以通过谷歌搜索找到代码。对您的查询图像执行相同的操作。现在,遍历所有特征向量,并使用欧几里德距离将它们与查询图像的特征向量进行比较,并返回 K 个最近的特征向量。

虽然上述方法很容易编码,但它通常不会像一些更复杂的方法那样健壮,因为当面部未对齐时它们通常会失败(称为无约束姿势。搜索“Labeled Faces in the Wild”以查看此问题的最新结果。)或在不同的环境条件下获取。但是,如果您数据库中的人脸是在您提到的类似条件下对齐并拍摄的,那么它可能会起作用。如果它们未对齐,您可以使用您提到的可以计算的面关键点来对齐面。一般来说,比较未对齐的人脸是计算机视觉中的一个非常困难的问题,并且仍然是一个非常活跃的研究领域。但是,如果你只考虑看起来相似且姿势相同的面孔相似(即

您提供的网站有指向 Eigenfaces 和 Fisherfaces 代码的链接。这些本质上是为您的面部图像计算特征向量的两种方法。通过对数据库中的特征向量(分别使用 PCA 和 LDA 计算)最接近查询图像的特征向量进行 K 最近邻搜索来识别人脸。

我可能还应该提到,在 Fisherfaces 方法中,您需要为数据库中的人脸添加“标签”以识别人脸。这是因为线性判别分析 (LDA),Fisherfaces 中使用的分类方法,需要这些信息来计算一个投影矩阵,该矩阵将为靠近在一起的相似面孔和相距很远的不同面孔投射特征向量。然后对这些投影向量进行比较。这就是人脸识别和人脸验证之间的区别:为了识别,您需要在数据库中为您的训练图像“标记”,即您需要识别它们。为了验证,您只是试图判断任何 2 个给定的面孔是否属于同一个人。通常,您不需要“标记”

计算 Eigenfaces 和 Fisherfaces 的代码可以在 OpenCV 中找到,以防你使用它。

附带说明:特征向量实际上只是线性代数意义上的向量。它只是将 n 个数字打包在一起。“特征”一词指的是类似于“统计”的东西,即特征向量是包含表征其所代表对象的统计数据的向量。例如,对于人脸识别任务,最简单的特征向量是人脸灰度图像的强度值。在这种情况下,我只是将 2D 数字数组重塑为一个行乘 1 列的向量,每个条目包含一个像素的值。这里的像素值就是“特征”,像素值的nx 1向量就是特征向量。在 LBP 的情况下,粗略地说,它计算图像中小块像素的直方图,并将这些直方图连接在一起形成一个直方图,然后将其用作特征向量。所以局部二进制模式是统计量,连接在一起的直方图是特征向量。他们一起描述了你脸部的“纹理”和面部图案。

希望这可以帮助。

于 2013-01-03T05:52:09.637 回答
0

这两个似乎是等效的问题,但我不在该领域工作。你基本上有以下两个问题:

  1. 人脸识别:取一张脸并尝试将其与人匹配。

  2. 寻找相似的面孔:取一张面孔并尝试找到相似的面孔。

这些不是等价的吗?在 (1) 中,您从要与所有者匹配的图片开始,然后将其与您认识的每个人的参考图片数据库进行比较。在 (2) 中,您在参考数据库中选择一张图片,然后针对该图片与数据库中的其他图片运行 (1)。

由于算法似乎可以衡量两张照片属于同一个人的可能性,因此在 (2) 中,您只需按降序对衡量标准进行排序,然后选择最热门的照片。

于 2013-01-03T04:47:08.740 回答
0

我假设您应该首先使用您使用的任何方法分析数据库中的所有图片。然后,您应该为每张图片设置一组指标,您可以将其与特定图片进行比较,并在统计上找到最接近的匹配项。

例如,如果您可以测量眼睛之间的距离,则可以找到具有相同距离的面孔。然后,您可以找到总体上最接近匹配的人脸并将其返回。

于 2013-01-03T04:58:32.227 回答