精华内容
下载资源
问答
  • OpenCV级联分类器Cascade Classifier
    2021-04-21 14:57:37

    级联分类器Cascade Classifier

    目标

    在本教程中,
    我们将学习Haar级联对象检测的工作原理。
    我们将使用基于Haar Feature的Cascade分类器了解人脸检测和眼睛检测的基础知识
    我们将使用cv :: CascadeClassifier类来检测视频流中的对象。特别是,我们将使用以下功能:
    cv :: CascadeClassifier :: load来加载.xml分类器文件。它可以是Haar或LBP分类器
    cv :: CascadeClassifier :: detectMultiScale执行检测。

    理论

    使用基于Haar特征的级联分类器进行对象检测是Paul Viola和Michael Jones在其论文“使用简单特征的增强级联进行快速对象检测”中于2001年提出的一种有效的对象检测方法。这是一种基于机器学习的方法,其中从许多正负图像中训练级联函数。然后用于检测其他图像中的对象。
    在这里,我们将进行人脸检测。最初,该算法需要大量正图像(面部图像)和负图像(无面部图像)来训练分类器。然后&#

    更多相关内容
  • 级联分类器原理AdaBoost Viola和Jones,2001在CVPR提出; 一种实时对象(人脸)检测框架; 训练速度非常慢,检测速度非常快; 5000个正向人脸样本与300万个非人脸负样本数据。 级联分类器:多个强分类器组合 弱分类器:weak...
  • 基于OpenCV新版本3.1.0详细讲述了HAAR与LBP级联分类器的基本原理与使用技巧,通过视频中人脸实时检测与眼睛跟踪例子演示了级联分类器在项目中的运用。通过OpenCV自带的训练工具实现样本数据训练生成自己的级联分类器...
  • 视频读取 #include #include using namespace std; using namespace cv; String Haar_fileName = haarcascade_frontalface_alt.xml;//Haar String LBP_fileName = lbpcascade_frontalface.xml;...
  • OpenCV级联分类器训练与使用教程与代码11111111111111111111111
  • HAAR与LBP的区别(Haar的xml文件大)(LBP的xml文件小) HAAR特征是浮点数计算 LBP特征是整数计算 LBP训练需要的样本数量要比HAAR大 同样的样本空间,HAAR训练出来的数据检测结果要比LBP准确 扩大LBP的样本数据,训练...
  • OpenCV中的HAAR与LBP数据 ...//opencv自带训练好的人脸识别级联器 String Eye_fileName = haarcascade_eye_tree_eyeglasses.xml;//opencv自带训练好的人眼识别级联器 CascadeClassifier face_cascade;//人脸
  • 级联分类器下载,训练模型 下载直接可用
  • OpenCV提供了两个程序可以训练自己的级联分类器opencv_haartraining。 opencv_traincascade。(新版本的opencv中只存在该分类器) opencv_traincascade是一个新程序,使用OpenCV 2.x API 以C++...

    介绍

    • OpenCV提供了两个程序可以训练自己的级联分类器:

    • opencv_haartraining。

    • opencv_traincascade。(新版本的opencv中只存在该分类器)

    • opencv_traincascade是一个新程序,使用OpenCV 2.x API 以C++编写。

    • 这二者主要的区别是opencv_traincascade支持 Haar和 LBP (Local Binary Patterns)两种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。

    注:Haar: Haar特征分类器就是一个XML文件,存放在OpenCV安装目录中的\data\ haarcascades目录下;LBP是本地二进制模型

    • LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量训练参数

    • 训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。

    • 与其他分类器模型的训练方法类似,同样需要训练数据与测试数据;其中训练数据包含正样本pos与负样本neg。

    • 训练程序opencv_haartraining.exe与opencv_traincascade.exe对输入的数据格式是有要求的,所以需要相关的辅助程序:

      • opencv_createsamples 用来准备训练用的正样本数据和测试数据。其能够生成能被opencv_haartraining 和 opencv_traincascade 程序支持的正样本数据。它的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像。

    实战演练

    opencv级联分类器训练与测试可分为以下四个步骤:

    • 1、准备训练数据
    • 2、训练级联分类器
    • 3、测试分类器性能
    • 4、使用训练好的分类器进行目标检测

    操作步骤

    1、准备正样本

    • 正样本由opencv_createsamples生成。正样本可以由包含待检测物体的一张图片生成,也可由一系列标记好的图像生成。
    • 1、首先提前准备好已经处理过得正样本图片(可根据实际情况进行图片去噪声等处理,提高精度)
    • 2、生成pos.dat文件,文件格式如下
    第一列第二列第三列第四列第五列第六列
    图片名图片中包含的
    物体实例数
    目标区域x值目标区域y值图片宽图片高
    xxx.png1001616

    注:图片名为相对路径,后面五列根据实际情况填写。可通过脚本代码读取文件生成该文件,(我已写好一份,需要可给我留言)

    pos.dat文件的生成方式: 在dos窗口进入pos文件夹,输入dir /b > pos.dat ; 这样只能生成文件名列表,后面的正样本个数与位置尺寸还需手动添加

    • 3、调用opencv_createsamples.exe程序根据pos.dat创建pos.vec文件.

        opencv_createsamples.exe -info pos.dat -vec pos.vec -num 2327 -w 19 -h 23
      

    opencv_createsamples.exe程序的命令行参数解析:

    参数名描述
    -info < collection_file_name >描述物体所在图像以及大小位置的描述文件。
    -vec < vec_file_name>输出文件,内含用于训练的正样本。
    -img < image_file_name>输入图像文件名(例如一个公司的标志)。
    -bg< background_file_name>背景图像的描述文件,文件中包含一系列的图像文件名,这些图像将被随机选作物体的背景。
    -num< number_of_samples>生成的正样本的数目。
    -bgcolor < background_color>背景颜色(目前为灰度图);背景颜色表示透明颜色。因为图像压缩可造成颜色偏差,颜色的容差可以由-bgthresh指定。所有处于bgcolor-bgthresh和bgcolor+bgthresh之间的像素都被设置为透明像素。
    -bgthresh < background_color_threshold>配合bgcolor使用
    -inv如果指定该标志,前景图像的颜色将翻转。
    -randinv如果指定该标志,颜色将随机地翻转。
    -maxidev < max_intensity_deviation>前景样本里像素的亮度梯度的最大值。
    -maxxangle < max_x_rotation_angle>X轴最大旋转角度,必须以弧度为单位。
    -maxyangle < max_y_rotation_angle>Y轴最大旋转角度,必须以弧度为单位。
    -maxzangle< max_z_rotation_angle>Z轴最大旋转角度,必须以弧度为单位。
    -show很有用的调试选项。如果指定该选项,每个样本都将被显示。如果按下Esc键,程序将继续创建样本但不再显示。
    -w < sample_width>输出样本的宽度(以像素为单位)。
    -h< sample_height>输出样本的高度(以像素为单位)。

    2、准备负样本

    • 负样本可以是任意图像,但是这些图像中不能包含待检测的物体
    • 用于抠取负样本的图像文件名被列在一个neg.dat文件中。
    • 生成方式与正样本相同,但仅仅包含文件名列表就可以了。
    • 每行是一个文件名(包括相对目录和文件名)这些图像可以是不同的尺寸,但是图像尺寸应该比训练窗口的尺寸大,因为这些图像将被用于抠取负样本,并将负样本缩小到训练窗口大小。

    文件格式

    第一列
    图片名
    xxx.png
    • 同样,通过脚本生成neg.dat文件

    3、训练级联分类器

    • OpenCV提供了两个可以训练的级联分类器的程序:
      • opencv_haartraining
      • opencv_traincascade
    • opencv_haartraining是一个将被弃用的程序;opencv_traincascade是一个新程序。

    调用opencv_traincascade.exe执行训练

    opencv_traincascade.exe -data "E:\learning\imagedata\pukepai\data" -vec "E:\learning\imagedata\pukepai\pos\pos.vec" -bg "E:\learning\imagedata\pukepai\neg\neg.dat" -numPos 1500 -numNeg 1500 -numStages 20 -mem 2048 -featureType LBP -w 19 -h 23

    opencv_createsamples.exe程序的命令行参数解析:

    参数名描述
    通用参数
    -data < cascade_dir_name>目录名,如不存在训练程序会创建它,用于存放训练好的分类器。
    -vec < vec_file_name>包含正样本的vec文件名(由opencv_createsamples程序生成)。
    -bg < background_file_name>背景描述文件,也就是包含负样本文件名的那个描述文件。
    -numPos < number_of_positive_samples>每级分类器训练时所用的正样本数目。
    -numNeg < number_of_negative_samples>每级分类器训练时所用的负样本数目,可以大于 -bg 指定的图片数目。
    -numStages < number_of_stages>训练的分类器的级数。
    -precalcValBufSize< precalculated_vals_buffer_size_in_Mb>缓存大小,用于存储预先计算的特征值(feature values),单位为MB。
    -precalcIdxBufSize< precalculated_idxs_buffer_size_in_Mb>缓存大小,用于存储预先计算的特征索引(feature indices),单位为MB。内存越大,训练时间越短。
    -baseFormatSave这个参数仅在使用Haar特征时有效。如果指定这个参数,那么级联分类器将以老的格式存储。
    级联参数
    -stageType < BOOST(default)>级别(stage)参数。目前只支持将BOOST分类器作为级别的类型。
    -featureType<{HAAR(default), LBP}>特征的类型: HAAR - 类Haar特征; LBP - 局部纹理模式特征。
    -w < sampleWidth>训练样本的宽度(单位为像素)。必须跟训练样本创建(使用 opencv_createsamples 程序创建)时的尺寸保持一致。
    -h < sampleHeight>训练样本的高度(单位为像素)。必须跟训练样本创建(使用 opencv_createsamples 程序创建)时的尺寸保持一致。
    Boosted分类器参数:
    -bt < {DAB, RAB, LB,GAB(default)}>
    DAB - DiscreteAdaBoost,
    RAB - Real AdaBoost,
    LB - LogitBoost,
    GAB -Gentle AdaBoost
    Boosted分类器的类型:
    -minHitRate< min_hit_rate>分类器的每一级希望得到的最小检测率。总的检测率大约为 min_hit_rate^number_of_stages。
    -maxFalseAlarmRate < max_false_alarm_rate>分类器的每一级希望得到的最大误检率。总的误检率大约为 max_false_alarm_rate^number_of_stages.
    -weightTrimRate < weight_trim_rate>Specifies whether trimmingshould be used and its weight.一个还不错的数值是0.95。
    -maxDepth < max_depth_of_weak_tree>弱分类器树最大的深度。一个还不错的数值是1,是二叉树(stumps)。
    -maxWeakCount< max_weak_tree_count>每一级中的弱分类器的最大数目。The boostedclassifier (stage) will have so many weak trees (<=maxWeakCount), as neededto achieve the given -maxFalseAlarmRate
    类Haar特征参数:
    -mode < BASIC (default)COREALL>选择训练过程中使用的Haar特征的类型。 BASIC 只使用右上特征, ALL使用所有右上特征和45度旋转特征。
    LBP特征参数:
    LBP特征无参数。

    4、测试分类器性能

    • opencv_performance 可以用来评估分类器的质量,但只能评估 opencv_haartraining 输出的分类器。它读入一组标注好的图像,运行分类器并报告性能,如检测到物体的数目,漏检的数目,误检的数目,以及其他信息。同样准备测试数据集test,生成图像列表文件,格式与训练者正样本图像列表相同,需要标注目标文件的个数与位置。

    opencv_performance 的命令行参数解析:

    参数名描述
    -data < classifier_directory_name>训练好的分类器
    -info < collection_file_name>描述物体所在图像以及大小位置的描述文件
    -maxSizeDiff < max_size_difference =1.500000>
    -maxPosDiff < max_position_difference =0.300000>
    -sf < scale_factor = 1.200000>
    -ni选项抑制创建的图像文件的检测
    -nos < number_of_stages = -1>
    -rs < roc_size = 40>]
    -w < sample_width = 24>
    -h < sample_height = 24>

    附opencv_haartraining 的命令行参数如下:

    参数名描述
    -data< dir_name>存放训练好的分类器的路径名。
    -vec< vec_file_name>正样本文件名(由trainingssamples程序或者由其他的方法创建的)
    -bg< background_file_name>背景描述文件。
    -npos< number_of_positive_samples>,
    -nneg< number_of_negative_samples>用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg= 3000
    -nstages< number_of_stages>训练的阶段数。
    -nsplits< number_of_splits>决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier被使用。如果是2或者更多,则带有number_of_splits个内部节点的CART分类器被使用。
    -mem< memory_in_MB>预先计算的以MB为单位的可用内存。内存越大则训练的速度越快。
    -sym(default)
    -nonsym指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
    -minhitrate < min_hit_rate>每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate的number_of_stages次方。
    -maxfalsealarm< max_false_alarm_rate>没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate的number_of_stages次方。
    -weighttrimming< weight_trimming>指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
    -eqw
    -mode< basic(default)coreall>选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。
    -w < sample_width>
    -h< sample_height>训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同。

    原作者链接:https://www.jianshu.com/p/9c73527f329b
     

    展开全文
  • 1、什么是级联分类器 此处不做详解,可以参考这个博客:https://www.cnblogs.com/wumh7/p/9403873.html 2、分类器样本创建 样本创建是一个比较耗时耗资源的过程,但是前期做好一个优质的样本,对于后期的样本...

    目录

    1、什么是级联分类器

    2、分类器样本创建

    2.1、正样本

    2.1.1、什么是正样本

    2.1.2、正样本收集

    2.1.3、正样本处理

    2.1.4、生成pos.txt文件

    2.1.5、训练.vec文件

     2.2、负样本

    3、分类器生成

    4、分类器测试


    1、什么是级联分类器

            此处不做详解,可以参考这个博客:https://www.cnblogs.com/wumh7/p/9403873.html

    2、分类器样本创建

            样本创建是一个比较耗时耗资源的过程,但是前期做好一个优质的样本,对于后期的样本训练以及想获取到一个精度较高的分类器都是密切相关的。

            样本,又分为正样本和负样本。通常样本基数越大,生成的分类器精度越高。如果检测的目标是一个固定物体,没有变化(如特定商标,logo等),这样的物体只要提供一份样本就可以进行训练。 但绝大数时候我们想进行训练的目标是非绝对固定的物体,如对人的检测,包括人脸识别、汽车等等,因此,创建一个合适的样本就十分重要。

    2.1、正样本

    2.1.1、什么是正样本

            所谓正样本就是只包含检测目标的图片(最好背景一致),对于这我个人认为最好是检测目标的最小外接矩,这样可以减少训练的计算量,减少目标检测的干扰,提高检测质量。

    2.1.2、正样本收集

            获取正样本,可以自己动手,也可以通过网络上的图像数据库,像人脸数据库就已经很全了,不必再自己制作。

    2.1.3、正样本处理

             将正样本图片进行截取(自己收集的图片,主要是去掉训练时的不必要干扰)-----最小外接矩;

            将处理后的图片进行归一化,将所有图像调整成一致大小,我用的“美图看看”这款软件,批量处理的,注意无论原图多大最好都处理成25*25以下的图像,这样计算机训练速度快,而且不容易出现内存不够用;

            将归一化后的图像进行灰度处理,可以调用OpenCV中的接口,cv::cvtColor(Mat src, Mat outGray, COLOR_BGR2GRAY),自己c++写个批量处理小程序即可。如下处理后的灰度图片。

    2.1.4、生成pos.txt文件

              cmd运行控制台,切换到存放样本图片的文件目录下:输入如下命令

             运行结果:

             在图像文件中多了个pos.txt文件,内容如下:

                

                  在对文件进行处理,使其含有图片信息:通过程序读取存入

                  

     格式为:图片路径     检测目标在图片中的个数     起始监测点坐标(x,y)   图片大小(w,h)

    2.1.5、训练.vec文件

            cmd下运行一下命令(假设当前路径就是pos.txt所在的路径):

    opencv_createsamples.exe -vec pos.vec -info pos.txt -num 100 -w 30 -h 30 

            得到pos.vec文件。

     2.2、负样本

            负样本,即不包含检测目标的任何图片。主要操作如下:

            1、负样本不要求样本尺寸,但要大于等于正样本的大小;且负样本不能重复,要增大负样本的差异性;

            2、负样本灰度化,同正样本操作相同。

         3、运行命令:

            

    最后将pos.vec和neg.txt文件拷贝到同一文件夹下。

    3、分类器生成

    执行命令:

    opencv_haartraining.exe -data xml -vec pos.vec -bg neg.txt -nstages 10 -nsplits 1 -npos 35 -nneg 100 -mem 1280 -mode all -w 30 -h 30

    命令讲解:

            opencv_haartraining.exe   是一个opencv自带的可执行函数(但此函数已经过时,最新的采用opencv_traincascade),用于实现对分类器的训练。直接在doc下用命令执行即可,Windows的存放路径一般为:    ..\opencv\build\x86\vc11\bin。这里我为了找路径方便与样本文件放在同一目录下这样可以找到很容易调取 mlx文件夹,和pos.vec、neg.txt,也可以直接调用。

            -data xml        存储训练时的生成的文件。最终生成一个.xml文件,如下图:

                    xml文件夹内容:

                  -vec pos.vec    调用.vec文件,与neg.txt放在同一目录下。

                  -bg neg.txt     负样本生成文件,可以理解成是负样本的索引。

                  -nstages 10     训练级数

                  -nsplits 1         2表示弱分类器二叉决策树的分裂数   1表示使用简单stump 分类(只有一个树桩)

                  -npos 35          正样本数量

                  -nneg 100        负样本数量

                  -mem 1280      训练时内存预留的空间1280MB

                  -mode all          级联器的类型,all代表所有类型

                  -w 30               图片的宽30像素,必须与之前一致

                  -h 30               图片的高30像素,必须与之前一致

    执行结果如下:

    训练结果:

    4、分类器测试

            待测试。。

    注:已以上图片来自于网络,如有侵权联系删除。

    展开全文
  • opencv级联分类器训练一般需要理解参数含义和基本原理,然后还要写基本转换图片和标注化数据集,今天我为大家一个小工具,只需要导入图片就可以快读训练自己的模型,而且不需要写任何代码,傻瓜式操作,不用配置什么...

    opencv级联分类器训练一般需要理解参数含义和基本原理,然后还要写基本转换图片和标注化数据集,今天我为大家一个小工具,只需要导入图片就可以快读训练自己的模型,而且不需要写任何代码,傻瓜式操作,不用配置什么的,非常方便。首先我们打开软件

    第一步:选择自己正样本和负样本图片路径,我们完全不需要保证片尺寸是否一致,因为软件会自动归一化不需要手动写代码归一化尺寸。负样本不需要尺寸一致,你做的仅仅是导入路径!

    第二步:点击配置数据集按钮,看状态说明提示,等待数据集自动配置完毕

    第三步:修改界面一些想要改的参数,点击开始训练即可训练开始。如果你想在cmd训练,选择外部终端训练后看图

    点击获取命令即可获得指令,然后win+r打开cmd直接粘贴就训练起来了。更多详细操作请观看视频教程:bilibili.com/video/BV1L44y1x7hG/

     

    展开全文
  • opencv 级联分类器

    千次阅读 2018-05-24 15:32:32
    转自:https://blog.csdn.net/wuxiaoyao12/article/details/39227189好久没有来写blog了,学生生涯终结,就不好好总结了,今天...见绿色)一、基础知识准备首先,opencv目前仅支持三种特征的训练检测, HAAR、LBP、H...
  • Haar猫脸检测 haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml ...//猫脸级联分类器 String Cat_fileName = haarcascade_frontalcatface.xml;//猫脸级联分类器 CascadeClassifier
  • 本章内容: * 1.人脸识别 * 2.人眼识别 输出结果 ...opencv2/opencv.hpp> #include <opencv2/xfeatures2d.hpp> int main(int argc, char *argv[]) { /*本章内容: * 1.人脸识别 ...
  • opencv级联分类器(linux系统)

    千次阅读 2019-01-20 17:37:34
    级联分类器这个坑早该挖的了,由于本人之前使用的是win10系统家庭版的某种关系,并没有成功训练出xml,趁着换了Linux和比赛需要就再次挖挖坑,这里用到的是Opencv自带的两个分类器来训练样本,这里仅讲述linux环境下...
  • 训练OpenCV级联分类器 目录结构 . ├─ pos (positive samples database containing .jpg images) │ └── ... ├─ positive (selected positive samples) │ └── ... ├─ random (random images to ...
  • 使用级联分类器训练人脸模型 项目场景: 作为一个大四狗,在毕业之前想做点有意思的东西,加上人工智能这两年很火,也就从网上找资源,进行了一个学习的过程,使用的平台是QT5.12+OpenCV3.40。目的就是为了训练一...
  • http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html#id8 ...opencv中有两个程序可以训练级联分类器opencv_haartraining 和 opencv_traincascade 两者异同: opencv_train...
  • OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言...
  • Haar人眼级联特征数据 haarcascade_eye.xml haarcascade_lefteye_2splits.xml haarcascade_righteye_2splits.xml any custom cascade data?? 眼睛检测与跟踪 眼睛检测 简单跟踪(一直显示) (模板匹配) #include #...
  • OpenCV 级联分类器训练——训练步骤详解(一)

    万次阅读 多人点赞 2018-03-09 15:56:21
    根据本人实践过程和理解写了下文。 一、正样本准备 正样本的选取原则 正样本的尺寸不是必须一致的...会在data文件夹中生产一个xml文件,即分类器。 双击运行即可开始训练。 注意:numPos *2 *4 需要的文件都在这里列出:
  • 利用opencv级联分类器进行人脸检测 人脸以及眼睛 基于c++、opencv的人脸检测 1、创建分类器对象 CascadeClassifier face_cascade, eyes_cascade; 2、加载数据的路径 加载本地opencv文件夹自带的xml文件 string face...
  • opencv级联分类器训练和检测过程

    千次阅读 2017-05-06 20:35:07
    级联分类器整个过程主要包括:样本准备,数据生成,训练,交叉验证,检测。涉及的源代码主要包括: 1) 样本标注的工具:applications->opencv_annotation opencv_annotation.exe 注意:在标注的过程中,需要注意...
  • 最近研究OPENCV分类器,大概试了一下自带的人脸识别例程,然后想到自己去训练其他物品识别的分类器,需要用到里面的opencv_createsamples创建样本和opencv_traincascade训练级联分类器。网上搜了不少的文章,又看...
  • OpenCV利用级联的haar分类器进行人脸识别
  • OpenCV57:级联分类器的训练

    千次阅读 2022-01-24 16:01:44
    级联分类器的训练过程 学习函数: opencv_createsamples opencv_annotation opencv_traincascade opencv_visualisation 原理 使用弱分类器的增强级联包括两个主要阶段:训练阶段和检测阶段。对象检测教程中介绍...
  • 关于原理,其他博客有的已经介绍的很详细了,这里主要把我进行训练时的步骤列出来,有的是根据别人的博客参考的,但进行过程中还是会出错,现在把我真正使用的步骤列出来,以供参考 ...OpenCV级联分类器训练(二)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,730
精华内容 1,892
关键字:

opencv级联分类器