opencv自带工具训练lbp分类器
利用opencv自带工具训练LBP分类器,自己学习,特地做个记录,分享给大家,哪里写的不好,可以在下面留言!
注:本片博客以人脸检测为实验demo。
一、训练数据准备
1、训练图片制作
1.1 正制作样本注意点:
(1)人脸以外的背景尽量去除,并赋值为RGB=(255,255,255)的纯黑色。
(2)人脸图片大小可以不一样,但是图片长宽比例一样要一样,例(84*84),(104*104)。
(3)要想训练出来的分类器分类准确,人脸数量要过10000。
(4)训练数据人脸姿态要多种多样。
图 1
1.1.1 设置正样本对应的数据标签
图片文件夹
同级目录设置对应文本,以.dat为后缀。
记录如下:
注:顺序介绍参数意思 ,1(文件夹名) XX.jpg(为图片名) 1(表示只有一张人脸)0 0 104 104(人脸位置)。
1.2 负样本制作注意点
(1)尽量贴近实际使用时的负样本场景。
(2)图片大小和比例都没要求。
(3)数量可以比正样本少。因为可以切割。
图 2
1.2.1 设置负样本对应的数据标签
同级目录设置对应文本,以.txt为后缀。
注:顺序介绍参数意思 ,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_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
这时回在你输出目录输出
只有第一个cascade.xml是有效文件,别的是中间文件,可以删除了。