OpenCV的样本训练
- E:\Adaboost\
- ---------positive\ //正样本文件夹
- ---------pimages\ //正样本图片所在文件夹
- ---------pos.dat //正样本集描述文件
- ---------pos.vec //正样本特征集描述文件
- ---------nagative\ //负样本文件夹
- ---------pimages\ //负样本图片所在文件夹
- ---------nag.dat //正样本集描述文件
正样本
1 收集样本
找617张带有车牌的图片,一开始设置大小 200*200 左右,报内存错误。
后来重做,即将617张图片中的车牌用画图软件截取下来,重新设置大小为60*17,并保存为bmp文件。
我这人比较懒,617张车牌的照片?其实还是不容易找的。我是这样做的:
1.1 先收集类似图片
运用 网页图片保存能手 这个软件批量下载图片(这个软件找的好辛苦,试过其它的有的收费有的基本不能用)
我在百度图片搜的关键词有 “车牌” “车牌号” “苏州车牌” “江苏车牌” 等等,获取了近7000张的图片
1.2 利用以前写的小软件截取车牌
运用自己以前写的小程序:车牌图片截取软件(运用opencv基于纹理检测车牌,由于效果不太好,姑且用来为adboost提供辅助收集车牌图片),
设置好样本图片所在的输入路径,在设置好车牌输出路径,运行即可得到 60*17 大小的 bmp 图片
下载地址: http://download.csdn.net/detail/mkr127/5374301
PS 由于效果不怎么好吗,所以在出来的图片中你得删掉无用的图片,于是,几千张的图片我只收集到了617张车牌图片,哈哈,很麻烦的。
BUG 这个小软件有bug,我懒得改,即图片太大如5400*2700有时会出错,还有每次运行的图片不要太多,不然会出错,将图片 2000张一组就没有问题。
当然,如果你不喜欢,可以自己手动截取。
1.3 将得到的617张正样本图片放在E:\Adaboost\positive\pimages\文件夹中
1.4 负样本图片
即不包含车牌的图片,我收集了几千张,用matlab 批量格式化为 200*200大小的bmp图片,放在E:\Adaboost\nagative\pimages\文件夹内
2 创建正负样本描述文件
2.1 正样本描述文件
cd E:\Adaboost\positive
dir pimages /b > pos.dat
运用文本编辑软件对生成的文件 pos.dat 进行替换修改:
a: 将jpg 替换为 jpg 1 0 0 60 17
b: 选择所有,tab键,将tab 替换为图片所在路径
得:
2.1 负样本描述文件
cd E:\Adaboost\nagative
dir pimages /b > nag.dat
运用文本编辑软件对生成的文件 pos.dat 进行替换修改:
选择所有,tab键,将tab 替换为图片所在路径
得
3 设置环境变量
添加Opencv库中opencv_createsamples的环境变量,以便于在cmd中执行,在path中最后添加 ;C:\OpenCV\opencv\install\bin
4 创建正样本特征集描述文件
打开cmd,进入positive所在文件夹
cd E:\Adaboost\positive
opencv_createsamples -vec pos.vec -info pos.dat -num 617 -w 60 -h 17
//-num 正样本数量 -w图像宽 -h高
如下图所示
在E:\Adaboost\positive下生成pos.vec文件,即正样本特征集描述文件。
5 开始训练
cd E:\Adaboost\nagative
opencv_haartraining -data trainout -vec e:\Adaboost\positive\pos.vec -bg nag.dat -npos 317 -nneg 300 -mem 40000 -mode ALL -w 60 -h 17
//-mem分配的内存大小 -w正样本宽 -h正样本高
//-npos正样本数量,-nneg 负样本数量,至于为什么是这个值,最后将有分析。
6 遇到的错误
6.1 内存不够的错误
那是因为正样本图片太大了,我改为60*17就正常了
6.2 OpenCV Error: Assertion failed (elements_read == 1)
原因:-nneg -npos 参数出错
参考:
http://bbs.csdn.net/topics/390388465
http://askbot.alekcac.webfactional.com/question/3085/why-always-opencv-error-assertion-failed-elements_read-1-in-unknown-function/
我英文不太好 - -!初步分析认为:
假如我有正样本总数 617 ,npos(正样本参数设置的大小,待定);负样本数 nneg 待定(我原有3000张左右), nstages 12
617 >= npos + (12-1)*0.001*npos +nneg
那么假如分配 nneg=300,则
npos<= (617-300)/1.011 = 317
6.3 再次测试
- opencv_haartraining -data trainout -vec e:\Adaboost\positive\pos.vec -bg nag.dat -npos 317 -nneg 300 -mem 40000 -mode ALL -w 60 -h 17
问题搞定,我没有设置-nstages=12 也没错,额,待进一步研究。
结果
跑到第四层的时候,跑了一天两夜,仍然是第4阶!哥不淡定了,查查估计是死循环了,网上说适当增加负样本,
那么我在控制台中 Ctrl + C, 注意,是可以断开的,以前我一直不敢...原来在执行训练的话会自动加载 以前训练的级,估计这就是级联吧,都是自己摸索的,纯粹的供大家参考,有不到之处尽请谅解。
我将负样本增至600
- opencv_haartraining -data trainout -vec e:\Adaboost\positive\pos.vec -bg nag.dat -npos 317 -nneg 600-mem 40000 -mode ALL -w 60 -h 17
这时候在很短的时间内跑到了第10阶。进一步探究中。
接上
请注意,要确保 nag.dat 里面的数据大于600行,因为上一步执行到第10层时停止不动了
就停在这里,于是我找到 nag.dat(负样本描述文件)发现里面的数据只有300行,怪不得,于是我追加打到1269行,此时我再执行
E:\Adaboost\nagative>opencv_haartraining -data trainout -vec e:\Adaboost\positive\pos.vec -bg nag.dat -npos 317 -nneg 900 -mem 40000 -mode ALL -w 60 -h 17
继续向下训练
截图为证
报一下我的数据,pos.dat =617行, pimages =617张 , nag.dat= 1269行 , nimages= 1269张
trainout 训练到第十层
继续向下探索,由于我对着个完全没有经验,如果大家觉得太过幼稚简单,可以移步,呵呵,纯当给像我这样的一无所知之人一个借鉴。
仅此而已。
训练结束
得到 分类器:
这时我在增大负样本数到1269 发现到13级就训练结束了,和负样本数为900的没有区别,并且 E:\Adaboost\nagative\trainout.xml 自动更新覆盖为最新版,这下我就不用担心以前的成果白费了,当然,最好做个备份,E:\Adaboost\nagative\trainout 这里面的数据不要删,以后增加正负样本的数量的话我估计会自动累加,呵呵。
接下来开始测试:利用之前写的人脸检测代码,将分类器改成我们测试的分类器,一切就容易起来!
实验的结果还是挺差的,估计是样本太少了,我的正样本才600多,专业的最少都7-8000,也有可能是我的正样本图截的不好,用软件截的,没有手工的准确,再者就是网上的图片不行,真正好的样本还是比较少的。
测试结果:
接下来就是增加样本数量,最后还不好的话,就增大样本质量,哈哈!
如果以后有经历,就写个MFC通用的提取分类器的小程序,用来测试分类器的性能。
本人写的通用小项目下载地址:可以提取分类器进行检测,大家必须配置好OpenCV环境和在源码中设置好分类器的路径。
http://download.csdn.net/detail/mkr127/5397219
项目用到的正样本训练库,额,分有点高,毕竟是本人从几千张图片中一张一张筛选出来的...算是我的辛苦费吧,勿喷我......
http://download.csdn.net/detail/mkr127/5418861
60-17像素bmp车牌 共617张。
OpenCV的样本训练相关推荐
- 【OpenCV】OpenCV的样本训练
E:\Adaboost\ ---------positive\ //正样本文件夹 ---------pimages\ //正样本图片所在文件夹 -------- ...
- jTessBoxEditor工具进行Tesseract3.02.02样本训练
1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语 ...
- Tesseract-OCR 字符识别---样本训练 [转]
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文). ...
- 直播 | AAAI 2021:自然语言中token-aware的虚拟对抗样本训练
「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...
- python文字识别 训练_Python3.x:pytesseract识别率提高(样本训练)
Python3.x:pytesseract识别率提高(样本训练) 1,下载并安装3.05版本的tesseract 2,如果你的训练素材是很多张非tif格式的图片,首先要做的事情就是将这么图片合并(个人 ...
- MoCo 动量对比学习——一种维护超大负样本训练的框架
MoCo 动量对比学习--一种维护超大负样本训练的框架 FesianXu 20210803 at Baidu Search Team 前言 在拥有着海量数据的大型互联网公司中,对比学习变得逐渐流行起来 ...
- 圆桌会回顾 | SecureBoost:挑战千万级别样本训练之性能提升篇
[私信获取圆桌会视频] 5月26日,FATE开源社区第九期圆桌会圆满落幕.本次圆桌会,微众陈伟敬为我们分享了SecureBoost:挑战千万级别样本训练之性能提升篇. 接下来带大家回顾经典问答环节,为 ...
- OpenCV级联分类器训练与使用实战教程-贾志刚-专题视频课程
OpenCV级联分类器训练与使用实战教程-1012人已学习 课程介绍 基于OpenCV新版本3.1.0详细讲述了HAAR与LBP级联分类器的基本原理与使用技巧,通过视频中人脸实时检测与 ...
- Tesseract OCR手写数字的样本训练
Tesseract OCR样本训练除需要安装Tesseract OCR软件外,还需要下载Tesseract OCR样本训练工具jTessBoxEditorFX,下载地址: http://dl.pcon ...
最新文章
- qrcode——js生成二维码
- ASP.NET的MVC中使用Cookie做身份验证(附代码下载)
- dinic (最大流) 算法 讲解
- 疫情期间,千万级系统宕机N次,老板撂下狠话:没法把性提升10倍,全员解雇!...
- 从四大造字法看文字所承载的文化_对央视“汉字的魅力”讲授之管见(《天津教育报》2012年6月15日)...
- 安装oculus运行时出现问题_成品天沟在安装时会出现哪些问题?
- 鏖战九载,Google 是否会因 Oracle 而弃用 Java?
- printf()的冷门用法+格子中输出--蓝桥杯
- Linux 服务器之间文件传输
- RTP协议RTCP协议
- 常用头文件和一些简单的函数
- 无门槛福利:CSDN和文库下载
- MacBook鼠标指针乱窜/不受控制问题的解决方法
- epub文件一揽子解决方案
- 数据库建模 : 概念模型 , 逻辑模型和物理模型
- 对于因果模型的常见评估函数:SHD 和 FDR
- 数据结构Python版--线性结构
- 脑裂的产生与解决方案
- kafka教程之linux安装教程(一)
- 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)