Android 如何利用级联分类器减少错误识别
你好,我正在尝试使用cascade分类器、android和opencv库识别一辆汽车。我的问题是,我的手机几乎把所有东西都标记为汽车 我根据以下内容创建了代码: 和人脸检测样本。我的应用程序行为非常奇怪,因为标记看起来像随机的。我甚至不知道标记汽车是否正确,或者这只是一些随机行为。现在它甚至把我的键盘标记为汽车。我不确定我能改进什么。我看不出在训练5到14个阶段之间有任何进展 我已经把我的档案训练了14个阶段 我的代码如下所示:Android 如何利用级联分类器减少错误识别,android,opencv,object-recognition,cascade-classifier,Android,Opencv,Object Recognition,Cascade Classifier,你好,我正在尝试使用cascade分类器、android和opencv库识别一辆汽车。我的问题是,我的手机几乎把所有东西都标记为汽车 我根据以下内容创建了代码: 和人脸检测样本。我的应用程序行为非常奇怪,因为标记看起来像随机的。我甚至不知道标记汽车是否正确,或者这只是一些随机行为。现在它甚至把我的键盘标记为汽车。我不确定我能改进什么。我看不出在训练5到14个阶段之间有任何进展 我已经把我的档案训练了14个阶段 我的代码如下所示: @Override public Mat onCameraFram
@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。更多的邻居意味着对结果更有信心使用更多的阴性样本,并在训练后将假阳性添加到阴性样本中,然后再次训练。@Mika第二次训练是添加到第一次训练还是覆盖第一次训练?负片与正片的比例越高,效果越好?不确定Haar探测器的培训,但我想你必须完全重新培训。好吧,你通常使用的负样本(5到10倍)比正样本多得多,但我不是机器学习方面的专家……或者可能没有那么明显。。。看看@kir,谢谢你提供的信息。我将检查所有这些要点。随着邻居的增加,我得到了一些积极的结果