Haar级联用于人脸检测xml文件代码说明OpenCV

时间:2017-01-27 06:08:21

标签: c++ xml opencv

我正在使用opencv haar cascade进行面部检测。

我想知道我在程序中包含的haar级联的xml代码的解释。有人可以帮助我理解XML文件中显示的值,例如:weakcountmaxcountthresholdinternal nodesleaf values等。

我使用了haarcascade_frontalface_alt2.xml文件。我已经进行过脸部检测。目前我正在计算检测到的面部数量。

1 个答案:

答案 0 :(得分:3)

据我了解,一般来说你已经了解了haarcascade结构和OpenCV的实现。如果不是,请先查看OpenCV manual并阅读有关增强树级联的内容,例如Lienhart's paper

现在关于xml结构本身。

<maxWeakCount>3</maxWeakCount>

此参数描述阶段的简单分类器(树)的数量。

<stageThreshold>3.5069230198860168e-01</stageThreshold>

是阶段门槛,i。即在阶段退出级联的门槛得分。在所有阶段,我们计算树木的最终得分,当最终得分小于阈值时,我们退出整个级联并将结果视为非对象。

<weakClassifiers>

在舞台上开始树参数。

<_>
  <internalNodes>
    0 1 0 4.3272329494357109e-03 -1 -2 1 1.3076160103082657e-02
  </internalNodes>
  <leafValues>
    3.8381900638341904e-02 8.9652568101882935e-01 2.6293140649795532e-01
  </leafValues>
</_>

这是树形描述。 internalNodes参数包含以下内容:

  • 0 11 0定义当前节点中应该去的叶索引。在第一种情况下,如果值低于阈值则向左移动,如果高于阈值则向右移动,在第二种情况下,如果值高于阈值,则向右移动。
  • 功能索引
  • 选择叶子的门槛
  • 还有一个-1 -2 1 ...参数列表 - 正如我从OpenCV源中看到的那样,它只是另一个带有叶索引的节点,但根据评估代码(也来自OpenCV源)忽略了负值。

考虑级联评估代码:

do
{
    CascadeClassifierImpl::Data::DTreeNode& node = cascadeNodes[root + idx];
    double val = featureEvaluator(node.featureIdx);
    idx = val < node.threshold ? node.left : node.right;
}
while( idx > 0 );

leafValues包含左值(即左叶分数),右值(右叶分数)和树阈值。

<_>
<rects>
  <_>
    6 3 1 9 -1.</_>
  <_>
    6 6 1 3 3.</_></rects></_>
<_>

根据HAAR范例,它是功能描述本身​​。上一节中的特征索引描述了rects对的索引。