Opencv Haarcascade分类器训练

Opencv Haarcascade分类器训练,opencv,haar-classifier,Opencv,Haar Classifier,我正在尝试使用相机拍摄的样本创建一个xml文件。这是一次试运行,我把相机靠在窗户上,让它每隔30秒拍一次过往车辆的照片。我现在有大约200张照片(只是为了一个小测试),但我不能再进一步了 我制作了一个选择工具来挑选图片上的汽车(边界框),如果没有,则将图片标记为底片。下面是应用程序外观的两个示例: 然后,应用程序将标记的对象保存在positive.txt文件中,如下所示,跳过未标记的图片或标记为负片的图片: /samples/img_0000.jpg 1 74 66 34 30 /sampl

我正在尝试使用相机拍摄的样本创建一个xml文件。这是一次试运行,我把相机靠在窗户上,让它每隔30秒拍一次过往车辆的照片。我现在有大约200张照片(只是为了一个小测试),但我不能再进一步了

我制作了一个选择工具来挑选图片上的汽车(边界框),如果没有,则将图片标记为底片。下面是应用程序外观的两个示例:

然后,应用程序将标记的对象保存在
positive.txt
文件中,如下所示,跳过未标记的图片或标记为负片的图片:

/samples/img_0000.jpg 1 74 66 34 30
/samples/img_0001.jpg 2 78 69 31 25 218 129 61 38
/samples/img_0003.jpg 1 83 72 21 21
/samples/img_0005.jpg 1 76 65 19 17
/samples/img_0006.jpg 1 127 112 37 24
/samples/img_0007.jpg 2 83 72 22 21 127 112 36 22
...
负片图片只需保存到
negative.txt
文件,如下所示:

/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...
最后,我尝试使用
/usr/bin/opencv_haartraining-data samples-vec positive.txt-bg negative.txt-npos 99-nneg 20-nstages 5-mem 128-minhitrate 0.999-maxfalsalarm 0.5-nonsym-mode ALL
运行haar训练算法

不要介意设置,我只是需要在使用功能更强大的计算机对实际数据进行实际训练之前使用这些设置

为此,我得到以下输出和错误:

Data dir name: samples
Vec file name: positive.txt
BG  file name: negative.txt, is a vecfile: no
Num pos: 99
Num neg: 20
Num stages: 5
Num splits: 1 (stump as weak classifier)
Mem: 128 MB
Symmetric: FALSE
Min hit rate: 0.999000
Max false alarm rate: 0.500000
Weight trimming: 0.950000
Equal weights: FALSE
Mode: ALL
Width: 24
Height: 24
Applied boosting algorithm: GAB
Error (valid only for Discrete and Real AdaBoost): misclass
Max number of splits in tree cascade: 0
Min number of positive samples per cluster: 500
Required leaf false alarm rate: 0.03125

Tree Classifier
Stage
+---+
|  0|
+---+



Number of features used : 261600

Parent node: NULL

*** 1 cluster ***
OpenCV Error: Unspecified error (Vec file sample size mismatch) in icvGetHaarTrainingDataFromVec, file /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp, line 1930
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp:1930: error: (-2) Vec file sample size mismatch in function icvGetHaarTrainingDataFromVec

Aborted

有人知道那是什么意思吗?为什么样本量会有错误,不管是什么。。。我还尝试用绝对路径替换相对路径,但我得到了相同的错误。实际上,我想做的是正确的,我还没有找到任何关于如何从现有和标记的图片创建分类器的明确示例。

事实证明,
.vec
文件不仅仅是
positive.txt
文件,它必须使用
opencv\u createsamples
生成

因此,首先我使用以下命令创建了
training_24-24.vec
文件(它不仅仅是一个文本文件):

/usr/bin/opencv_createsamples -vec training_24-24.vec -info positive.txt -bg negative.txt -w 24 -h 24 -num 100
它创建了
training_24-24.vec
文件。与我原来的问题相比,我用方形选项重新制作了
positive.txt
文件。然后,我启动了分类器训练

/usr/bin/opencv_haartraining -data samples -vec training_24-24.vec -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL
在这一点上,性能简直糟糕透了,除了汽车,它什么都能识别。他说,人们应该使用1000张正片和2000张负片这样的图像来开始获得可以接受的东西。对于
-nstages
选项,它还表示:

如果你有少量的阳性、阴性样本,那么设置很多阶段是没有用的


嗨,你能分享你的积极,消极和Sheel命令吗?我使用了以下命令:rm*.vec find./negatives\u images-iname“*jpg”>negatives.txt opencv_createsamples-vec puma.vec puma.jpg-img-bg negatives.txt-num 1500-bgcolor 50-bgsthresh 50-maxxangle-maxyangle 0 0-maxzangle-w 80-h80 opencv_haarttraining-vec puma.vec-bg negatives.txt-npos 1-nneg 1418-mem 4096-w 80-h80-data。ls目录:negatives.txt puma.jpg negatives\u images/positive谢谢