以检测缺陷为例(目录见下图)。三个工具依次为:标注缺陷——生成正样本的vec文件——训练样本。
【功能】
opencv_annotation.exe,用来标注缺陷,完成后得到txt文件,内容如下。框选时框住缺陷即可。
opencv_createsamples.exe,生成vec文件。此工具可以把框选的缺陷缩放到指定大小(默认24*24像素,注意负样本尺寸≥此像素),即所谓的归一化。
opencv_traincascade.exe,生成cascade.xml,保存了训练得到的模型参数,此文件用于测试。
【用法】
1、opencv_annotation.exe
若图片过大,不建议使用此工具来标注,不方便放大或缩小。一般用于小于屏幕尺寸的图片。
如果图片统一是等大的纯缺陷图(如20*20像素),那么可以不用此工具,直接仿照上图在txt中添加内容即可(参考小技巧),个数、坐标统一 1 0 0 20 20。
超过屏幕尺寸的大图标注,可以用https://github.com/tzutalin/labelImg/releases,得到xml文件中的坐标需要自己计算宽高,仿照上图格式保存到txt中。
-a,生成的txt的路径及txt名。-i,缺陷图片的路径。如果图片高度>指定的m值,则缩小r倍显示。
cmd中输入:opencv_annotation -a=D:\data\NgImages\info.txt -i=D:\data\NgImages\
之后会遍历展示D:\data\NgImages\中的缺陷图,鼠标左键框选缺陷后,按键盘c键确认此框,d键放弃此框,n键下一幅图,esc键退出。
完成后坐标结果会保存到info.txt中(注意txt与图片在同一文件夹中)。
2、opencv_createsamples.exe
删除info.txt中D:\data\NgImages\,因为 -info D:\data\NgImages\info.txt中D:\data\NgImages\会补全图片路径。
cmd中输入:opencv_createsamples -info D:\data\NgImages\info.txt -vec D:\data\ng.vec
依据正样本info.txt中坐标索引到真正框选的缺陷图,将其特征编译为二进制文件ng.vec
常用参数说明:注意-info -vec这两个参数设置后,-bg失效,所以此处不列出。
-info 上一步中得到的info.txt的路径;
-vec 生成vec文件的路径、vec文件名;
-num 生成的正样本的最大数目,默认1000。若正样本图片数>设定值,则只生成设定值个正样本,否则生成实际个数个。
-w 正样本缩放到的宽度,默认24像素
-h 正样本缩放到的高度,默认24像素
3、opencv_traincascade.exe
此处会用到负样本。在负样本图片所在目录新建okInfo.txt,内容是所有负样本图片名(不带路径),如1.jpg等。
opencv_traincascade -data D:\data\cascade.xml -vec D:\data\ng.vec -bg D:\data\OkImages\okInfo.txt -umStaes 25 -w 24 -h 24 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -mode ALL
注意-w 24 -h 24与第2步骤的尺寸要一致,参数含义不再赘述。
最终得到训练好的级联分类器的最终参数文件cascade.xml,此文件可用于测试。