3

我正在使用 OpenCV 来检测相机拍摄的图片中的人脸。但我意识到有些脸没有正面,眼睛也没有聚焦在相机上。我在哪里可以找到 haar cascades xml 文件,该文件仅用于正面而没有任何倾斜,并且眼睛必须专注于相机。有人有这样的xml文件吗?请帮我。

也许我的英语不好。所以如果你不明白我在这里提到的。请让我知道,我将对其进行更改以使其更清楚易懂。希望你能帮助我。太感谢了。

4

2 回答 2

4

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

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

条件 2 很容易用正面 haar 分类器来满足,这意味着您可以只使用 opencv 默认提供的一个。对于条件 1,您可以尝试使用配置文件检测器。

其他可能性是将检测器用于面部其他部分,例如耳朵检测器。如果您检测到一只耳朵,那么您很有可能暗示该耳朵属于您想要检测的侧面。

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

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

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

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

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

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

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

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

这不是那么复杂的任务。在我的硕士论文中我证明了一个人可以构建实时头部姿势估计跟踪器,该跟踪器仅使用关于面部标志(眼睛、嘴巴和鼻尖)位置的几何假设,它是人不变且鲁棒的。这立即给出了头部姿势估计。您也可以从这篇文章开始,并且文章的摘要。

于 2014-08-04T13:08:24.810 回答
0

在官方opencv github页面链接在这里:

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

易于使用且非常准确。

于 2020-02-06T14:19:33.660 回答