当前位置: 首页 > 知识库问答 >
问题:

寻找相似面孔的算法?

佘俊茂
2023-03-14

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

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

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

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

谢谢你的时间。

共有3个答案

宗政子辰
2023-03-14

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

例如,如果可以测量眼睛之间的距离,则可以找到具有相同距离的脸。然后你可以找到最匹配的人脸并返回

满玉泽
2023-03-14

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

>

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

    寻找相似的面孔:取一张面孔,尝试寻找相似的面孔。

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

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

  • 阴培
    2023-03-14

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

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

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

    虽然上面的方法很容易编码,但它通常不像一些更复杂的方法那样鲁棒,因为当人脸不对齐(称为无约束姿势)时,它们通常会失败得很厉害。搜索“野外标记的人脸”,查看这个问题的最新结果。)或者在不同的环境条件下拍摄。但是如果你数据库中的人脸被对齐,并在你提到的类似条件下拍摄,那么它可能会起作用。如果它们没有对齐,你可以使用你提到的能够计算的人脸关键点来对齐人脸。总的来说,比较不对齐的人脸是计算机视觉中的一个非常困难的问题,并且仍然是一个非常活跃的研究领域。但是,如果你只考虑看起来相似并且姿势相同的人脸是相似的(即姿势和长相相似),那么这应该不成问题。

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

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

    如果你使用OpenCV,计算特征脸和渔夫脸的代码是可用的。

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

    希望这有帮助。

     类似资料:
    • 题目描述: 给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)。 相似单词说明:给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么定义Y是X的相似单词,如abc、bca即为相似单词(大小写是不同的字母,如a和A算两个不同字母)。 字典序排序: 大写字母<小写字母。同样大小写的字

    • 假设我有一个无向多图,即一个(G,E)对,其中G是一个有限的结点集,E是一个有限的边集。我正在寻找一个算法,将分配一个单一的字符串值到每个节点在以下的约束。 1. 每个节点都被赋予一组约束(可能是空的),这些约束限制了允许的值。我希望至少支持以下类型的值约束: null 有两种类型的边缘: 不同, 相同, 这意味着应该为相关节点分配不同/相同的值(意味着不相等/相等的字符串)。 null 这意味着

    • 问题内容: \ …用于多线程网络服务器。 我想在多个线程之间传递数据。目前,我正在使用套接字,主线程阻塞在select()上,而工作线程阻塞在recv()上,尽管我觉得可能有更高级或预包装的方式来处理C++中的此任务。 问题答案: 我会让工作线程在线程池中等待。 然后主机等待选择(用于读取和写入)。 随着数据的到来,主服务器将作业添加到线程池中。添加每个作业后,线程将唤醒以执行该作业并返回到池中。

    • 我有一组排列的数组,我想移除同构排列。 我们有 组排列,其中每个集合包含 个排列,每个排列表示为 元素的数组。我目前将其保存为数组,其中,和是固定的,N大于K。 如果存在将元素从< code>A转换为< code>B的置换< code>P,则两组置换< code>A和< code>B是同构的(例如,如果< code>a是集合< code>A的元素,则< code>P(a)是集合< code>B的元

    • 问题内容: 如何查询相似度排序的记录? 例如。搜索“库存溢出”将返回 堆栈溢出 SharePoint溢出 数学溢出 政治溢出 视觉特效溢出 例如。搜索“ LO”将返回: 巴勃罗毕加索 米开朗基罗 杰克逊·波洛克 我需要什么帮助: 使用搜索引擎索引和搜索MySQL表,以获得更好的结果 使用Sphinx搜索引擎和PHP 在PHP中使用Lucene引擎 使用全文索引,查找相似/包含的字符串 什么不好 L

    • 问题内容: 假设您在数据库中按以下方式构造了一个表: 为了清楚起见,应输出: 请注意,由于向量存储在数据库中,因此我们仅需要存储非零条目。在此示例中,我们只有两个向量$ v_ {99} =(4,3,4,0)$和$ v_ {1234} =(0,5,2,3)$都在$ \ mathbb {R}中^ 4 $。 这些向量的余弦相似度应为$ \ displaystyle \ frac {23} {\ sqrt