在之前对于人脸识别和车牌识别中,使用模型是直接拿来用,对于如何实现生成xml文件,目前有许多教程,要么介绍就过于简单,要么就过于繁琐。此篇从个人理解角度出发,实现xml文件模型的实现,对眼镜盒识别。有错误之处,还望大佬多多指教。
1.在opencv中有自己特定的联级分类器,需要用到两个函数。
opencv_createsamples.exe和opencv_traincascade.exe。
对于此两个函数位置在于安装好的opencv文件夹中,D:\opencv-3.4.14.exe\opencv\build\x64\vc15\bin 可以参考一下,对于没有此两文件,也不用过于慌张,目前网上有许多是说下载cmake,进行配置,其实并没有如此复杂。直接下载3.4版本就行,新版本并没有此文件,需要编译好像是。这边提供opencv版本下载接口,OpenCV - Open Computer Vision Library,如果是小白没有配置过opencv,可以参考Visual Studio2022c++opencv的配置保姆级教程_visualc++2022-CSDN博客
2,现在解决了两个文件有无问题,来说说两个文件的用途和用法
opencv_createsamples.exe 用来创建.vec文件。
opencv_createsamples.exe程序的命令行参数:
-info <collection_file_name> 描述物体所在图像以及大小位置的描述文件。
-vec <vec_file_name>输出文件,内含用于训练的正样本。
-img <image_file_name>输入图像文件名(例如一个公司的标志)。
-bg<background_file_name>背景图像的描述文件,文件中包含一系列的图像文件名,这些图像将被随机选作物体的背景。
-num<number_of_samples>生成的正样本的数目。
-bgcolor<background_color>背景颜色(目前为灰度图);背景颜色表示透明颜色。因为图像压缩可造成颜色偏差,颜色的容差可以由-bgthresh指定。所有处于bgcolor-bgthresh和bgcolor+bgthresh之间的像素都被设置为透明像素。
-bgthresh <background_color_threshold>
-inv如果指定该标志,前景图像的颜色将翻转。
-randinv如果指定该标志,颜色将随机地翻转。
-maxidev<max_intensity_deviation>前景样本里像素的亮度梯度的最大值。
-maxxangle <max_x_rotation_angle>X轴最大旋转角度,必须以弧度为单位。
-maxyangle <max_y_rotation_angle>Y轴最大旋转角度,必须以弧度为单位。
-maxzangle<max_z_rotation_angle>Z轴最大旋转角度,必须以弧度为单位。
- -show很有用的调试选项。如果指定该选项,每个样本都将被显示。如果按下Esc键,程序将继续创建样本但不再显示。
- -w <sample_width>输出样本的宽度(以像素为单位)。
- -h<sample_height>输出样本的高度(以像素为单位)。
主要了解一下命令行语句: -info 是正样本记录文件 -vec 是生成vec文件的指定地址 -bg 是负样本记录文件 -num 是正样本数目 - w - h 是输出图像宽和高。不懂没事,下文会讲解。
D:\opencv-3.4.14.exe\opencv\build\x64\vc15\bin\opencv_createsamples.exe -info D:\opencv-3.4.14.exe\opencv\image\positive\info.txt -vec D:\opencv-3.4.14.exe\opencv\image\sample.vec -bg D:\opencv-3.4.14.exe\opencv\image\negitive\bg.txt -num 74 -w 24 -h 24
opencv_traincascade.exe 用来创建.xml文件。
opencv_traincascade.exe程序的命令行参数:
-data: 应存储经过训练的分类器的位置。此文件夹应事先手动创建
-vec: 带有正样本的 vec 文件(由 opencv_createsamples 实用程序创建)
-bg: 背景描述文件。这是包含负样本图像的文件
-numPos: 每个分类器阶段训练中使用的正样本数
-numNeg: 每个分类器阶段训练中使用的负样本数
-numStages: 要训练的级联阶段数
-precal