我想开发一个应用程序,其中用户输入图像(一个人),一个系统应该能够从一个人的图像识别人脸。如果图像中有多个人,系统也可以工作。
我需要一个逻辑,我不知道如何在图像像素数据,它可以识别人的脸的方式工作。
发布于 2010-08-07 20:05:27
如果你想构建一个用于教育目的的系统,那么特征脸可能是一个很好的算法,因为它相对简单,并且是该领域许多其他算法的起点。基本上你要做的是取一堆人脸图像(训练数据),如果它们是RGB,将它们转换为灰度,调整它们的大小,使每个图像具有相同的尺寸,通过将图像的列(现在是2D矩阵)堆叠在彼此的顶部,使图像成为向量,计算所有图像中每个像素值的平均值,并从矩阵中的每个条目中减去该值,以便分量向量不是仿射的。完成后,计算结果的协方差矩阵,求解其特征值和特征向量,并找到主成分。这些分量将作为向量空间的基础,并一起描述面部图像彼此不同的最重要的方式。
完成此操作后,您可以通过将新的人脸图像转换为人脸向量,投影到新的向量空间,并计算它与其他投影的人脸向量之间的线性距离,来计算新人脸图像的相似性分数。
如果你决定走这条路,要小心选择在适当的光照条件和姿势角度范围内拍摄的人脸图像。这两个因素对你的系统在面对新面孔时的表现起着巨大的作用。如果训练图库不考虑探针图像的属性,那么您将得到毫无意义的结果。(我曾经训练过一个特征脸系统,对从互联网上随机下载的照片进行处理,它让我觉得比尔·克林顿最适合伊丽莎白二世的照片,尽管画廊里还有另一张女王的照片。他们都是白发,面对着相同的方向,并且是在相似的照明条件下拍摄的,这对电脑来说已经足够好了。)
如果你想从同一张图片中的多个人中提取人脸,你将需要一个完整的系统来检测人脸,将它们提取到单独的文件中,并对它们进行预处理,以便它们与从其他图片中绘制的其他人脸具有可比性。这些都是各自的重大课题。我已经看到人们使用基于肤色和纹理的方法来剪切不是人脸的图像组件,但这些组件也很容易受到训练数据变化的影响。颜色投射特别难以控制,这就是为什么图像的灰度转换和/或小波表示流行的原因。
机器学习是FR系统中许多重要过程的基础,所以我怎么强调好的训练数据都不为过。有很多学习算法,但在我看来,最重要的是朴素贝叶斯分类器;随着训练数据集的大小增加,其他方法都收敛到贝叶斯上,因此如果您计划使用较小的数据集,则只需使用花哨的算法。请记住,训练数据的质量将决定整个系统的成败,只要它是可靠的,您就可以从为支持企业而编写的算法森林中选择您喜欢的任何树。
编辑:对训练数据的一个很好的理智检查是计算探针和图库图像的平均脸部。(这就是它听起来的样子;在控制图像大小之后,取每个图像的RGB通道的总和,然后将每个像素除以图像的数量。)预处理得越好,平均面孔看起来就越有人情味。如果这两张平均面孔看起来像不同的人--不同的性别、种族、发色等等--这就是一个警告信号,表明你的训练数据可能不符合你的想法。
发布于 2010-07-21 18:43:42
看看Face Recognition Hompage --里面有算法、论文,甚至还有一些源代码。
发布于 2010-08-07 20:22:55
有很多不同的算法。基本上你要找的是"computer vision“。我们在大学里做了一个基于面部识别和检测的项目。你需要做的是广泛地使用谷歌,并尝试理解所有这些东西。这里面涉及到一些数学知识,所以要做好准备。首先转到wikipedia。然后你会想要搜索特定算法的pdf出版物。
你可以走一条艰难的路--自己写一个所有算法的实现。或者简单的方法-使用一些计算机视觉库,如OpenCV或OpenVIDIA。
实际上,制造出能够工作的东西并不是那么难。所以要勇敢。更难的是让一个软件能够在不同的和不断变化的条件下工作。这就是谷歌帮不了你的地方。但我想你不会想那么深入的。
https://stackoverflow.com/questions/3298243
复制相似问题