如何检查一张图片是否包含面部且面部清晰可见

15

我不确定这是否能够解决,但我还是要问一下。

在我们公司中,我们处理大规模的登记营地,小团队由5至10人前往村庄并进行登记。登记涉及输入一些数据,捕捉指纹和使用网络摄像头拍摄终端用户的照片。可以理解的是,登记是由外部供应商完成的,我们已将该活动外包给他们。

由于记录数量非常大,尝试手动验证记录使整个过程变慢。因此,我们已经自动化了尽可能多的事情,除了一件事,就是检查使用网络摄像头拍摄的照片是否具有良好的质量。

我知道,“良好的质量”是一个含糊的术语,无法通过软件解决。然而,在试图定义“良好的质量”时,我找到了这个:http://en.wikipedia.org/wiki/Image_quality

现在,最后来到我的问题,这些图像质量检查的哪些部分可以自动化。

注意:照片将以邮票大小打印在智能卡上。它们的大小仅为100x125像素,分辨率为300 DPI。

谢谢, Raghu


1
我知道一些新相机具有“人脸识别功能”,所以显然有人花费了时间研究这个。祝你好运! - Mike Caron
4个回答

8
Viola-Jones算法是一个经典算法。这里 你可以找到一篇关于它的实现的论文,但你会在许多资源中找到更多信息。
我喜欢的图片:

alt text

这里你可以找到一个实现算法的.Net框架(它是免费的)

附注:请注意,一些外星生物可能会返回错误结果。


2
很抱歉,.NET实现的链接已经失效了 - 但是这个可能是相关的... Accord.Vision.Detection.HaarObjectDetector - PeterX

6

1
其实这个想法还不错,Kinect推出前大约6个月,我正在做“寻找左右手并标记头部”的工作,从看起来的效果来看,我可以发誓这就是Kinect捕捉到的输入。我认为微软正在使用它来改进面部和手部检测算法。 - Scott Chamberlain

5

openCV库有一些很棒的代码可以用于检测人脸。您可以使用openCV人脸检测作为图像质量的阈值 - 如果它成功检测到了一个人脸,那么这张图片可能是相当不错的? http://sourceforge.net/projects/opencvlibrary/


1
实际上,我最终使用了这种技术。我使用了EmguCV,它是OpenCV库的.NET封装,并使用基于HaarCascade的人脸检测。为了消除误报,我还尝试查找其他面部特征,如眼睛、鼻子和嘴巴。如果至少发现2个特征,我就得出结论,照片的质量是可以接受的。该系统已经上线几个月了,似乎工作正常,除了一些光线昏暗的照片。 - Raghu

2
面部检测是一个非常活跃的研究课题,论文经常在计算机视觉会议上如ECCV、ICCV上发表。在今年的ECCV2010会议上甚至有一个关于面部检测的研讨会。因此,可以解决到一个合理的程度。
如果我是你,我会建立一个相当简单但可以处理光照、肤色和构图变化等基本问题的系统。如果你知道图片一般都是证件照,你不需要像Viola-Jones那样复杂的系统。你应该建立一个证件照验证系统(这张照片看起来像证件照吗?),而不是一个面部检测系统(这个图像中哪里有人脸?)。
首先,只需检查图像的基础信息-例如使用强度直方图确保光照正常(不要太亮或太暗),图像具有对比度(不同的阴影)等。
然后,您可以构建一个人脸/头像验证系统 - 像经典的“Eigenfaces for Recognition”论文中那样构建一个面部空间,然后确定每个照片是否足够像这个子空间中的照片。 (这是一种相当简单的技术,网上有很多可用的代码来执行它)。

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