1

为了开发能够实时检测特定手部位置(或手部符号)的应用程序,我和我的团队在几个月前偶然发现了 haar 分类。我们认为这将是完成这项工作的理想工具。然而,我们在尝试创建自己的分类器时遇到了困难(我们使用的是 OpenCV)。他们大部分时间都没有捕捉到感兴趣的对象(见下面的第二个问题)。

我有两个关于这个问题的问题:

  1. 我们已经搜索了许多资源(我目前打开了一百万零一个标签),但似乎没有万无一失的方法来训练你自己的分类器。对于创建准确的分类器,同时允许灵活性(考虑性别差异、体重、手上的戒指等),有哪些指针非常宝贵?
    • 我们尝试使用大量的正面(1000)和负面(3000)。
    • 我们使用了不同的光照条件、不同人的手,以及手的角度略有不同。
    • 我们改变了级联的级数
  2. 我知道 haar 分类器检测使用“haar-like”特征检测,使用由训练过程创建的阈值。由于训练过程创建了阈值,我的想法是在训练中使用的正图像上运行分类器总是会检测到我们在正样本中使用的图像。我尝试这样做,发现事实并非如此,我的正面图像中只有 5.8% 被发现包含该图像。我是否错误地假设理论上,我的 100% 的正面图像应该被他们训练的分类器检测到?还是培训过程出错了?

我们发现非常有用的一些来源是:

当然还有 opencv 级联培训页面。

我感谢任何关于此事的帮助。非常感谢!

4

1 回答 1

0

首先一个问题。您尝试检测的手势中有多少平面内旋转?级联检测器不是旋转不变的。这意味着,如果您的手势可以向左或向右倾斜超过 10 度以上,您将无法检测到它们。唯一的解决方案是旋转图像并再次尝试检测。

现在一些指针:

  • 1000 个正样本并不是一个很大的数字。为了检测手势,你可能需要至少 10 倍,如果不是更多的话。
  • 检查检测器的最小和最大窗口大小。确保与图像中手的大小相匹配。
  • 尝试更大的窗口大小。
  • 尝试其他功能。除了 Haar,OpenCV 还允许您使用 LBP 和 HOG。我猜HOG可能对这个问题有好处,而且训练时间要少得多。

编辑: opencv_traincascade,它取代了 haartraining 支持 HOG 功能。或者,在 Matlab 的计算机视觉系统工具箱中有一个 trainCascadeObjectDetector 函数,它可以做同样的事情并为您提供更好的界面。在某些基准测试中,LBP 的准确度略低于 Haar,但它的训练速度要快得多,并且占用的内存要少得多。

如果您的方向有很多变化,您肯定需要更多数据。您还需要了解可能的旋转范围。你的标志可以颠倒吗?它们可以旋转 90 度吗?如果您的范围是 30 度,也许您可​​以尝试旋转 3 次图像,或者为每个标志训练 3 个不同的检测器。

此外,如果您使用 Haar 功能,您可能会从启用 45 度功能中受益。我认为默认情况下它们是关闭的。

于 2014-01-20T19:57:09.713 回答