文章目录
- 1、Windows下安装OpenCV及依赖库
- 2、获取opencv_createsamples.exe和opencv_traincascade.exe
- 3、准备样本文件
- 正负样本描述文件生成
- 5、训练分类器
- 5.1、使用opencv_createsamples.exe生成positives.vec文件
- 5.2、使用opencv_traincascade.exe训练分类器
1、Windows下安装OpenCV及依赖库
直接在Powershell用pip安装,用国内源(我这里用的是阿里源)下载OpenCV,官方的太慢了。
pip install opencv-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
测试一下
python
import cv2
Ctrl+Z退出Python环境
安装依赖库
pip install scikit-image
2、获取opencv_createsamples.exe和opencv_traincascade.exe
训练过分类器的小伙伴都知道,训练分类器需要用到opencv_createsamples.exe和opencv_traincascade.exe这两个程序,然而我们安装的OpenCV都是不带这两个程序的,这里呢我也是直接拿别人的来用的,两个文件下载链接如下:
Haar分类器训练
https://www.alipan.com/s/WTy6siHZnhS
提取码: 2t84
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
可以找到opencv_createsamples.exe和opencv_traincascade.exe这两个文件,当然里面还包含了一些库,我们训练时是要用到他们的。
3、准备样本文件
样本文件也放在网盘中了
Haar分类器训练
https://www.alipan.com/s/WTy6siHZnhS
提取码: 2t84
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
正负样本描述文件生成
- 在OpenCV下建立pos.py拷贝以下代码进去运行,生成正样本描述文件pos.txt
import os
def create_pos_n_neg():
for file_type in ['pos']: #此处修改neg或pos即可
for img in os.listdir(file_type):
if (file_type == 'neg'):
line = file_type + '/' + img + '\n'
with open('neg.txt', 'a') as f:
f.write(line)
elif (file_type == 'pos'):
line = file_type + '/' + img + ' 1 0 0 50 50\n'
with open('pos.txt', 'a') as f:
f.write(line)
if __name__ == '__main__':
create_pos_n_neg()
print('描述文件已生成!')
打开pos.txt就可以看到正样本描述文件内容
- 在OpenCV下建立neg.py文件,拷贝下面代码,生成负样本描述文件neg.txt
import os
def create_pos_n_neg():
for file_type in ['neg']: #此处修改neg或pos即可
for img in os.listdir(file_type):
if (file_type == 'neg'):
line = 'D:/OpenCV/'+file_type + '/' + img + '\n'
with open('neg.txt', 'a') as f:
f.write(line)
elif (file_type == 'pos'):
line = 'D:/OpenCV/'+file_type + '/' + img + ' 1 0 0 50 50\n'
with open('pos.txt', 'a') as f:
f.write(line)
if __name__ == '__main__':
create_pos_n_neg()
print('描述文件已生成!')
打开neg.txt就可以看到负样本描述文件内容
5、训练分类器
5.1、使用opencv_createsamples.exe生成positives.vec文件
在opencv_createsamples.exe下进入cmd,执行如下命令
opencv_createsamples.exe -vec D:\OpenCV\info.vec -info D:\OpenCV\info.txt -bg D:\OpenCV\bg.txt -num 5 -w 50 -h 50
其中,-info字段填写正样本描述文件;-vec用于保存制作的正样本;-num制定正样本的数目,不能大于正样本图片数;-w和-h分别指定正样本的宽和高。
5.2、使用opencv_traincascade.exe训练分类器
在OpenCV文件夹下建立xml_file文件夹,用来存储训练过程中生成的xml文件
在opencv_traincascade.exe下进入cmd,执行如下命令
opencv_traincascade.exe -data D:\OpenCV\xml_file -vec D:\OpenCV\info.vec -bg D:\OpenCV\bg.txt -numPos 4 -numNeg 100 -numStages 5 -featureType LBP -w 50 -h 50
data :训练后data目录下会存储训练过程中生成的文件
vec :通过opencv_createsamples生成的vec文件
bg bg.txt:bg.txt是负样本文件的数据
numPos :正样本的数目,这个数值一定要比准备正样本时的数目少,不然会报can not get new positive sample.
numNeg :负样本数目,数值可以比负样本大
numStages :训练分类器的级数
w 50:必须与opencv_createsample中使用的-w值一致
h 50:必须与opencv_createsample中使用的-h值一致
featureType LBP: 训练时,提取图像特征的类型,目前只支持LBP、HOG、Haar三种特征。但是HAAR训练非常非常的慢,而LBP则相对快很多,因为HAAR需要浮点运算,精度自然比LBP更高,但是LBP的效果也基本能达到HAAR的效果。
注意:同时正负样本数目和w、h以及训练级数numStages的大小对训练时间的影响特别大
训练完之后我们就可以在xml_file文件夹下看到训练好的分类器cascade.xml