本教程基于以下环境 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. Recycle----项目总结

    github项目地址:https://github.com/HuChengLing/recycle 软件规模: 我们这个Recycle app属于一个小型项目,整体规模不大.预期有垃圾回收和二手品交易 ...

  2. Python3调谷歌翻译

    公司最近有翻译的需求(本人适用的是在第三方服务器上使用,不在本地也不在谷歌控制台),发现Google的Translate API只能FQ调,但是国内也有翻译需求,经多方查找汇集众家之长,找到一个感觉最 ...

  3. Linux基础命令---uname显示计算机名称

    uname uname指令用来显示计算机硬件以及操作系统的相关信息,例如计算机名.内核版本.硬件架构. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.SUSE.o ...

  4. vue-cli —— 项目打包及一些注意事项

    打包方法: 1.把绝对路径改为相对路径:打开config/index.js 会看到一个build属性,这里就是我们打包的基本配置了.在这里可以修改打包的目录,打包的文件名.最重要的是一定要把绝对目录改 ...

  5. 如何在Qt中使用自定义数据类型

    这里我们使用下面这个struct来做说明(这里不管是struct还是class都一样): struct Player { int number; QString firstName; QString ...

  6. haproxy 配置文件分析

    LOG 功能: 编辑/etc/rsyslog.conf 配置文件: # Provides UDP syslog reception $ModLoad imudp #需要启用 $UDPServerRun ...

  7. Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

    Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了 ...

  8. Python3 tkinter基础 Radiobutton 设置相同的value值,产生连锁效果

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. LintCode 521.去除重复元素

    LintCode 521.去除重复元素 描述 给一个整数数组,去除重复的元素. 你应该做这些事 1.在原数组上操作 2.将去除重复之后的元素放在数组的开头 3.返回去除重复元素之后的元素个数 挑战 1 ...

  10. 多邻国学英语 tips

    来源: https://www.cnblogs.com/daysme整理了一分多邻国学英语中的相关语法文档. 地方 null 现在完成时 null 反身代词 浓缩的精华:反身代词就是 “XX 自己” ...