Opencv haar training-特征训练器

1.正样本文件采集:

需要使用到的工具:objectmarker

用于待识别对象的标注,并生成标注文件。需要注意的是,生成完标注文件之后(通常是info.txt文件),用编辑器打开文件,将所有路径信息删除,只保留文件名和其对应的标注信息,修改完成之后,将文件保存为sample_pos.dat(注意,文件名字不要改变,否则以后会很坑,这个具体还没去研究源码,应该是程序的问题);

ps:如果已经有了图像的标注信息,那就可以跳过这一步了。

2.正样本vec文件生成(sample文件)

工具:opencv_createsamples.exe

在工具所在目录创建文件夹:pos,将采集到的正样本,以及标注文件放入pos文件夹;

使用cmd进入工具所在目录,执行命令:

opencv_createsamples.exe -info ./pos/sample_pos.dat -vec ./pos/sample_pos.vec -num 17 -w 20 -h 20 -show YES

ps:-num:正样本个数

3.负样本采集

建议正负样本比例在1:3(具体还不知道,参考网上提供的数据)。负样本在采集的时候尤其需要注意,尽量保持和正样本环境相似,比如,正样本图像中包含要检测的对象,负样本图像中最好剔除要检测的对象,只保留背景。有条件的同学可以直接写程序,对负样本图片进行切割,标准是40*40(因为我们的正样本采用的是20*20)。

负样本采集完成之后,在pos目录的统计目录创建文件夹:neg,将负样本拷贝至neg目录,然后使用命令行进入neg目录,执行命令:

dir /b > sample_neg.dat

用文本编辑器打开dat文件,删除最后一行:sample_neg.dat,保存文件;

ps:文件名字不要改变,否则会出错

4.训练样本

到此为止,我们要准备的文件都已经准备好,可以进行训练了。

使用的工具:opencv_haartraining.exe

进入工具所在目录,先创建目录:cascade,然后执行命令:

opencv_haartraining.exe -data ./cascade -vec ./pos/sample_pos.vec -bg ./neg/sample_neg.dat -nstage 20 -npos 100 -nneg 300 -mem 256 -mode ALL -w 20 -h 20
-nstage:要训练多少层
-npos:每层的正样本个数
-nneg:每层的负样本个数

ps:在这一步经常会抛异常,通常都是负样本文件不对,同时dat文件的名字一定要按照上面说的命名,否则会出错;

5.合并xml文件

样本训练完成之后,cascade目录下会生成多个子目录,需要将这些目录合并生成xml文件才能使用:

工具:c-example-convert_cascade.exe(ps:根据opencv的版本不同,这个工具的名字也可能不同)

执行命令:

c-example-convert_cascade.exe --size=20x20 ./cascade haar_adaboost.xml

到此,会在目录中生成haar_adaboost.xml文件!

done!

说明:

1.所有的工具及其依赖文件建议统一放置在一个目录中(比如:build);

2.除了负样本描述文件的生成命令需要在neg目录中执行,其他命令全部在build(假设你也有这个目录,以各自的实际目录为准)目录中执行;

3.good luck!

参考:

1.http://www.cnblogs.com/wengzilin/p/3845271.html

2.http://blog.csdn.net/xuejiren/article/details/39493537

(Opencv Error: Assertion failed (elements_read==1))

转载于:https://www.cnblogs.com/Pure-Land/p/5006993.html

以下是使用PyCharm编写OpenCV 3.4.14训练自己的Haar级联分类器的代码示例: 1. 首先,需要安装OpenCV 3.4.14和Python。 2. 创建一个新的PyCharm项目,并创建一个名为“haar_training”的Python文件。 3. 导入必要的库: ```python import cv2 import os import numpy as np ``` 4. 设置训练数据和目标文件夹: ```python # 训练数据和目标文件夹 pos_folder = "positive_images" neg_folder = "negative_images" pos_img_dir = os.getcwd() + "\\" + pos_folder neg_img_dir = os.getcwd() + "\\" + neg_folder ``` 5. 准备正面和负面图像: ```python # 准备正面和负面图像 pos_images = [os.path.join(pos_img_dir, f) for f in os.listdir(pos_img_dir)] neg_images = [os.path.join(neg_img_dir, f) for f in os.listdir(neg_img_dir)] ``` 6. 创建正面和负面图像txt文件: ```python # 创建正面和负面图像txt文件 with open("pos.txt", "w") as f: for img in pos_images: f.write(img + "\n") with open("neg.txt", "w") as f: for img in neg_images: f.write(img + "\n") ``` 7. 创建vec文件: ```python # 创建vec文件 vec_command = f"opencv_createsamples -info pos.txt -num 100 -w 24 -h 24 -vec pos.vec" os.system(vec_command) ``` 8. 训练分类器: ```python # 训练分类器 train_command = f"opencv_traincascade -data classifier -vec pos.vec -bg neg.txt -numPos 80 -numNeg 40 -numStages 10 -w 24 -h 24" os.system(train_command) ``` 9. 运行代码,等待训练完成。 注意:以上代码仅供参考,实际使用时需要根据自己的数据集和需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值