opencv自带工具训练lbp分类器

 

 

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

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

一、训练数据准备

1、训练图片制作

1.1 正制作样本注意点:

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

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

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

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

图 1opencv自带工具训练lbp分类器

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

图片文件夹

opencv自带工具训练lbp分类器

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

opencv自带工具训练lbp分类器

记录如下:

opencv自带工具训练lbp分类器

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

1.2 负样本制作注意点

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

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

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

图 2opencv自带工具训练lbp分类器

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

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

opencv自带工具训练lbp分类器

opencv自带工具训练lbp分类器

注:顺序介绍参数意思 ,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自带工具训练lbp分类器

输出文件opencv自带工具训练lbp分类器,产生就表示运行成功。

三、利用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自带工具训练lbp分类器

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