人脸识别逻辑

5

我希望开发一个应用程序,用户输入一个人的图像,系统应该能够从图像中识别出人脸。如果图像中有多个人,则系统也可以正常工作。

我需要一种逻辑,我不知道如何以这样的方式处理图像像素数据,以便识别人脸。


2
这个问题对于 Stack Overflow 来说太高级了。如果你有一些代码,本来应该可以检测眼睛(例如),但是它没有起作用,那么这可能是可以回答的。要开始解决这个问题,你需要阅读一些关于人脸识别技术的资料,然后尝试实现其中的一种。 - ChrisF
@Petar:抱歉,我当时是在讽刺。不过我已经删除了那条评论。只是想表达这可能是计算机科学中最困难的问题之一,不是你在 Stack Overflow 上听到算法后几天就能轻松解决的。 :) - fearofawhackplanet
如果我对人脸识别一无所知,我的第一选择会是谷歌。我在几秒钟内找到了一些关于人脸识别算法的文章。 - Petar Minchev
4
我想编写一个操作系统,该如何开始? - Andres
1
我参与的最后一个人脸识别项目是与波音合作的大学研究项目,历时约2年。所以...尽情享受,慢慢来。 - InsertNickHere
显示剩余2条评论
3个回答

15
如果你想构建一个用于教育目的的系统,那么Eigenface可能是一个很好的算法起点,因为它相对简单,是该领域许多其他算法的起点。基本上,您需要做的是收集一堆脸部图像(训练数据),如果它们是RGB,则将其转换为灰度,调整大小使每个图像具有相同的尺寸,通过将图像的列(现在是2D矩阵)堆叠在一起来将图像转换为向量,计算所有图像中每个像素值的平均值,并从矩阵中的每个条目中减去该值,以便组件向量不会是仿射的。完成后,计算结果的协方差矩阵,求解其特征值和特征向量,并找到主要成分。这些成分将构成一个向量空间的基础,共同描述面部图像彼此之间最显着的差异。
完成后,您可以通过将新面部图像转换为面部向量,投影到新的向量空间中,并计算与其他投影面部向量之间的线性距离来计算新面部图像的相似度分数。
如果您决定选择这条路,请注意选择在适当的光照条件和姿态角范围下拍摄的面部图像。这两个因素在展示新面部时,对您的系统性能有很大影响。如果训练库不能考虑探测图像的属性,您将得到无意义的结果。(我曾经使用从互联网上随意下载的照片来训练Eigenface系统,它给我展示伊丽莎白二世的图片时,给出了比尔·克林顿作为最强匹配项,尽管图库中还有另一张女王的照片。他们都有白色头发,面向同一方向,并在类似的光照条件下进行了拍摄,这对计算机而言已足够了。)如果您想从同一张图片中识别多个人的面部,您需要一个完整的系统来检测人脸、将其分离到单独的文件并对其进行预处理,以便与从其他图片中提取的面部相比较。这些都是非常重要的主题。我看到有些人使用肤色和纹理等基于方法剪切不是脸部的图像组件做了一些好的工作,但这些方法高度依赖于训练数据的变化。颜色校正特别难控制,这就是为什么灰度转换和/或小波图像表示很受欢迎的原因。
机器学习是人脸识别系统中许多重要过程的基石,因此我强调优秀的训练数据的重要性。有许多学习算法可用,但在我看来最重要的是朴素贝叶斯分类器;其他方法随着训练数据集大小的增加会收敛于贝叶斯,因此只有在计划使用较小的数据集时才需要更复杂的算法。只要您的训练数据质量过硬,您可以从支持企业的算法森林中选择任何算法。
编辑:对于您的训练数据,一个好的合理性检查是计算探测图片和画廊图片的平均面部。(这正是它听起来的样子;在控制图像大小后,对每个图像的RGB通道求和并将每个像素除以图像数量。)预处理得越好,平均面部看起来就越像人类。如果两个平均面部看起来像不同的人——不同的性别、种族、发色等——那就是您的训练数据可能不适合您想要的目标的警告信号。

出于好奇,您从事什么职业? - You_Shall_Not_Pass

3

0

有许多不同的算法可用。基本上你需要的是“计算机视觉”。我们在大学里做过一个基于面部识别和检测的项目。你需要做的是广泛地搜索、并尝试理解所有这些东西。其中涉及到了一些数学知识,所以要有所准备。首先,去wikipedia。然后你会想要搜索特定算法的pdf出版物

你可以走一条艰难的道路——自己编写所有的算法实现。或者简单的方式——使用一些计算机视觉库,比如OpenCVOpenVIDIA

实际上,制作一个能够运行的东西并不那么困难。因此,勇敢一点。更难的是制作一个能够在不同而且不断变化的条件下工作的软件。这就是谷歌无法帮助你的地方。但我想你可能不想深入到那个层面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接