使用OpenCV训练Cascasde分类器

来源:互联网 发布:图片分析软件 编辑:程序博客网 时间:2024/06/05 10:49

最近想用OpenCV中的CascadeClassifier做一些物体跟踪的工作。就读了一下官网的教程,记录一下。

这个网页主要用来介绍如何训练及使用分类器。

OpenCV中有两个训练cascade classifier的应用,包括:opencv_haartraining和opencv_traincascade。

opencv_traincascade是新的实现,它既支持Haar和LBP特征。(有关这两个特征的介绍,推荐博客: http://blog.csdn.net/zouxy09/article/details/7929570/ 、http://blog.csdn.net/zouxy09/article/details/7929570/ 和 http://blog.csdn.net/zouxy09/article/details/7929531)

这名话:LBP features are integer in contrast to Haar features 不是很理解,是说LBP的数据都是整数吗?因为这个特性,所以无论训练和检测,LBP特征都要比Haar快很多。

训练过程一:准备数据

准备负样本,负样本指不包含目标物体的图片。

一个文件中,每行记录一条负样本的目录。

比如,存放样本的目录像:

 /img   img1.jpg   img2.jpg bg.txt

bg.txt文件

img/img1.jpgimg/img2.jpg

准备正样本,正样本则是指的包含目标物体的图片。

原文中说,如果想要检测某一特定物体(absolutely rigid object如,opencv的logo)只需要一张图片就行了。但做人体检测的话,就需要大量的正样本,以包含所有可能的图像呈现情况。所谓机器学习,也就是这个样子。

如果是做人脸识别的话,就要包含不同种族、肤色、年龄,甚至不同情绪和有无胡须等等情况。

正样本的存储目录如下:

/img   img1.jpg   img2.jpginfo.dat
info.dat文件内容如下:

img/img1.jpg  1  140 100 45 45img/img2.jpg  2  100 200 50 50   50 30 25 25

第一行格式:文件  目标物体区域数量  Rect数据1 Rect数据2

其中Rect数据包括(x, y, width, height)。

我写了一个从视频中,一帧一帧中用鼠标截取正样本并生成对应目录、图片文件和信息文件的程序,过段时间整理一下共享出来。
初次训练正样本命令:

opencv_createsamples -vec positive_vector.vec -info positive/infor.txt -bg back_ground.png -num 1000
注意,positive/infor.txt 这样的写法,opencv会自动把"positive/"加到"infor.txt"的每一行中。



准备好原始正样本后,OpenCV中给出了一个处理正样本的应用---- opencv_createsamples。这个应用的功能就是将样本随机的反转、缩放、添加背景等操作,以增加不同情况的正样本的个数。

然后开始训练:

opencv_traincascade -data . -vec positive_vector_100_100.vec  -bg 0_neg_samples.txt  -numPos 1000 -numNeg 4080 -w 100 -h 100
需要调整其他参数的,可以参考 官网的文章。

一定要注意存有图片路径文件中,图片文件的路径和opencv处理文件路径的方式。具体可以看以下:blog.csdn.net/cy_tec/article/details/51274431

友情提示:训练分类器,一定要找一个高配的机器。如果有GPU就更好了。像我这样妄图用mac air跑程序的简直。。。。最后还不得不挪到台式机上。

好了,程序在跑着了,等出了结果参看效果怎么样。


参考:

官网:docs.opencv.org/3.1.0/dc/d88/tutorial_traincascade.html

类似文章:http://blog.csdn.net/zwlq1314521/article/details/9789897 



0 0