Android 如何利用级联分类器减少错误识别

Android 如何利用级联分类器减少错误识别,android,opencv,object-recognition,cascade-classifier,Android,Opencv,Object Recognition,Cascade Classifier,你好,我正在尝试使用cascade分类器、android和opencv库识别一辆汽车。我的问题是,我的手机几乎把所有东西都标记为汽车 我根据以下内容创建了代码: 和人脸检测样本。我的应用程序行为非常奇怪,因为标记看起来像随机的。我甚至不知道标记汽车是否正确,或者这只是一些随机行为。现在它甚至把我的键盘标记为汽车。我不确定我能改进什么。我看不出在训练5到14个阶段之间有任何进展 我已经把我的档案训练了14个阶段 我的代码如下所示: @Override public Mat onCameraFram

你好,我正在尝试使用cascade分类器、android和opencv库识别一辆汽车。我的问题是,我的手机几乎把所有东西都标记为汽车

我根据以下内容创建了代码: 和人脸检测样本。我的应用程序行为非常奇怪,因为标记看起来像随机的。我甚至不知道标记汽车是否正确,或者这只是一些随机行为。现在它甚至把我的键盘标记为汽车。我不确定我能改进什么。我看不出在训练5到14个阶段之间有任何进展

我已经把我的档案训练了14个阶段

我的代码如下所示:

@Override
public Mat onCameraFrame(Mat aInputFrame) {
    // return FrameAnalyzer.analyzeFrame(aInputFrame);
    // Create a grayscale image
    Imgproc.cvtColor(aInputFrame, grayscaleImage, Imgproc.COLOR_RGBA2RGB);

    MatOfRect objects = new MatOfRect();

    // Use the classifier to detect faces
    if (cascadeClassifier != null) {
        cascadeClassifier.detectMultiScale(grayscaleImage, objects, 1.1, 1,
                2, new Size(absoluteObjectSize, absoluteObjectSize),
                new Size());
    }

    Rect[] dataArray = objects.toArray();
    for (int i = 0; i < dataArray.length; i++) {
        Core.rectangle(aInputFrame, dataArray[i].tl(), dataArray[i].br(),
                new Scalar(0, 255, 0, 255), 3);
    }

    return aInputFrame;
}
@覆盖
公共Mat-onCameraFrame(Mat-aInputFrame){
//返回FrameAnalyzer.analyzeFrame(aInputFrame);
//创建灰度图像
Imgproc.cvtColor(输入帧、灰度图像、Imgproc.COLOR\u RGBA2RGB);
MatOfRect对象=新的MatOfRect();
//使用分类器检测人脸
if(级联分类器!=null){
cascadeClassifier.detectMultiScale(灰度图像、对象、1.1、1、,
2、新尺寸(absoluteObjectSize,absoluteObjectSize),
新尺寸());
}
Rect[]dataArray=objects.toArray();
for(int i=0;i
尝试更改以下选项

  • 在示例代码中使用
    COLOR\u RGBA2RGB
    cvtColor
    不会产生灰度图像。尝试
    RGBA2GRAY
  • detectMultiScale
    中增加邻居的数量。现在是2。更多的邻居意味着对结果更有信心
  • 希望有足够的样本进行培训。快速搜索和阅读书籍,给人的印象是培训需要数千张图片。例如,大约10000张图像用于OCR haar培训。对于面部训练,使用3000到5000个样本
  • 更重要的是,决定你是否真的想参加haar识别汽车的培训。可能有更好的车辆识别方法。例如,对于移动车辆,我们可以使用基于光流的技术

  • 使用更多的阴性样本,并在训练后将假阳性添加到阴性样本中,然后再次训练。@Mika第二次训练是添加到第一次训练还是覆盖第一次训练?负片与正片的比例越高,效果越好?不确定Haar探测器的培训,但我想你必须完全重新培训。好吧,你通常使用的负样本(5到10倍)比正样本多得多,但我不是机器学习方面的专家……或者可能没有那么明显。。。看看@kir,谢谢你提供的信息。我将检查所有这些要点。随着邻居的增加,我得到了一些积极的结果