利用opencv自带工具训练LBP分类器,自己学习,特地做个记录,分享给大家,哪里写的不好,可以在下面留言!

注:本片博客以人脸检测为实验demo。

一、训练数据准备

1、训练图片制作

1.1 正制作样本注意点:

(1)人脸以外的背景尽量去除,并赋值为RGB=(255,255,255)的纯黑色。

(2)人脸图片大小可以不一样,但是图片长宽比例一样要一样,例(84*84),(104*104)。

(3)要想训练出来的分类器分类准确,人脸数量要过10000。

(4)训练数据人脸姿态要多种多样。

图 1

opencv训练是什么意思 opencv训练器_Data

1.1.1 设置正样本对应的数据标签

图片文件夹

opencv训练是什么意思 opencv训练器_Database_02

同级目录设置对应文本,以.dat为后缀。

opencv训练是什么意思 opencv训练器_Database_03

记录如下:

opencv训练是什么意思 opencv训练器_opencv_04

注:顺序介绍参数意思 ,1(文件夹名) XX.jpg(为图片名) 1(表示只有一张人脸)0 0 104 104(人脸位置)。

1.2 负样本制作注意点

(1)尽量贴近实际使用时的负样本场景。

(2)图片大小和比例都没要求。

(3)数量可以比正样本少。因为可以切割。

图 2

opencv训练是什么意思 opencv训练器_opencv训练是什么意思_05

1.2.1 设置负样本对应的数据标签

同级目录设置对应文本,以.txt为后缀。

opencv训练是什么意思 opencv训练器_Data_06

opencv训练是什么意思 opencv训练器_Database_07

注:顺序介绍参数意思 ,1(文件夹名) XX.jpg(为图片名)

二、利用opencv_createsamples.exe制作evc文件

 

Usage: opencv_createsamples
   [-info <collection_file_name>]             //info文件名
   [-img <image_file_name>]
   [-vec <vec_file_name>]                 //生成VEC文件名
   [-bg <background_file_name>]             //用不到
   [-num <number_of_samples = 1000>]             //正样本数量
   [-bgcolor <background_color = 0>]               //背景颜色
   [-inv] [-randinv] [-bgthresh <background_color_threshold = 80>] //用不到
   [-maxidev <max_intensity_deviation = 40>]         //最大灰度方差,用不到
   [-maxxangle <max_x_rotation_angle = 1.100000>]         //识别角度设置
   [-maxyangle <max_y_rotation_angle = 1.100000>]        //识别角度设置
   [-maxzangle <max_z_rotation_angle = 0.500000>]        //识别角度设置
   [-show [<scale = 4.000000>]]                //图片显示,不用点
   [-w <sample_width = 24>]                 //样本图片大小归一化
   [-h <sample_height = 24>]                //样本图片大小归一化

在opencv_createsamples.exe同级目录输入cmd进入cmd.exe,输入对应参数,我输入的参数如下:

opencv_createsamples -info D:\A_Data\Face_Database\mini_data\1_imgae.dat -vec D:\A_Data\Face_Database\mini_data\vec\vec_file.vec -num 480 -bgcolor 0 -bgthresh 0 -w 24 -h 24

如果运行成功会在

opencv训练是什么意思 opencv训练器_opencv训练是什么意思_08

输出文件

opencv训练是什么意思 opencv训练器_数据_09

,产生就表示运行成功。

三、利用opencv_traincascade正式训练

帮助如下:

opencv_traincascade
 Usage: opencv_traincascade
   -data <cascade_dir_name>
   -vec <vec_file_name>
   -bg <background_file_name>
   [-numPos <number_of_positive_samples = 2000>]
   [-numNeg <number_of_negative_samples = 1000>]
   [-numStages <number_of_stages = 20>]
   [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = 1024>]
   [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = 1024>]
   [-baseFormatSave]
   [-numThreads <max_number_of_threads = 9>]
   [-acceptanceRatioBreakValue <value> = -1>]
 --cascadeParams--
   [-stageType <BOOST(default)>]
   [-featureType <{HAAR(default), LBP, HOG}>]
   [-w <sampleWidth = 24>]
   [-h <sampleHeight = 24>]
 --boostParams--
   [-bt <{DAB, RAB, LB, GAB(default)}>]
   [-minHitRate <min_hit_rate> = 0.995>]
   [-maxFalseAlarmRate <max_false_alarm_rate = 0.5>]
   [-weightTrimRate <weight_trim_rate = 0.95>]
   [-maxDepth <max_depth_of_weak_tree = 1>]
   [-maxWeakCount <max_weak_tree_count = 100>]
 --haarFeatureParams--
   [-mode <BASIC(default) | CORE | ALL
 --lbpFeatureParams--
 --HOGFeatureParams--

进入方法和opencv_createsamples.exe一样,在opencv_createsamples.exe同级目录输入cmd进入cmd.exe,输入对应参数,我输入的参数如下:

opencv_traincascade -data D:\A_Data\Face_Database\mini_data\data -vec D:\A_Data\Face_Database\mini_data\vec\vec_file.vec -bg 0_image.txt -numPos 400 -numNeg 1000 -numStages 20 -featureType LBP -w 24 -h 24 -minHitRate  0.996 -maxFalseAlarmRate 0.5

这时回在你输出目录输出

opencv训练是什么意思 opencv训练器_Data_10

只有第一个cascade.xml是有效文件,别的是中间文件,可以删除了。