用opencv训练LBP特征分类器生成xml文件

需要工具:opencv_createsamples.exe 、opencv_traincascade.exe 、opencv_world3414.dll 和 opencv_world3414d.dll (这些都在下载的opencv中的,我的opencv版本为opencv-3.4.14-vc14_vc15地址是F:\document\pycharm1\opencv\build\x64\vc15\bin)
如果不想进行下载这些个训练工具,我已经准备好放到百度网盘里了,有需要的自取。(链接:https://pan.baidu.com/s/158m6bpkiVWF29S7rbuIfWg
提取码:pluo )

一、准备工作
1.正负样本的准备:
(1)如果你找的正负样本不多,可进行正负样本的旋转和镜像操作。(在进行旋转、镜像等操作前建议先调整照片的像素大小)

推荐使用软件ACDSee官方免费版,安装打开后找到样本所在文件夹,进行Ctrl+A全选,右击找到批量,就可以进行旋转、调大小、转格式等操作了。

我们进行的是对安全帽模型的训练,在进行安全帽正样本的获取时,先进行爬取了2000张佩戴安全帽的人或场景,但是对于正样本的要求是尽可能少的杂质,我们也找了获取感兴趣区域的一些文章,各种方法,但是我们认为效果不一定好,索性我们自己进行照片的剪裁(我们有7个人)。之后就对正样本进行了调大小(LBP一般格式是24x24、HAAR一般使用格式是20x20),调好之后进行旋转、镜像等获取更多的正样本,再之后把所有的正样本放到一个文件夹里进行统一重命名,在之后进行对正样本转换格式(jpg转bmp)再之后进行灰度的转换。
灰度的转换我用的是python代码,既简单有快捷。代码如下:

import cv2
import osinput_dir = 'F:\document\dachuang\\2\\000'
out_dir = 'F:\document\dachuang\\2\hui'
a = os.listdir(input_dir)
for i in a:img = cv2.imread(input_dir+'/'+i)gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)cv2.imencode('.bmp', gray)[1].tofile(out_dir+'/'+i)

之后再对负样本进行相似的操作(样本大小可以不一致,但必须比正样本尺寸大)
部分正样本:

部分负样本:

二、创建正负样本描述性文件
在某个盘里进行创建文件夹TrainTest,把训练工具(opencv_createsamples.exe 、opencv_traincascade.exe 、opencv_world3414.dll 和 opencv_world3414d.dll)放在这个文件夹里。
在TrainTest里创建三个文件夹,分别为pos、neg、xml。pos文件夹中存放准备好的正样本图片,neg文件夹中存放准备好的负样本图片,xml文件夹中存放训练好的xml文件。
为正样本创建描述文件格式文件pos.txt,具体做法如下:
打开cmd,cd 到pos文件夹所在位置,输入代码dir /b > pos.txt
为负样本创建描述文件格式文件neg.txt:
cd到neg文件夹所在位置,输入代码
dir /b > neg.txt

生成后还需要一定的修改:
打开pos.txt, 使用替换功能,把所有的bmp 换成 bmp 1 0 0 24 24,将所有的图片前都加上文件夹所在的绝对路径
然后在pos.txt文件里将最后一行的空格和pos.txt删掉,保存。
修改完以后是这样的:

打开neg.txt,使用替换功能将所有的图片前都加上文件夹所在的绝对路径
然后在neg.txt文件里将最后一行的空格和neg.txt删掉,保存。
修改完以后是这样的:

然后要把修改好的pos.txt和neg.txt放到pos和neg文件夹的同级目录下,到这里就可以进行训练了。
三、训练模型
1.使用opencv_createsamples.exe创建样本:
在cmd里cd到TrainTest文件夹下,执行指令:
opencv_createsamples.exe -info pos.txt -vec detect_number.vec -bg neg.txt -num 6256 -w 24 -h 24

参数解释:
-info:就是pos.txt的位置,可以直接使用绝对地址避免出错
-vec 是你生成vec文件的位置和名称
-bg 就是neg.txt的位置,同样也可以直接使用绝对地址
-num 正样本的数量,有多少正样本就写多少
-w -h 正样本的宽高
执行后结果如下:

必须要出现你正样本数目的samples。(如果没出现,要检查一下前面的步骤)

2.使用opencv_traincascade.exe开始训练:
输入命令:opencv_traincascade.exe -data xml -vec detect_number.vec -bg neg.txt -numPos 5400 -numNeg 10846 -numStages 20 -featureType LBP -w 24 -h 24

参数解释:
-data 就是你存放训练好的xml文件的文件夹,这个一定要事先创建好
-vec 是之前生成vec文件
-bg 就是neg.txt的位置
-numPos 正样本的数量,这里填的比正样本数量稍微少一点(一般比正样本的0.8倍或0.9倍少),避免出错
-numNeg 负样本的数量,有多少填多少
-numStages 训练步数
-featureType ,就是特征类型
-w -h 是正样本的宽高

部分训练图如下:




这里我之前出错了一次,然后第二张图的步骤是从步骤1开始的。(一般出错都是numPos的正样本数目写的不合理,防止出错就写成少于正样本数目的0.8倍)
训练完成后在xml文件夹里会生成一系列xml文件,最后能用的文件是cascade.xml
测试生成的xml模型:

import cv2
detector = cv2.CascadeClassifier('F:\\document\\dachuang\\TrainTest\\xml\\cascade.xml')
cap = cv2.VideoCapture(0)
while True:ret, frame = cap.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = detector.detectMultiScale(gray,1.1,3,0,(100,100))for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()

ok,大功告成!觉得有帮助的可以点个赞哦!

训练出错可看文章:https://blog.csdn.net/qq_38189484/article/details/87908747
本文参考文章:https://blog.csdn.net/To_be_a_fisher/article/details/89528326
https://blog.csdn.net/MangoHHHH/article/details/109189666

用opencv训练LBP特征分类器生成xml文件相关推荐

  1. OpenCV3训练人脸检测分类器生成XML文件的过程

    OpenCV训练自己的分类器 注:本文举得是一个训练人脸分类器的例子,亲自试验过,采用的是opencv3.4 1.准备训练样本 看网上说正负样本比例为1:3最佳:尺寸为20x20最佳 附上人脸训练的数 ...

  2. Opencv使用cascade方法训练自己的LBP特征分类器的全过程

    前言 刚刚才把自己训练的分类器整出来,, 现在来理一下整个过程,从制作正负样本开始一直到最后产生自己的分类器.xml文件. 因为毕设的要求,可能要用Opencv训练识别模型,用以识别道路积水.Open ...

  3. 利用jdom生成XML文件

    public class TestXml {      public void bulidXml() throws FileNotFoundException, IOException{   //创建 ...

  4. Java——SAX生成XML文件

    SAX生成XML文件  准备工作 创建一个SAXTransformerFactory 类对象 //创建一个 SAXTransformerFactory 类对象 SAXTransformerFactor ...

  5. dom解析和生成XML文件

    使用这种方式解析时,需要使用node.getNodeType() == Node.ELEMENT_NODE判断结点是否为元素结点,否则会输出很多#text(结点前有空格存在的原因). 完成的XML解析 ...

  6. Android生成Xml文件

    我们在开发的过程中,有时会用到将一些数据保存到xml文件中,在Android中给我们提供了xml序列化来帮我们创建一个xml文件,这里我用两种方式来创建xml文件. 一.使用字符串拼接的方式来创建 二 ...

  7. python生成xml文件工具_Python根据指定文件生成XML的方法

    因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...

  8. python中dom模块_Python中使用dom模块生成XML文件示例

    在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...

  9. android 构造xml,android 中生成xml文件

    在Android中生成xml文件真的很简单,下面提供2中方法,一种是通过String写入到文件,另外一种是通过XML 的 XmlSerializer. 以后遇到Android写xml内容就不会困惑了 ...

最新文章

  1. 【耗子啃过的SEO之入门知识二】SEOer必看,初级、中级和高级SEOer
  2. UA MATH567 高维统计III 随机矩阵3 集网与覆盖
  3. lvm快照的创建恢复
  4. WDS 自动化部署安装 win2008 服务器实验
  5. vector简单实现
  6. NOLOGGINGFORCE LOGGING
  7. 将截断字符串或二进制数据
  8. Windows下使用Caffe-Resnet
  9. 【转】HttpCompress
  10. 48.自定义邮件模板
  11. java下载视频_怎么用Java从网上下载一个视频下来
  12. ShaderJoy —— 最简单的 “RayTrace(光线追踪)” 的实现 【GLSL】
  13. 启用IIS服务(运行中输入inetmgr打不开IIS管理器的解决办法)
  14. 启发式搜索 :A*算法详解
  15. 上传Android library到JitPack
  16. Napatech网络加速卡
  17. TI KeyStone C66x开发板的Xilinx FPGA下载器接口、LED指示灯
  18. Linux的strings命令_拔剑-浆糊的传说_新浪博客
  19. c# - Owin Katana
  20. 【算法分析】回溯法解数独(九宫格)算法

热门文章

  1. 纯手写2022年最新JVM调优实战手册,看完让你精通JVM调优
  2. 微信小程序开发(二)图片上传
  3. 2019CSP-J普及组复赛题解
  4. android手写签名android-signaturepad
  5. python语言中缩进为几个空格_python每级缩进都只能使用四个空格。一个判断题,对不对?...
  6. VMware Workstation提示和Device/Credential Guard 不兼容
  7. php yaf环境启动,yaf框架教程(3)- yaf框架环境配置
  8. 自学Java真的可以找到工作吗?
  9. 聊天界面的左右分布局
  10. 2021年CSP-J/S 第一轮(初赛)各省的晋级分数线汇总分析