Algorithm 寻找相似面孔的算法?

Algorithm 寻找相似面孔的算法?,algorithm,computer-vision,Algorithm,Computer Vision,我正在做一个个人项目,试图找到一个人的相貌,因为数据库中有其他人的照片,所有照片都是以一致的方式拍摄的——人们直视摄像机,表情中立,不歪头(想想护照照片) 我有一个在脸上放置二维坐标标记的系统,我想知道在这种方法下,是否有任何已知的方法可以找到类似的脸 我发现了以下面部识别算法: 但是,没有一个专门负责寻找相像的人 谢谢你的时间。这两个问题看起来是相同的,但我不在这个领域工作。您基本上有以下两个问题: 人脸识别:取一张脸,试着把它和一个人匹配起来 寻找相似的脸:取一张脸并尝试寻找相似的脸 这些

我正在做一个个人项目,试图找到一个人的相貌,因为数据库中有其他人的照片,所有照片都是以一致的方式拍摄的——人们直视摄像机,表情中立,不歪头(想想护照照片)

我有一个在脸上放置二维坐标标记的系统,我想知道在这种方法下,是否有任何已知的方法可以找到类似的脸

我发现了以下面部识别算法:

但是,没有一个专门负责寻找相像的人


谢谢你的时间。

这两个问题看起来是相同的,但我不在这个领域工作。您基本上有以下两个问题:

  • 人脸识别:取一张脸,试着把它和一个人匹配起来

  • 寻找相似的脸:取一张脸并尝试寻找相似的脸

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


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

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


    例如,如果可以测量眼睛之间的距离,则可以找到具有相同距离的面。然后,您可以找到整体最匹配的面并返回该面

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

    严格地说,这两个词在科学文献中实际上是不同的,但有时会被归为人脸识别。有关它们之间差异的详细信息和一些示例代码,请查看以下内容:

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

    虽然上面的方法很容易编码,但它通常不如某些更复杂的方法那么健壮,因为当面未对齐时,它们通常会失败(称为无约束姿势。搜索“野外标记的面”以查看此问题的最新结果。)或者在不同的环境条件下服用。但是,如果数据库中的面是对齐的,并且是在与您提到的类似的条件下拍摄的,那么它可能会正常工作。如果未对齐,可以使用您提到的可以计算的面关键点对齐面。一般来说,比较未对齐的人脸是计算机视觉中一个非常困难的问题,也是一个非常活跃的研究领域。但是,如果你只考虑相貌相同、姿势相似的面孔(即在姿势和外观上相似),那么这不应该是个问题。 您提供的网站有指向特征脸和鱼脸代码的链接。这些基本上是计算人脸图像特征向量的两种方法。通过在数据库中对具有最接近查询图像的特征向量(分别使用PCA和LDA计算)的人脸进行K近邻搜索来识别人脸

    我可能还应该提到,在Fisherfaces方法中,您需要为数据库中的面设置“标签”,以识别面。这是因为在鱼面中使用的分类方法线性判别分析(LDA)需要这些信息来计算投影矩阵,该矩阵将为相近的相似面和相距较远的不同面投影特征向量。然后对这些投影向量进行比较。人脸识别和人脸验证的区别在于:为了识别,你需要在你的数据库中有训练图像的“标签”,也就是说,你需要识别它们。 为了验证,您只需要尝试判断任何两张给定的脸是否属于同一个人。通常,您不需要传统意义上的“标记”数据(尽管有些方法可能使用辅助训练数据来帮助面部验证)

    计算特征面和鱼面的代码在OpenCV中提供,以备您使用

    作为旁注: 特征向量实际上只是线性代数意义上的向量。它只是n个数字组合在一起。“特征”一词指的是类似于“统计”的东西,即特征向量是一个包含统计信息的向量,该统计信息描述了它所代表的对象的特征。例如,对于人脸识别任务,最简单的特征向量是人脸灰度图像的强度值。在这种情况下,我只需将2D数字数组重塑为n行乘以1列向量,每个条目包含一个像素的值。这里的像素值是“特征”,像素值的nx1向量是特征向量。在LBP情况下,粗略地说,它计算图像中像素小块的直方图,并将这些直方图合并成一个直方图,然后将其用作特征向量。因此,本地二进制Pa