热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencv训练正样本_opencv之级联分类器使用

OpenCV自带的训练工具:opencv_createsamples.exe创建正样本的工具。opencv_traincascade.exe训练级联分类器的工具&#x
OpenCV自带的训练工具:opencv_createsamples.exe 创建正样本的工具。opencv_traincascade.exe  训练级联分类器的工具,训练出来的级联数据文件也是一个xml的文件。负样本的数量不要小于正样本的数量(5倍正样本数),如果训练的是人脸,那么负样本的图片不要带人脸就行。

基本流程:

1. 收集样本数据 – 包括正负样本

    以人脸检测为例 –公开的数据库有    (可以去下载,但是不精确)
    正向样本数目  (可以在视频中采集人脸)
    负样本数目   (也可以在不出现人脸的视频中采集,负样本最好包罗万象)
    正向样本的大小 – 统一尺寸  (图片宽高可以不一样,但是宽高比必须是1:1)
    正向样本图片中的背景问题    (背景没处理好,会影响训练的效果)

2. 数据规范化 – 大小、格式

b699c7011ba4ddcfb27078201b1b81ec.png

3. 生成vec文件与负样本列表文本文件

.\project\workspace_vs\OpenCV310Sources_contrib\install\x64\vc14\bin>opencv_createsamplesd.exe Usage: opencv_createsamplesd.exe [-info ] // 收集的文件的路径 [-img ] [-vec ] // 在vec_file_name目录下生成vec文件 [-bg ] // 上面提到的背景问题,可以通过这个解决 [-num 1000>] // 样本数 [-bgcolor 0>] // 背景颜色 [-inv] [-randinv] [-bgthresh 80>] [-maxidev 40>] // 最大的灰度方差,默认 [-maxxangle 1.100000>] // 如果样本图像有旋转,可以使用这三个参数来旋转,有默认值 [-maxyangle 1.100000>] [-maxzangle 0.500000>] [-show [4.000000>]] [-w 24>] // 输出的样本图像的宽高 [-h 24>].\project\workspace_vs\OpenCV310Sources_contrib\install\x64\vc14\bin>opencv_createsamplesd.exe -info E:\opencv\trainSample\positive\info.dat  -vec E:\opencv\trainSample\positiveFaces.vec -num 185 -bgcolor 0 -bgthresh 0 -w 24 -h 24 Info file name: E:\opencv\trainSample\positive\info.dat Img file name: (NULL) Vec file name: E:\opencv\trainSample\positiveFaces.vec BG file name: (NULL) Num: 185 BG color: 0 BG threshold: 0 Invert: FALSE Max intensity deviation: 40 Max x angle: 1.1 Max y angle: 1.1 Max z angle: 0.5 Show samples: FALSE Width: 24 Height: 24 Create training samples from images collection... Done. Created 185 samples .\project\workspace_vs\OpenCV310Sources_contrib\install\x64\vc14\bin>opencv_traincascaded.exe Usage: opencv_traincascaded.exe -data // 在cascade_dir_name目录下生成级联数据文件 -vec // 传入上面创建好的vec文件 -bg // 负样本文件(bg.txt与img文件夹),需要放到与 opencv_traincascaded.exe 命令同目录,绝对路径不可以? [-numPos 2000>] // 每个训练(stage)时的正样本数,不要大于等于总正样本数 [-numNeg 1000>] // 负样本数,可以大于总负样本数,大于的时候opencv会自动从负样本图像中切一部分区域出来,所以负样本图像尺寸最好找大一点的 [-numStages 20>] // stage数 [-precalcValBufSize 1024>] [-precalcIdxBufSize 1024>] [-baseFormatSave] [-numThreads 5>] [-acceptanceRatioBreakValue = -1>] --cascadeParams-- [-stageType default)>] // 对应级联数据文件中的stageType标签,只有 BOOST ? [-featureType default), LBP, HOG}>] // 特征类型 HAAR( [-w 24>] // 与上面的 opencv_createsamplesd.exe 命令的 -w -h 要一致 [-h 24>] --boostParams-- [-bt default)}>] // Boost算法 [-minHitRate = 0.995>] // 最小命中率,比如有1000个正样本,如果此值为0.995,那么会有5个正样本不会被训练 [-maxFalseAlarmRate 0.5>] // 虚警率,度量检测器对负样本的通过能力,显然越接近 [-weightTrimRate 0.95>] [-maxDepth 1>] [-maxWeakCount 100>] // 弱分类器数,如果用 --haarFeatureParams-- [-mode default) | CORE | --lbpFeatureParams-- --HOGFeatureParams--.\project\workspace_vs\OpenCV310Sources_contrib\install\x64\vc14\bin>opencv_traincascaded.exe -data E:\opencv\trainSample  -vec E:\opencv\trainSample\positiveFaces.vec -bg bg.txt -numPos 170 -numNeg 500 -numStages 12 -featureType LBP -w 24 -h 24 -minHitRate 0.996 -maxFalseAlarmRate 0.5 如果训练stage数超过了numStages 还没有结束的话,表示训练失败,训练也就结束了。 numStages minHitRate maxFalseAlarmRate 这三个参数可以影响训练的进程。 会生成 cascade.xml(除了这个其他都是中间产物,可以删除) params.xml stage0到8.xml 文件 .\project\workspace_vs\OpenCV310Sources_contrib\install\x64\vc14\bin>opencv_traincascaded.exe -data E:\opencv\trainSample\haar  -vec E:\opencv\trainSample\positiveFaces.vec -bg bg.txt -numPos 170 -numNeg 500 -numStages 12 -featureType HAAR -w 24 -h 24 -minHitRate 0.996 -maxFalseAlarmRate 0.5 -mode ALL 也会生成 cascade.xml params.xml stage0到8.xml 文件 // HAAR的训练比LBP要慢很多很多 出现 Required leaf false alarm rate achieved. Branch training terminated. 表示训练成功

4. 使用OpenCV自动的级联分类器训练工具,训练样本数据

5. 得到最终的级联分类器数据(XML格式)

代码

    #include "../common/common.hpp" static String facefile = "trainSample/haar/cascade.xml"; // LBP 与 HAAR 训练数据 static CascadeClassifier face_detector; void main(int argc, char** argv) { face_detector.load(getCVImagesPath(facefile)); Mat src = imread(getCVImagesPath("images/facedetection.png"), IMREAD_COLOR); imshow("src4-11", src); Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, gray); vector faces; face_detector.detectMultiScale(gray, faces, 1.1, 6, 0, Size(80, 80)); for (size_t t = 0; t (t)], Scalar(0, 0, 255), 2, 8, 0); } imshow("detect faces", src); waitKey(0); }

效果图

43914c5cd03411a4e461d6fc28558ff1.png

bf738ed87070d5ae02a760267caebd89.gif End bf738ed87070d5ae02a760267caebd89.gif

声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。




推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
sunshinena
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有