本教程基于以下环境 macOS 10.12.6,OpenCV 3.3.0,python 3.6。由于网上基于masOS系统的教程太少,想出一篇相关教程造福大家~本文旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别。

1. 安装OpenCV和OpenCV源代码

OpenCV至少要保证下载好2.4.5以上的版本,同时源码要对应好自己所安装的版本。

brew tap homebrew/science
brew install --with-tbb opencv

2. 在github上clone一个工程,里面有相关训练脚本和训练样本文件夹等等,后面会用到,在terminal输入

git clone https://github.com/mrnugget/opencv-haar-classifier-training

3. 把正例训练集放入./positive_images,并且将正例的照片名称存入positives.txt里

本训练的正例只有43张,非常少,若想训练完全需要样本量很大,有见过600-2000张不等的。再输入以下命令把名称存入positives.txt,效果图下

find ./positive_images -iname "*.jpg" > positives.txt

4. 同理,把反例训练集放入./negative_images,并且将正例的照片名称存入negative.txt里

find ./negative_images -iname "*.jpg" > negatives.txt

5. 通过bin/createsamples.pl脚本和opencv_createsamples工具创建正例样本集,再将其放入./samples 文件夹里

perl bin/createsamples.pl positives.txt negatives.txt samples 43 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 0.5 -maxyangle 0.5 maxzangle 0.5 -maxidev 40 -w 40 -h 40"

6. 把在/samples 文件夹里的样本集合成到samples.vec文件中

python ./tools/mergevec.py -v samples/ -o samples.vec

7. 使用opencv_traincascade工具进行训练,并把结果保存到./classifier

opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt -numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 43 -numNeg 43 -w 40 -h 40 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

然后开始阶段性训练,每一层训练都会打印到控制台,其中,如果每一层只能训练出1-2个特征点,那说明训练集有问题,不够大或特征不明显。需要等待的时候比较久,取决于样本大小和样本集大小。

8. 在classifier文件夹里找到cascade.xml文件,就是训练好的分类器了~

9. 本文用python做了实时检测训练的物体,也可以使用Node.js + Opencv 去识别,方法很多。博主可惜由于训练集不足的原因效果不是很好,不过代码附下,如果有训练成功或有疑问朋友,欢迎交流~

import cv2

face_cascade = cv2.CascadeClassifier('cascade.xml')
cap = cv2.VideoCapture(0) while 1:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray) for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w] cv2.imshow('img',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break cap.release()
cv2.destroyAllWindows()

Useful Material:

1. http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

2. http://note.sonots.com/SciSoftware/haartraining.html#w0a08ab4

【macOS】 在OpenCV下训练Haar特征分类器的更多相关文章

  1. OpenCV中基于Haar特征和级联分类器的人脸检测

    使用机器学习的方法进行人脸检测的第一步需要训练人脸分类器,这是一个耗时耗力的过程,需要收集大量的正负样本,并且样本质量的好坏对结果影响巨大,如果样本没有处理好,再优秀的机器学习分类算法都是零. 今年3 ...

  2. OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 标签: 脸部识别opencv 2017-07-03 21:38 26人阅读

    上一篇文章中介绍了如何使用OpenCV自带的haar分类器进行人脸识别(点我打开). 这次我试着自己去训练一个haar分类器,前后花了两天,最后总算是训练完了.不过效果并不是特别理想,由于我是在自己的 ...

  3. Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

    在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资 ...

  4. 使用OpenCV训练Haar like+Adaboost分类器的常见问题

    <FAQ:OpenCV Haartraining>——使用OpenCV训练Haar like+Adaboost分类器的常见问题 最近使用OpenCV训练Haar like+Adaboost ...

  5. 关于haar特征的理解及使用(java实现)

    Haar特征原理综述Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征.它分为三类:边缘特征.线性特征.中心特征和对角线特征.如下所示: Haar-like矩形特征拓展  Lienha ...

  6. 【原】训练自己haar-like特征分类器并识别物体(2)

    在上一篇文章中,我介绍了<训练自己的haar-like特征分类器并识别物体>的前两个步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本描述文件 3.训练样本 4.目标识别 == ...

  7. 如何利用OpenCV自带的级联分类器训练程序训练分类器

    介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...

  8. opencv 训练自己的分类器汇总

    原地址:http://www.cnblogs.com/zengqs/archive/2009/02/12/1389208.html OpenCV训练分类器 OpenCV训练分类器 一.简介 目标检测方 ...

  9. 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器

    前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...

随机推荐

  1. Caravel–一款开源OLAP+数据可视化分析前端工具,支持Druid和Kylin

    参考此文:http://lxw1234.com/archives/2016/06/681.htm

  2. 2018-2019-2 网络对抗技术 20165335 Exp4 恶意代码分析

    实验内容: 一.使用schtacks进行系统运行监控,使用sysmon工具监控系统的具体进程,使用各种工具进行监控,并针对软件的启动回连,安装到目标机,以及其他的控制行为的分析,同时,对主机的注册表, ...

  3. Deep Convolution Auto-encoder

    一.概念介绍 自编码器是一种执行数据压缩的网络架构,其中的压缩和解压缩功能是从数据本身学习得到的,而非人为手工设计的.自编码器的两个核心部分是编码器和解码器,它将输入数据压缩到一个潜在表示空间里面,然 ...

  4. ssh很慢的问题转子

    根据网上的解决办法解决了,记录一下: 问题:ssh  ***@192.*.*.*  ,然后就一直卡在这个地方,很久以后才会出现让输入密码的提示 解决办法:1.关闭防火墙--chkconfig ipta ...

  5. 原生js移除或添加样式

    样式效果如下,点击商品详情 添加样式active 代码 <!doctype html> <html lang="en"> <head> < ...

  6. vue 引入iconfont字体库

    1.登录官网 https://www.iconfont.cn/ 2.选择所需要的图标加入图库 新建项目 选择fontClass 并下载到本地   目录如下 3.项目 assets目录下 新建  ico ...

  7. 物理层PHY 和 网络层MAC

    PHY模块简介 物理层位于OSI最底层,物理层协议定义电气信号.线的状态.时钟要求.数据编码和数据传输用的连接器. 物理层的器件称为PHY. 上图里的灰色方框图里的就是PHY芯片内部模块图. MAC器 ...

  8. 【做题】ZJOI2017仙人掌——组合计数

    原文链接 https://www.cnblogs.com/cly-none/p/ZJOI2017cactus.html 给出一个\(n\)个点\(m\)条边的无向连通图,求有多少种加边方案,使得加完后 ...

  9. 那些按烂的Linux命令集合贴

    #查看80端口运行情况netstat -anp|grep 80 #关闭某个进程(如8848pid) kill -9 8848 #运行java的war包 java -jar myproj.war #持续 ...

  10. 优雅的使用Linux

    优雅的使用Linux 系统安装 启动盘制作 通过rufus烧制官网镜像,注意根据自己系统的引导模式选择相应模式,不确定的,可以在windows中通过Win + R 快捷键调出"运行" ...