一、训练步骤
1.正负样本准备
创建两个文件夹,分别命名为posdata和negdata,posdata保存正样本,negdata保存负样本。再创建一个xml文件夹,用于存放生成的分类器。
正样本:包含待识别检测的物体,且大小必须一样(下面示例选用60*60)
负样本:大小随意,不包含待检测的物体
2.准备训练工具
将下图opencv安装路径的所有文件复制到正负样本文件夹的同级目录
(若找不到:下方链接下载)
1)csdn
2)网盘:链接:https://pan.baidu.com/s/1lH94cEc4C1f8ikZGuBv16g
提取码:xd5r
3.生成正样本描述文件和vec文件
使用cmd进入到posdata的目录,执行
dir /b/s/p/w *.jpg>pos.txt
若为png图片,则将jpg改成png。
执行完后可在posdata文件夹中找到pos.txt文件,打开使用快捷键ctrl+h,将文件改成如下格式。
参数说明:1表示图片中只有一个待识别物体,0 0 60 60是待识别物体在图片中的位置。若图片中有两个物体,1改成2,位置信息也应该增加一组。
将pos.txt剪切到与opencv_createsamples.exe文件的同一目录,然后cmd执行下面的命令
opencv_createsamples.exe -vec pos.vec -info pos.txt -num 100 -w 60 -h 60
-num为正样本的数量,-w和-h为正样本的宽和高。pos.vec文件生成后,将pos.txt文件改回原样。
4、生成负样本描述文件
使用cmd进入negdata文件夹,执行
dir /b/s/p/w *.jpg>neg.txt
若为png图片,则将jpg改成png。
将pos.txt剪切到与negdata文件夹的同一目录。(负样本不需要vec文件)
5.训练样本
新建traincascade.bat文件(若电脑无法编辑bat文件,可将后缀改成txt,编辑好后再改回bat),在traincascade.bat文件中输入下列内容
opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 100 -numNeg 500 -numStages 20 -w 20 -h 20 -mode ALL
pause
参数 | 说明 |
---|---|
-data | 训练的分类器的存储目录 |
-vec | 正样本文件,由open_createsamples.exe生成,正样本文件后缀名为.vec |
-bg | 负样本说明文件,主要包含负样本文件所在的目录及负样本文件名 |
-numPos | 每级分类器训练时所用到的正样本数目,应小于vec文件中正样本的数目 |
-numNeg | 每级分类器训练时所用到的负样本数目,可以大于-bg指定的图片数目 |
-numStages | 训练分类器的级数,强分类器的个数 |
-precalcValBufSize | 缓存大小,用于存储预先计算的特征值,单位MB |
-precalcIdxBufSize | 缓存大小,用于存储预先计算的特征索引,单位MB |
-w | 训练的正样本的宽度 |
-h | 训练的正样本的高 |
-mode | 值为BASIC、CORE、ALL三种,根据值不同采用不同的Haar特征,BASIC是基本的Haar特征(垂直),CORE是所有的上下Haar特征,ALL是使用所有的Haar特征(包括垂直和45度) |
-minHitRate | 影响每个强分类器阈值,每一级分类器最小命中率,表示每一级强分类器对正样本的的分类准确率 |
双击bat文件即可开始训练。
二、训练效果
基本能识别出目标物。
优化方案:训练多个分类器,级联使用,如识别人脸,可先检测大体,在检测里面是否有眼睛或者嘴巴,加强判断,效果更佳。