D:/face   构造face训练器为例

一:样本创建

训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本,反例样本指其它任意图片。

负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个。

创建 正 负 样本目录

mkdir D:\face\posdata

mkdir D:\face\negdata

把正负样本图片,分别放入2个文件夹下。

生成负样本描述文件

cd  D:\face\negdata

dir /b > negdata.dat   #删除negdata.data的最后一行,因为最后一样是描述文件本身。

生成正样本描述文件

cd  D:\face\posdata

dir /b > posdata.dat   #删除posdata.data的最后一行,因为最后一样是描述文件本身

然后为 posdata.dat 中的每一行后加上文件描述擦数(图片个数,目标开始,结束位置,高,宽),例如

1.jpg  1 1 1 23 23

2.jpg  1 1 1 23 23

使用createsamples命令生成正例训练.vec文件。

opencv_createsamples  -info  D:\face\posdata\posdata.data

                                  -vec   D:\face\data\pos.vec

                                   -num 10 -w 20 -h 20

运行后生成的pos.vec 文件作后面的训练用

二:训练分类器

使用 traincascade(opencv2 中只有haartrainning命令,注意版本2个3的参数格式稍有不同)。

命令如下:

opencv_traincascade   -data D:\face\data\cascade        #分类器的存放路径

                                -vec  D:\face\data\pos.vec          #正样本的vec文件

                                -bg  D:\face\negdata.dat             #付样本描述文件

                                -numPos 10                                #正样图片文件本个数   

                                -numNeg 10                               #付样本图片文件个数

                                -numStages 5                              #训练阶段数,根据样本数量而定,太大,会提示错误:Train dataset for temp stage can not be filled. .

                                -mode ALL       #训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。

                                 -w   20    -h 20    #样本宽和高

如果参数都设置对了,任然报错误:Train dataset for temp stage can not be filled. Branch training terminated.

可能是 -gb 参数不带文件名称, 那可以付样本的描述文件放到执行目录,负样本的描述内容增加图片位置的路径来解决。

最后没有报错,会在-data的路径下生成训练文件。

三:利用训练好的分类器,做检测

##TODO 还没有找到performance.exe程序
performance.exe

使用python-cv2 调用生成的分类器:

import cv2

cascade = cv2.CascadeClassifier('D:\face\data\cascade\cascade.xml')

faces = cascade .detectMultiScale(gray, 1.3, 5)

opencv 构造训练器的更多相关文章

  1. Pytorch之训练器设置

    Pytorch之训练器设置 引言 深度学习训练的时候有很多技巧, 但是实际用起来效果如何, 还是得亲自尝试. 这里记录了一些个人尝试不同技巧的代码. tensorboardX 说起tensorflow ...

  2. 秒懂C#通过Emit动态生成代码 C#使用Emit构造拦截器动态代理类

    秒懂C#通过Emit动态生成代码   首先需要声明一个程序集名称, 1 // specify a new assembly name 2 var assemblyName = new Assembly ...

  3. 13 opencv训练器

    https://blog.csdn.net/WZZ18191171661/article/details/91305466 https://blog.csdn.net/qq_25352981/arti ...

  4. 【macOS】 在OpenCV下训练Haar特征分类器

    本教程基于以下环境 macOS 10.12.6,OpenCV 3.3.0,python 3.6.由于网上基于masOS系统的教程太少,想出一篇相关教程造福大家-本文旨在学习如何在opencv中基于ha ...

  5. opencv python训练人脸识别

    总计分为三个步骤 一.捕获人脸照片 二.对捕获的照片进行训练 三.加载训练的数据,识别 使用python3.6.8,opencv,numpy,pil 第一步:通过笔记本前置摄像头捕获脸部图片 将捕获的 ...

  6. C#使用Emit构造拦截器动态代理类

    在AOP编程概念介绍中,常见的示例为拦截对象,并在对象的某方法执行前和执行后分别记录日志. 而最常用的拦截方式是使用动态代理类,用其封装一个日志拦截器,当方法被执行时进行日志记录. 日志拦截器类 1 ...

  7. Opencv 简单视频播放器

    // C++ header and namespace #include <iostream> #include <string> #include <cstdlib&g ...

  8. 【原/转】opencv的级联分类器训练与分类全程记录

    众所周知,opencv下有自带的供人脸识别以及行人检测的分类器,也就是说已经有现成的xml文件供你用.如果我们不做人脸识别或者行人检测,而是想做点其他的目标检测该怎么做呢?答案自然是自己训练一个特定的 ...

  9. 机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪器) 5.cv2.writer(将图片写入视频中) 6.cv2.dnn.blobFromImage(图片归一化) 10.multiprocessing.process(生成进程)

    1. cv2.dnn.readNetFromCaffe(prototxt, model)  用于进行SSD网络的caffe框架的加载 参数说明:prototxt表示caffe网络的结构文本,model ...

随机推荐

  1. oracle 语句优化

    1. 选用适合的ORACLE优化器         ORACLE的优化器共有3种: a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可 ...

  2. 在html使用a标签 直接下载图片 不通过后台实现直接下载

    由于a标签在HTML中链接图片会被识别并打开到网页上 如果想下载这个图片的话 就需要连接到后台读取文件并生成一个头信息下载.不过可以先给a标签加上一个download属性即可直接下载了. <a ...

  3. GUI(图形用户界面)

    一.GUI(图形用户界面) GUI Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面,这样更方便更直观 CLI Command line User ...

  4. Java 抽象类与接口总结

    一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法  含有抽 ...

  5. 初识jQuery,八字真言“选择元素,对其操作”

    jQuery在我印象中,就是很多类似$(),然后昨天开始接触了,觉得很和谐,获取元素比JavaScript简单很多,有意思. 一.开始学习jQuery,下载jQuery库的文件 http://jque ...

  6. 【硬件】DELLserver硬件监控及DELL系统管理工具OMSA介绍

    1.1.1. DELLserver硬件监控及DELL系统管理工具OMSA介绍 本文介绍採用使用Nagios和OMSA监控DELLserver的硬件健康状态,Nagios监控的方式是NRPE模式,须要配 ...

  7. android 双卡手机发短信/判断手机是否为双卡

    通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的. phoneType获取方法,iTelephony.getA ...

  8. mybatis06 增删改差 源码

    user.java package cn.itcast.mybatis.po; import java.util.Date; public class User { private int id; p ...

  9. LabVIEW系列——生产现场故障邮件通知

    第一步.建立邮件服务器,winmail做邮件服务器是个不错的选择.不过在使用前需要注册. 第二步.创建修改域名.这里创建的域名不是真正的域名,只能用于局域网内.假设:lhy.com.cn 第三步.创建 ...

  10. like的性能问题

    使用like'%匹配的文字%',无法优化,因为索引起不到作用. 不过like'匹配的文字%',索引起作用.