基于windows 使用opencv训练自己的分类器

本文档介绍了如何在Windows上使用OpenCV3.4.1训练图像分类模型。首先,提供了opencv的下载链接,并建议使用Anaconda虚拟环境。接着,详细说明了如何准备正负样本图片,调整尺寸,生成描述文件,创建vec文件,最后进行模型训练。关键步骤包括批量修改图片尺寸,生成描述文件,训练级联分类器。整个过程涉及图像预处理、数据组织和OpenCV自带工具的使用。
摘要由CSDN通过智能技术生成

windows 基于opencv 使用自己的数据,训练分类模型

1.你首先要有一个opencv,我选的是opencv3.4.1 网上找不到可以在我这下载编译好的。网上下的好多都要自己编译,感觉得多花半天时间。
下载链接:https://download.csdn.net/download/rugeweiwu/85441606?spm=1001.2014.3001.5501
2.将自己的图片放到文件夹,取名posdata,网上找一些其他照片,可以找现成的图片库,放到文件夹negdata。
3.修改图片尺寸,网上都说posdata里面的文件修改成2020,negdata修改成5050。使用网上抄来的脚本批量修改图片。我使用了anaconda的虚拟环境跑脚本,你们也可以用,想用可以参考anaconda创建虚拟环境的过程,我之前的文章有提到过,感兴趣可以参考。也可以白嫖百度AI人工智能的算力,在他的环境去转换数据,感觉比在自己的电脑装各种版本的安装包好。
环境里面要安装cv2,可以使用pip安装
pip install opencv-python3.4.2.17
pip install opencv-contrib-python
3.4.2.17

然后执行python批量转换图像。把posdata图像改成20*20尺寸,放到pos文件夹。
我这百度ai那里跑的,用的是linux版本的路径,你在自己的环境看下路径的/和\,要区分开,如果是windous环境路径要是:E:\opencv3.4.1\pos这样格式的
import cv2
path = “/home/aistudio/data/image/posdata/”#图片所在文件夹路径
for i in range(1, 168):#这里的168是你pos图片的数量,你是500张就写500
print(path+‘1000 (’+str(i)+‘).jpg’)#这里要注意,是你图片的名字,需要修改的,不要照抄
img = cv2.imread(path+‘1000 (’+str(i)+‘).jpg’, #这里要注意,是你图片的名字,需要修改的,不要照抄cv2.IMREAD_GRAYSCALE)
img2020 = cv2.resize(img, (20, 20))

cv2.waitKey(20)
cv2.imwrite('/home/aistudio/data/image/pos/'+str(i)+'.jpg', img2020)

有的资料说neg不用改尺寸,有的说需要改,我也没弄明白,反正我也改了,和正样本的脚本类似,知识修改图片数量、名称以及尺寸改成50*50,放到neg文件夹
import cv2
path = “/home/aistudio/data/image/negdata/”#图片所在文件夹路径
for i in range(1, 128):
print(path+‘2000 (’+str(i)+‘).jpg’)
img = cv2.imread(path+‘2000 (’+str(i)+‘).jpg’, cv2.IMREAD_GRAYSCALE)
img5050 = cv2.resize(img, (50, 50))
print(path+‘q’)
# cv2.imshow(“img”, img5050)
cv2.waitKey(20)
cv2.imwrite(‘/home/aistudio/data/image/neg/’+str(i)+‘.jpg’, img5050)

4、生成描述文件了,网上给了参考,还是抄一下。
在window环境在,我是在anaconda的虚拟环境下做的。进入到pos文件夹。
windows 使用 E:切换主路径,然后cd进入 不多说。
执行dir /b/s/p/w *.jpg > pos.txt,生成正样本描述文件pos.txt
然后去到neg文件夹,执行dir /b/s/p/w *.jpg > neg.txt,生成neg.txt
是这个样子的
在这里插入图片描述

5、把pos文件夹和neg文件夹拷到第一步下载的opencv的目录里面,把pos.txt 和neg.txt也拷到跟pos同级目录。
修改pos.txt ,把jpg替换成jpg 1 0 0 20 20 ,这个样子的,注意你的路径一定是全路径,否则会出问题,莫名其妙的,我就搞了一个晚上,才弄明白,一直报这个错。
Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can’t be trained. Check the used training parameters.
在这里插入图片描述
这里面的1 0 0 20 20 ,后面的20 20 是你pos图像的尺寸。
6、生成vec文件
执行opencv_createsamples.exe -vec pos.vec -info pos.txt -num 166 -w 20 -h 20
pos.vec是要生成的,pos.txt是刚修改的,num 166 是你pos的图像数量,能少不能多。-w -h 是图像尺寸。

7、这一步要训练了,训练之前说是要把pos.txt修改回来,不确定什么原因,改回来就是了,可以不改试一下效果。
然后执行:opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 140 -numNeg 600 -numStages 20 -w 20 -h 20 -mode ALL

numPos 是正样本训练数量,网上说是在0.8-0.9倍的总数量,numNeg同理。
就能开始训练了,
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值