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是有效文件,别的是中间文件,可以删除了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 使用OpenCV-Python可以训练分类器分类器是一种机器学习模型,可以将输入数据分为不同的类别。在OpenCV-Python中,可以使用Haar特征分类器LBP特征分类器训练分类器训练分类器需要准备好训练数据集和测试数据集,然后使用机器学习算法进行训练训练完成后,可以使用分类器对新的数据进行分类。 ### 回答2: OpenCV-Python 是一个强大的计算机视觉库,它提供了许多用于图像处理和分析的功能。其中一个重要的功能就是训练分类器训练分类器是一个机器学习的过程,通过给定的训练数据集,模型可以学习到不同的特征,并根据这些特征对新的未知数据进行分类。在 OpenCV-Python 中,我们可以使用支持向量机(SVM)来进行分类器训练。 在训练分类器之前,我们首先需要准备好训练数据集。数据集应包含我们希望训练的对象的图像,并且每个图像都应标记为所属的类别。 使用 OpenCV-Python 进行分类器训练的步骤如下: 1. 加载训练数据集:使用 OpenCV 的函数加载训练图像和对应的类别标签。 2. 特征提取:将加载的图像转换为特征向量,以便机器学习模型可以学习到图像的特征。 3. 数据预处理:对特征向量进行预处理,例如标准化、降维等。 4. 训练分类器:使用 SVM 算法对预处理后的特征向量进行训练,得到分类器模型。 5. 保存分类器模型:将训练得到的分类器模型保存到文件中,以便之后可以加载和使用。 通过训练分类器,我们可以将新的图像数据进行分类,从而实现图像识别和目标检测等任务。在实际应用中,我们可以使用 OpenCV-Python 提供的分类器来识别人脸、车辆、物体等。 总的来说,使用 OpenCV-Python 训练分类器是一个相对复杂的过程,需要准备好训练数据集并按照一定的步骤进行训练。但通过合理的训练和调整参数,我们可以得到一个高效准确的分类器模型,从而应用于各种计算机视觉任务中。 ### 回答3: OpenCV是一个功能强大的计算机视觉库,提供各种图像处理和分析工具。通过使用OpenCV中的机器学习模块,我们可以训练自己的分类器训练分类器的第一步是准备数据集。我们需要收集足够数量的图像,每个图像都标有相应的标签。例如,如果我们要训练一个垃圾分类器,我们需要收集带有"可回收"和"不可回收"标签的图像。 接下来,我们需要将图像转化为适当的特征向量。OpenCV提供了一些用于提取特征的函数,例如计算色彩直方图或提取图像纹理特征。这些特征将用于训练分类器。 然后,我们使用收集到的图像和标签来训练分类器OpenCV提供了一些常见的机器学习算法,例如支持向量机(SVM)或k最近邻算法(KNN)。我们可以根据需要选择合适的算法,并用训练数据进行训练训练完成后,我们可以使用分类器来进行预测。对于新的未标记图像,我们将提取相同的特征并使用分类器来预测其标签。 需要注意的是,训练分类器是一个复杂的过程,需要考虑到数据集的大小和质量,以及特征选择和算法调优等方面。在实践中,我们通常需要进行多次实验和调整来获得最佳的分类器性能。 总之,使用OpenCV的机器学习模块,我们可以训练自己的分类器并用于解决各种计算机视觉问题。这是一个令人兴奋且具有挑战性的领域,可以在图像分析、目标检测和图像识别等应用中发挥重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值