大致步骤是:收集样本(正、负样本)——制作标签文件——训练样本——获得xml数据集
使用opencv(我使用的版本是opencv 3.4.12)自带的build\x64\vc15\bin里面的opencv_createsamples.exe和opencv_traincascade.exe(opencv_createsamples.exe生成vec文件,opencv_traincascade.exe训练生成xml文件)
1.在安装的opencv的bin文件夹里创建三个空白文件夹,分别是negdata、posdata、xml
2.收集正样本图片放入posdata文件夹中,正样本图片就是我们需要检测的目标图片,这个图片越多越好,对图片的要求是:1、只包含要检测的图片; 2、图片应尽量保持相同的大小(也可以不用保持相同大小);3、如果有能力那么建议对检测的图片进行二值化处理(也可以不用处理)。以上要求都是为了提高正样本(即目标图片)训练的准确度。
收集负样本图片放入negdata文件夹中,负样本是没有包含我们需要检测的目标图片,图片越多越好,应大于等于正样本图片数,对图片的要求:1、图片内没有任何与检测目标相同的部分,2、任何图片都可以作为负样本图片,以上要求都是为了提高正样本的抗环境复杂度。参考此处链接
下面开始整理posdata文件夹和negdata文件夹:
1.分别让内部图片呈现出 1.jpg 2.jpg 此类格式。此时,可使用代码如下
# import os
# path="D:\\opencv\\build\\x64\\vc15\\bin\\posdata"
# filelist = os.listdir(path)
# #print(filelist)
# i = 0
# for item in filelist:
# src = os.path.join(os.path.abspath(path), item)
# dst = os.path.join(os.path.abspath(path),str(i) + '.jpg') #重新命名并改格式
# os.rename(src, dst)
# print('converting %s to %s ...' % (src, dst))
# i = i + 1
import os
path="D:\\opencv\\build\\x64\\vc15\\bin\\negdata"
filelist = os.listdir(path)
#print(filelist)
i = 0
for item in filelist:
src = os.path.join(os.path.abspath(path), item)
dst = os.path.join(os.path.abspath(path),str(i) + '.jpg'