1.需要先下载opencv然后进行编译
编译的文章我之前贴过了,需要的可以点这个链接
https://blog.csdn.net/m0_46175974/article/details/107546524
我的样本是车辆检测,一共准备了8000+的正样本和负样本
然后在到编译完后的opencv3.4.3文件中找到opencv_createsamples和opencv_traincascade应用程序
opencv_createsamples:用于准备训练数据的正样本和测试样本
opencv_traincascade分类器的正样本数据。输出文件是以.vec为后缀的包含图像信息的二进制数据类型
2.新建opencv文件
建立neg和pos文件夹
negs:存负样本,任意不包含要检测物体的照片,可以是任意尺寸,最好是正样本尺寸的6倍以上,然后数量3:1
poss:存正样本照片,包含检测物体的照片,最好是统一尺寸的灰色图。
将编译完后opencv_createsamples和opencv_traincascade也复制到此文件夹中
2.1照片处理
新建neg和pos文件夹,等着存放处理后的照片
打开pycharm,运行以下程序,注意负样本尺寸要比正样本尺寸大
import cv2
import os
path = '/Documents/opencv/poss/'。# 样本路径
# 方法一
for i in range(1, 9):
print(path + str(i) + '.jpg')
img = cv2.imread(path + str(i) + '.jpg', 0)
res_img = cv2.resize(img, (45, 45), interpolation=cv2.INTER_LANCZOS4)
cv2.imwrite('/Documents/opencv/pos/' + str(i) + '.png', res_img)
# 方法二,推荐使用方法二
files = os.listdir(path)
n = 0
print(files)
for file in files:
img = cv2.imread(path + file, 0) # 图片灰化处理
res_img = cv2.resize(img, (45, 45), interpolation=cv2.INTER_LANCZOS4) # 图片压缩
# 按顺序给照片重命名并保存
cv2.imwrite('/Documents/opencv/pos/' + os.sep + str(n + 1) + '.png', res_img)
n += 1
2.2负样本准备
Linux下
打开终端,输入如下命令
ls ./neg/*.*>neg.txt
运行后多出一个名字为neg.txt的文件,打开会看到包含图像名称和路径,如下:
Windows
打开命令符,进入样本文件夹,输入以下命令
dir /b >neg.txt
打开txt文件,删除其中一行neg.txt,并使用查找替换,给文件名加上相对路径,如下:–未在windows操作,贴一张效果图
完成后,将neg.txt文件剪切到neg、pos同一级别文件夹下
2.3正样本训练
Linux下
打开终端,输入如下命令
ls ./pos/*.*>pos.dat
然后双击使用记事本打开文件,使用查找替换改成如下形式:/pos/image.png 1 0 0 -W -H
文件夹就会多一个pos.vec文件,正样本就准备好了
Windows下
打开命令符,进入样本所在文件夹,输入以下命令:
dir /b >pos.dat
打开文件删除pos.dat一行,然后进行文件查找替换成如下格式
保存后剪切然后保存到neg,pos同级目录下,然后执行如下命令
opencv_createsamples.exe -vec pos.vec -info pos.dat -bg neg.txt -w 20 -h 20
pos.vec文件生成,正样本也准备就绪
3.分类器训练
3.1Linux下
在文件夹中新建data文件夹,执行以下命令:
opencv_traincascade -data data -vec pos.vec -bg neg.txt -numPos 1000 -numNeg 3000 -numStages 20 -w 45 -h 45 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -mode ALL
注:numPos:正样本数量 numNeg:负样本数量,本来我用的是8000+样本,但是如果输入实际实际数量会错误,在stackover查找,需要降低实际数量
参考文章:
https://stackoverflow.com/questions/27726973/haar-training-error-215-img-row-img-cols-vecsize-in-function
然后开始训练,速度比较慢,需要耐心等待,执行完成后data文件夹会生成训练好的xml文件
还在训练的文件,这个超级慢,可能要几天的时间才能训练完
测试结果:
自学python编程半年的小白,一块学习啊。
正负样本和训练好的分类集也上传了,图片都是处理好的,下面是链接:
正样本8144张:https://download.csdn.net/download/m0_46175974/12686346
负样本9000张:
https://download.csdn.net/download/m0_46175974/12686344
训练集:
https://download.csdn.net/download/m0_46175974/12686326
可以直接拿来用,需要的可以留qq和微信,我可以发给你
已经上传了不需要积分的,需要的去我上传的资源找一下吧,,