opencv - 缺少自定义级联分类器的检测频率

标签 opencv computer-vision haar-classifier

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

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

  • 我们已经搜索了许多资源(目前我在打开的页面上有100万个标签),但是似乎没有一种可靠的方法来训练您自己的分类器。在创建灵活的分类器的同时,还能提供灵活性(考虑性别差异,体重,手环等)的宝贵指标是什么?
  • 我们尝试使用大量的正数(1000)和负数(3000)。
  • 我们使用了各种照明条件,来自不同个体的手以及手的 Angular 略有不同。
  • 我们改变了级联的数目
  • 我了解到,哈尔分类器检测使用“类哈尔”特征检测,该特征检测使用了训练过程创建的阈值。由于训练过程创建了阈值,因此我想到在训练中使用的阳性图像上运行分类器将始终检测出我们在阳性样本中使用的图像。我尝试执行此操作,但结果并非如此,只有5.8%的正面图像包含该图像。从理论上讲,我训练过的分类器应检测到约100%的正面图像,这是我的错吗?还是培训过程出错了?

  • 我们发现非常有用的一些资源是:
  • http://note.sonots.com/SciSoftware/haartraining.html
  • http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

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

    感谢您对此事的帮助。
    非常感谢!

    最佳答案

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

    现在一些指针:

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

  • 编辑: opencv_traincascade,它代替了haartraining支持HOG功能。另外,在Matlab的计算机视觉系统工具箱中有一个trainCascadeObjectDetector函数,该函数执行相同的操作并为您提供更好的界面。在某些基准测试中,LBP的准确性略低于Haar,但训练起来要快得多,占用的内存也少得多。

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

    另外,如果使用Haar功能,则可以从启用45度功能中受益。我认为它们默认是关闭的。

    关于opencv - 缺少自定义级联分类器的检测频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21227067/

    相关文章:

    python - 无法使用Anaconda 4.5 Python 3.6.6导入cv2

    objective-c - 与图像或 key 数据库进行图像比较

    java - import org.opencv.highgui 无法解析

    python - 如何在 Keras 中加载图像以实时训练神经网络?

    python - 旋转由 numpy 数组处理的图像

    opencv - 如何在 ubuntu 16.04 上安装 opencv

    opencv - 使用 OpenCV 的 solvePnP 函数进行外部相机校准

    opencv - 使用 OpenCV 检测写在白板上的符号

    opencv - 无法使用 opencv_createsamples.exe 创建样本

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