【macOS】 在OpenCV下训练Haar特征分类器
本教程基于以下环境 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特征分类器的更多相关文章
- OpenCV中基于Haar特征和级联分类器的人脸检测
使用机器学习的方法进行人脸检测的第一步需要训练人脸分类器,这是一个耗时耗力的过程,需要收集大量的正负样本,并且样本质量的好坏对结果影响巨大,如果样本没有处理好,再优秀的机器学习分类算法都是零. 今年3 ...
- OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 标签: 脸部识别opencv 2017-07-03 21:38 26人阅读
上一篇文章中介绍了如何使用OpenCV自带的haar分类器进行人脸识别(点我打开). 这次我试着自己去训练一个haar分类器,前后花了两天,最后总算是训练完了.不过效果并不是特别理想,由于我是在自己的 ...
- Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练
在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资 ...
- 使用OpenCV训练Haar like+Adaboost分类器的常见问题
<FAQ:OpenCV Haartraining>——使用OpenCV训练Haar like+Adaboost分类器的常见问题 最近使用OpenCV训练Haar like+Adaboost ...
- 关于haar特征的理解及使用(java实现)
Haar特征原理综述Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征.它分为三类:边缘特征.线性特征.中心特征和对角线特征.如下所示: Haar-like矩形特征拓展 Lienha ...
- 【原】训练自己haar-like特征分类器并识别物体(2)
在上一篇文章中,我介绍了<训练自己的haar-like特征分类器并识别物体>的前两个步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本描述文件 3.训练样本 4.目标识别 == ...
- 如何利用OpenCV自带的级联分类器训练程序训练分类器
介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...
- opencv 训练自己的分类器汇总
原地址:http://www.cnblogs.com/zengqs/archive/2009/02/12/1389208.html OpenCV训练分类器 OpenCV训练分类器 一.简介 目标检测方 ...
- 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器
前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...
随机推荐
- 记自己利用hexo和github搭建个人博客的过程
--------------------------------------可能我书写的方式跟别人顺序不一样,但这是我的成功经验------------------------------------ ...
- pandas nan值处理
创建DataFrame样例数据 >>> import pandas as pd >>> import numpy as np >>> data = ...
- Java EE开发技术课程第六周(jsf、facelets)
1.jsf(java sever faces) 1.1 jsf的定义: jsf是一种用于构建java web应用程序的框架.它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器 ...
- Windows环境下IOS APP打包上传AppStore详细流程
我们知道在上架苹果应用过程中,申请发布证书需要用到钥匙串,上传ipa需要用到xcode或Application loader提交构建版本,这都需要Mac苹果机. 本文介绍如何在Windows环境下申请 ...
- GO语言的包
包介绍 包(package)是多个Go源码的集合,go语言有很多内置包,比如fmt,os,io等. 定义包 main包是一个可执行的包,只应用程序的入口包,编译完会生成一个可执行文件. 包名可以不和文 ...
- java字符串对象存储机制
String s1="abc";创建了几个String对象 ? String s2 = new String("abc");创建了几个String对象? s1= ...
- Python 运维之路
第一章:Python基础知识 1.Python 变量了解 .Python 二进制 .Python 字符编码 4.Python if条件判断 5.Python while循环 6.Python for循 ...
- Hadoop-Impala学习笔记之管理
配置参数管理 待补充... 资源分配管理(Admission Control) Impala有资源池的概念,允许某些查询在特定的资源池执行,不过在白天不跑批/晚上不跑adhoc的DSS系统中,该机制并 ...
- HL-D793G七位蓝色+PT6311驱动
和之前那块一起买的.又画了这个屏幕驱动,还画了灯丝电源驱动,和以前画的stm8核心板在JLC拼板. 亚光黑颜色,不单独收钱! 切好水洗吹干! 忘记给排针加丝印,手写代之. 焊接的时候,脑子发热,以为把 ...
- Bugku-CTF之flag.php(点了login咋没反应)
Day20 flag.php 地址:http://123.206.87.240:8002/flagphp/ 点了login咋没反应 提示:hint