JavaCV - 识别最准确的检测到的面部

时间:2012-09-08 12:04:43

标签: javacv

我是JavaCV / OpenCV的新手,如果我是一个完整的白痴,请提前道歉......

我需要检测" primary / main"面对图像(此图像大部分为"个人资料图片"),面部识别不是必需的。

由于不同的 haarcascade 文件各自检测到不同的面部,并且检测到的面部有时不是图像中的任意面部而是实际的面部,我需要决定使用哪个面部。 假设检测到的面部是真实面部,则使用最大的面部是有意义的,因为它是一个轮廓图片。

我遇到的主要问题是代码检测到(对于某些图像)更多的是1张脸,而最大的脸实际上并不是人脸。 这是我的一个测试中的一个例子,其中代码检测到2个面孔,1个是真面孔,另一个是女性的胸围,恰好是她的胸围比她的脸大。

面部:java.awt.Rectangle[x=62,y=42,width=78,height=78] 面积6084
胸围:java.awt.Rectangle[x=86,y=144,width=80,height=80] 面积6400

所以我的问题很简单,如果我有多个检测到的面孔,是否有某种评级量表,我可以用它来确定哪个面最符合OpenCV所看到的面孔?

1 个答案:

答案 0 :(得分:1)

不幸的是,人脸检测并没有为您提供这样的选择。 我想你的代码看起来像这样:

CvSeq faces = cvHaarDetectObjects(grayImage, cascade, ......);

所以你得到一个CvSeq,实际上只不过是指向分隔面的矩形序列的指针。你没有得到更多相关信息。

通常情况下,我会说胸部低于头部(甚至更多,头部高于身体的其他部分),除了在某些特殊情况下;)。

您可以简单地利用Y位置来丢弃胸围。

如果非身体部位的其他元素被检测为面部,那么你就注定了。