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