如何改进openCV人员检测算法?
How can i improve openCV people detecting algorithm
我正在尝试编写人类探测器,它现在工作,但有时它对猫/盒子等做出反应,我也得到了5 fps。所以问题是,我如何改进我的算法以获得更好的fps和检测精度。
我试过用这个:http://www.pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/
但是我找不到任何方法我可以在android上使用这个。
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
List<MatOfPoint> list = new ArrayList<>();
Mat frame = new Mat();
Mat gray = new Mat();
Mat hierarchy = new Mat();
Mat originalFrame = inputFrame.rgba();
Imgproc.medianBlur(originalFrame,originalFrame,3);
Imgproc.cvtColor(originalFrame, gray, Imgproc.COLOR_RGB2GRAY, 0);
HOGDescriptor hog = new HOGDescriptor();
//Получаем стандартный определитель людей и устанавливаем его нашему дескриптору
MatOfFloat descriptors = HOGDescriptor.getDefaultPeopleDetector();
hog.setSVMDetector(descriptors);
MatOfRect locations = new MatOfRect();
MatOfDouble weights = new MatOfDouble();
hog.detectMultiScale(gray, locations, weights);
Point rectPoint1 = new Point();
Point rectPoint2 = new Point();
Point fontPoint = new Point();
if (locations.rows() > 0) {
List<Rect> rectangles = locations.toList();
for (Rect rect : rectangles) {
rectPoint1.x = rect.x;
rectPoint1.y = rect.y;
fontPoint.x = rect.x;
fontPoint.y = rect.y - 4;
rectPoint2.x = rect.x + rect.width;
rectPoint2.y = rect.y + rect.height;
final Scalar rectColor = new Scalar( 0 , 0 , 0 );
// Добавляем на изображения найденную информацию
Imgproc.rectangle(originalFrame, rectPoint1, rectPoint2, rectColor, 2);
}
}
frame.release();
gray.release();
hierarchy.release();
list.clear();
return originalFrame;
}
你正在使用HOG+SVM方法来检测人;它本质上是相当缓慢的。然而,你可以使用这个问题中的一些建议,如何加快svm.predict?
根据你的问题,例如,如果相机是静态的,而行人在移动,你可以选择背景减法,这可能是最有效的方法,但要记住,这将拾取场景中移动的任何物体,所以你可以包括阈值来删除小物体。一些背景减法算法包括混合高斯法(MOG)或混合高斯法(MOG2)或混合高斯法(GMG)。此外,需要注意的重要一点是,这些方法依赖于创建场景的背景模型,也就是说,它们假设静态像素随着时间的推移成为背景的一部分,因此,当行人在场景中静止一段时间时,他们会嵌入背景,导致误检。有很多论文提供了这个问题的潜在解决方案,所以你可能想看看它们,这里有一篇产生了不错的结果:使用分割高斯模型的通量张量进行静态和移动目标检测
此外,您可以选择数据驱动的方法,要么获得一个良好的预训练模型并使用它进行检测,要么使用TensorFlow, Caffe或Torch自己训练一个,并使用dnn opencv_contrib模块进行检测。
相关文章:
- 如何在贝尔曼福特算法中检测负循环?
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 阴算法(音高检测) - 差分函数的替代
- 未检测到越界指针算法?
- 算法以准确检测正方形和圆之间的重叠
- OpenCV对象在训练级联后检测算法会冻结
- 使用 Kruskal 算法检测图中的周期
- 用于在检测到正方形之后运行命令的c++算法
- 用于碰撞检测的 O(n^log n) 算法
- 使用两个语句并行化 while 循环(弗洛伊德循环检测算法)
- 边界框碰撞检测算法
- 神经性脑电波的EEG眨眼检测算法
- 我可以使用哪种算法进行四边形/立方体检测
- 如何改进openCV人员检测算法?
- 特征检测算法的实现
- 执行检测算法的公共接口
- 如何检测c++中LZW算法压缩的字符串
- 城市环境中特征检测的最佳算法- OpenCV
- 图中循环检测算法的改进
- 任意大小凸多边形之间的碰撞检测算法