使用opencv的adaboost训练自己的分类器

1 首先准备好正样本:(这里我们训练的头部分类器)
这里写图片描述
2 将正样本统一到固定尺寸
这里我使用python实现,python读取文件夹还没有用过,直接先手动操作:
打开命令行,进入正样本文件夹中,输入:

dir /b >pos.txt

这样就在正样本文件夹中生成了pos.txt,记录了所有的文件名:
这里写图片描述
直接在ue中打开,切换到16进制模式,选择替换,将0D 0A替换为2C 0D 0A
这里写图片描述
保存后修改文件名为:pos.csv
这样就得到了个csv文件,保存了所有文件的名称(感觉有点蠢,第一次先这样吧)。
开始写代码,代码很简单,就是读取csv文件,打开图像,灰度化,统一尺寸到32*32,保存文件

#coding=utf-8

import pandas as pd
import numpy
from numpy import NaN
import cv2

test = pd.read_csv('pos.csv',index_col=False,header=None)#读取csv文件
test.columns = ['Dir']#修改列名称
print(test.head(5))#看看数据情况

num = test.shape[0]#取出个数
print(num)

for i in range(0,num):
    #读取文件
    print(i)
    #print(test.Dir[i])
    image = cv2.imread(test.Dir[i])
    if image is None:
        test.Dir[i] = NaN#设置为空
        continue
    image = cv2.resize(image,(30,30))
    image = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    cv2.imwrite(test.Dir[i],image)

test.dropna(axis=0,how='any')#去除调Na行
test=test.dropna()
print(test.shape[0])

test.to_csv('pos.csv',index=False,header=False)

print("OK end")

3 生成正样本描述文件
还记得刚才的pos.txt吧,直接打开,将jpg都替换为jpg 1 0 0 30 30
这里写图片描述
记得检查一下,必须全部都是jpg文件,别弄错了。
4 生成负样本描述文件
命令行进入负样本目录,直接输入:

dir /b > neg.txt

5 生成vec文件
命令行进入上一层,输入命令:(前提当然是opencv安装好了)

opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -bg neg\neg.txt -w 30 -h 30 -num 3000 

这就生成了pos.vec文件
这里写图片描述
6 开始训练:
opencv_traincascade.exe -data data -vec pos.vec -bg neg/neg.txt -numPos 3000 -numNeg 5000 -numStages 4 -featureType Haar -w 30 -h 30 -mode ALL
结果发生错误:
这里写图片描述
经过了长时间的扑腾,最终发现,是负样本的neg.txt必须包含相对路径,使用ue打开,直接列模式编辑添加,终于可以了。
这里写图片描述
(后面测试opencv2.4.9版本貌似没有这个路径的问题)
(顺便吐槽下,harr特征的训练实在太慢了,建议测试时候先使用HOG或者LBP特征确定步骤是否正确)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值