【问题标题】:Is there a way to get a measurement of confidence level when using haar face detection using OpenCV?使用 OpenCV 使用 haar 面部检测时,有没有办法测量置信度?
【发布时间】:2023-03-02 22:29:01
【问题描述】:

我使用 OpenCVs HAAR 级联人脸检测开发了一个人脸检测应用程序。该算法工作正常,但每隔一段时间它会在墙上或其他不是面孔的东西上找到图案。
我想对怀疑为面孔的对象进行额外检查,但我只想对我不相信它们是面孔的对象进行检查。有没有办法为 HAAR 级联人脸检测检测到的人脸获得“置信度”级别?

【问题讨论】:

    标签: opencv face-detection face-recognition


    【解决方案1】:

    不是直接回答您的问题,但这可能有助于减少错误检测。

    您可以通过调整 MinNeibhbours、CV_HAAR_FIND_BIGGEST_OBJECT 和 Size 值来减少错误检测。

    int MinNeighbours = 7;

    face_cascade.detectMultiScale(frame_gray, faces, 1.1, MinNeighbours, CV_HAAR_FIND_BIGGEST_OBJECT, Size(60, 60));

    【讨论】:

      【解决方案2】:

      OpenCV 通过 CascadeClassifier 类的函数“detectMultiScale”中的参数“weights”提供置信度,您需要将标志“outputRejectLevels”设置为 true

      【讨论】:

      • 此参数是否可用于 openCV C++ API?我只是在 python API 中看到它?!?例如,是否有一种未记录的方式可以为此目的使用 flags 参数?
      • Apparently C++ API 中还有一个未记录的函数。 void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& objects, vector<int>& rejectLevels, vector<double>& levelWeights, double scaleFactor, int minNeighbors, int flags, Size minObjectSize, Size maxObjectSize, bool outputRejectLevels )
      • 较新的 OpenCV 版本已经公开并记录了这一点 - docs.opencv.org/4.0.1/d1/de5/…
      • 使用这个haar级联检测人脸时如何获得置信度值
      【解决方案3】:

      为什么不对同一张图像运行多个 haar 级联(经过不同的训练),看看它们是否会产生相似的结果?让他们投票,就像它一样。因此,如果只有一个级联找到给定的面孔而其他级联没有,那将降低您对给定面孔的信心。

      我能够实时在 iPhone 视频源上同时运行 3 个级联,因此在许多正常情况下性能应该不是问题。更多在这里: http://rwoodley.org/?p=417

      【讨论】:

        【解决方案4】:

        OpenCV 实际上为任何特定对象找到多个结果,每个检测到的区域在很大程度上相互重叠;然后将它们组合在一起并形成“邻居数”计数。这个计数就是所谓的信心。

        当您执行对象检测时,其中一个参数是返回命中之前的最小邻居。增加它会减少误报,但也会减少可能检测到的人脸数量。

        【讨论】:

          猜你喜欢
          • 2015-12-21
          • 1970-01-01
          • 2011-11-14
          • 1970-01-01
          • 1970-01-01
          • 2019-09-27
          • 2016-06-25
          • 2013-09-17
          • 2022-12-15
          相关资源
          最近更新 更多