opencv 构造训练器

D:/face   构造face训练器为例

一:样本创建

 训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本,反例样本指其它任意图片。

负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个。

创建 正 负 样本目录

mkdir D:\face\posdata

mkdir D:\face\negdata

把正负样本图片,分别放入2个文件夹下。

 

生成负样本描述文件

cd  D:\face\negdata

dir /b > negdata.dat   #删除negdata.data的最后一行,因为最后一样是描述文件本身。

 

生成正样本描述文件

cd  D:\face\posdata

dir /b > posdata.dat   #删除posdata.data的最后一行,因为最后一样是描述文件本身

然后为 posdata.dat 中的每一行后加上文件描述擦数(图片个数,目标开始,结束位置,高,宽),例如  

1.jpg  1 1 1 23 23

2.jpg  1 1 1 23 23

使用createsamples命令生成正例训练.vec文件。

opencv_createsamples  -info  D:\face\posdata\posdata.data

                                  -vec   D:\face\data\pos.vec

                                   -num 10 -w 20 -h 20

运行后生成的pos.vec 文件作后面的训练用

 

二:训练分类器 

使用 traincascade(opencv2 中只有haartrainning命令,注意版本2个3的参数格式稍有不同)。 

命令如下:

opencv_traincascade   -data D:\face\data\cascade        #分类器的存放路径

                                -vec  D:\face\data\pos.vec          #正样本的vec文件

                                -bg  D:\face\negdata.dat             #付样本描述文件

                                -numPos 10                                #正样图片文件本个数   

                                -numNeg 10                               #付样本图片文件个数

                                -numStages 5                              #训练阶段数,根据样本数量而定,太大,会提示错误:Train dataset for temp stage can not be filled. .

                                -mode ALL       #训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。

                                 -w   20    -h 20    #样本宽和高

如果参数都设置对了,任然报错误:Train dataset for temp stage can not be filled. Branch training terminated.

可能是 -gb 参数不带文件名称, 那可以付样本的描述文件放到执行目录,负样本的描述内容增加图片位置的路径来解决。

最后没有报错,会在-data的路径下生成训练文件。

 

三:利用训练好的分类器,做检测

##TODO 还没有找到performance.exe程序
performance.exe   

 

使用python-cv2 调用生成的分类器:

import cv2

cascade = cv2.CascadeClassifier('D:\face\data\cascade\cascade.xml')

faces = cascade .detectMultiScale(gray, 1.3, 5)

 

 

posted on 2016-06-25 11:37  Odoo在中国  阅读(458)  评论(0编辑  收藏  举报

导航