opencv - 我在哪里可以找到用于检测正面的最佳 haar 级联 xml?

标签 opencv haar-classifier

我正在使用 OpenCV 检测相机拍摄的照片中的人脸。但我意识到有些人的脸没有正面,眼睛也没有聚焦在相机上。 我在哪里可以找到仅用于正面的 haar 级联 xml 文件,没有任何倾斜,眼睛必须聚焦在相机上。有没有人有这样的xml文件?请帮助我。

可能是我英文不好。所以如果你不明白我在这里提到的。请让我知道,我会更改它以使其更清楚地理解。希望你能帮助我。非常感谢。

最佳答案

所以我的回答是这样的:默认情况下,OpenCV 提供了两种分类器来检测人脸:正面分类器和侧面分类器。因此,如果我对您的理解正确,您想要检测的面孔是:

  1. 不一定是正面的
  2. 眼睛没有聚焦在相机上。

条件 2 使用正面 haar 分类器很容易满足,这意味着您可以使用 opencv 默认提供的分类器。对于条件 1,您可以尝试使用轮廓检测​​器。

另一种可能性是对面部的其他部位使用检测器,例如耳朵检测器。如果您检测到一只耳朵,则很有可能暗示这只耳朵属于您想要检测的侧脸。

我最后(但最不重要)的建议是,当您尝试的所有解决方案都失败时,您可以尝试学习自己的 haar 分类器。这不是一项艰巨的任务,您可以在网上(尤其是在 stackoverflow 上)找到很多关于它的信息,例如there

编辑:(评论澄清问题后):

首先让我更详细地说明你的要求,因为我不知道正面对你来说头部姿势意味着什么。如果你的意思是正面,比如说倾斜和平移角度属于区间 [-15; 15] 度,所以这解决了 opencv 正面面部分类器(这些数字由我迄今为止所做的所有经验测试大致给出)。我的意思是如果面部不是正面的(即双眼或嘴巴不可见/部分可见),分类器将不会检测到它。换句话说,如果我给出的那些角度适合您,只需使用默认分类器即可。如果没有,请参阅下面的段落。

关于你要求人看相机的第二个要求。这是默认分类器无法区分的东西 - 它已经在不同的人脸上学习,而不仅仅是你想要实现的那些。而且我很确定你在互联网上很难找到这样的分类器,因为它是非常具体的任务。但我可以向你保证,你可以尝试学习自己的人脸分类器,它可能会工作得很好。如果您取得了不错的成绩,请告诉我们。

EDIT2:(关于仅检测头部且仅当倾斜和平移为零度时的分类器)

我认为这样的分类器不存在。根据我的经验,即使它存在,明确为自己的目的准备此类分类器的人也不会与所有人分享,因为它是如此具体的要求。准备好的 haar 分类器需要一些时间(你需要数百个正面示例,其中手动裁剪了平移和倾斜零点的面部)所以我认为这是解决你问题的一种方法,训练你自己的检测器。

让我建议另一种方法,它是关于头部姿势估计的。这是一种从面部图像确定所有姿势角度的方法。存在许多适合您要求的算法 - 运行时,独立于人,可以回答倾斜和平移角度是否接近 0 的问题。它们不需要任何类型的学习,可以直接从算法描述中编码。然而,您需要某种愿意进入本文的研究,但我认为实现头部姿势估计比学习您自己的 haar 分类器可能更好。

EDIT3:(关于头部姿势估计)

这不是那么复杂的任务。在我的硕士论文中 here我证明了可以构建实时头部姿势估计跟踪器,它是人不变且稳健的,仅使用关于面部特征点(眼睛、嘴巴和鼻尖)位置的几何假设。这会立即给出头部姿势估计。您也可以开始 with this articlethere's文章摘要。

关于opencv - 我在哪里可以找到用于检测正面的最佳 haar 级联 xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117090/

相关文章:

c# - InAirSignature.exe 中发生类型为 'System.IO.FileNotFoundException' 的未处理异常

opencv - Haarcascade 分类器训练

opencv - Haar级联生成的文件太小

c++ - OpenCV:为什么 Haar 分类器只检测到一张脸和一只眼睛?

algorithm - 将图像对象分成N个相等像素的部分(方法)

java - HoughLinesP 不检测线 OpenCV android

c++ - 侧面图像中的特征检测

opencv - openCV 中 DisparityWLSFilter 的原始论文?

opencv - 摄像机旋转和跟踪平移?