【发布时间】:2023-03-02 22:29:01
【问题描述】:
我使用 OpenCVs HAAR 级联人脸检测开发了一个人脸检测应用程序。该算法工作正常,但每隔一段时间它会在墙上或其他不是面孔的东西上找到图案。
我想对怀疑为面孔的对象进行额外检查,但我只想对我不相信它们是面孔的对象进行检查。有没有办法为 HAAR 级联人脸检测检测到的人脸获得“置信度”级别?
【问题讨论】:
标签: opencv face-detection face-recognition
我使用 OpenCVs HAAR 级联人脸检测开发了一个人脸检测应用程序。该算法工作正常,但每隔一段时间它会在墙上或其他不是面孔的东西上找到图案。
我想对怀疑为面孔的对象进行额外检查,但我只想对我不相信它们是面孔的对象进行检查。有没有办法为 HAAR 级联人脸检测检测到的人脸获得“置信度”级别?
【问题讨论】:
标签: opencv face-detection face-recognition
不是直接回答您的问题,但这可能有助于减少错误检测。
您可以通过调整 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));
【讨论】:
OpenCV 通过 CascadeClassifier 类的函数“detectMultiScale”中的参数“weights”提供置信度,您需要将标志“outputRejectLevels”设置为 true
【讨论】:
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 )
为什么不对同一张图像运行多个 haar 级联(经过不同的训练),看看它们是否会产生相似的结果?让他们投票,就像它一样。因此,如果只有一个级联找到给定的面孔而其他级联没有,那将降低您对给定面孔的信心。
我能够实时在 iPhone 视频源上同时运行 3 个级联,因此在许多正常情况下性能应该不是问题。更多在这里: http://rwoodley.org/?p=417
【讨论】:
OpenCV 实际上为任何特定对象找到多个结果,每个检测到的区域在很大程度上相互重叠;然后将它们组合在一起并形成“邻居数”计数。这个计数就是所谓的信心。
当您执行对象检测时,其中一个参数是返回命中之前的最小邻居。增加它会减少误报,但也会减少可能检测到的人脸数量。
【讨论】: