
1首先确保你输入的中包含行人,如果没有,那found为空是自然的事情。 2然后,即使你输入的中包含行人,OpenCV自带的hog+svm检测函数也不一定能够把行人检测出来,毕竟它的训练样本数目也是有限的
一、原始编译环境
Ÿ Windows 7 64位旗舰版
Ÿ OpenCV SVN(v249)
Ÿ x64应用
二、编译修改说明(下载后必须按以下步骤根据你的本机环境调整设置,才能正常编译使用)
1 双击 sln文件打开解决方案
2 在项目属性的“VC++目录”中分别修改OpenCV相关的 include路径和 lib路径;directshow的路径使用了相对路径,不需要修改
3 在“解决方案平台”中选择“win32”或“x64”,分别对应32位系统和64位系统
首先,需要说明的是,OpenCV自带的haar training提取的特征是haar特征 分类器是AdaBoost级联分类器(如需了解Adaboost算法, 。所谓的级联分类器,就是将若干的简单的分量分类器(可以理解为一般的普通分类器)依次串联起来,最终的检测分类结果,要依次通过所有的分量分类器才能算是一个有效的检测分类结果。否则,就认为当前检测区域内没有我们需要找的目标。
利用OpenCV自带的haar training程序训练一个分类器,需要经过以下几个步骤:
(1)收集训练样本:
训练样本包括正样本和负样本。正样本,通俗点说,就是中只有你需要的目标。而负样本的只要其中不含有目标就可以了。但需要说明的是,负样本也并非随便选取的。例如,你需要检测的目标是汽车,那么正样本就应该是仅仅含有汽车的,而负样本显然不能是一些包含天空的,海洋的,风景的。因为你最终训练分类器的目的是检测汽车,而汽车应该出现在马路上。也就是说,分类器最终检测的应该是那些包含马路,交通标志,建筑物,广告牌,汽车,摩托车,三轮车,行人,自行车等在内的。很明显,这里的负样本应该是包含摩托车、三轮车、自行车、行人、路面、灌木丛、花草、交通标志、广告牌等。
另外,需要提醒的是,adaboost方法也是机器学习中的一个经典算法,而机器学习算法的前提条件是,测试样本和训练样本独立同分布。所谓的独立同分布,可以简单理解为:训练样本要和最终的应用场合非常接近或者一致。否则,基于机器学习的算法并不能保证算法的有效性。此外,足够的训练样本(至少得几千张正样本、几千张负样本)也是保证训练算法有效性的一个前提条件。
这里,假设所有的正样本都放在f:/pos文件夹下,所有的负样本都放在f:/neg文件夹下;
(2)对所有的正样本进行尺寸归一化:
上一步收集到的正样本,有很多的尺寸大小,有的是200300,有的是500800尺寸归一化的目的,就是把所有的都缩放到同一大小。比如,都缩放到5060的大小。
(3)生成正样本描述文件:
所谓的正样本描述文件,其实就是一个文本文件,只不过,很多人喜欢将这个文件的后缀改成dat而已。正样本描述文件中的内容包括:文件名 目标个数 目标在中的位置(x,y,width,height)
典型的正样本描述文件如下所示:
0jpg 1 0 0 30 40
1jpg 1 0 0 30 40
2jpg 1 0 0 30 40
不难发现,正样本描述文件中,每一个正样本占一行,每一行以正样本开头,后面紧跟着该中正样本的数量(通常为1),以及正样本在中的位置
假如,f:\pos文件夹下有5000个正样本,每个中仅有一个目标。那么,我们可以写程序(遍历文件夹中的所有文件,将文件名写入到文件中,将正样本在中的位置,大小都写入文件中)生成一个posdat文件作为正样本描述文件。
(4)创建正样本vec文件
由于haarTraining训练的时候需要输入的正样本是vec文件,所以需要使用createsamples程序来将正样本转换为vec文件。
打开OpenCV安装目录下bin文件夹里面的名为createSamples(新版本的OpenCV里面改名为opencv_createSamples)的可执行程序。需要提醒的是,该程序应该通过命令行启动(可以参考我的另一篇博客:>
以上就是关于如何提高opencv 人脸识别准确全部的内容,包括:如何提高opencv 人脸识别准确、如何用OpenCV自带的adaboost程序训练并检测目标、opencv hog detectmultiscale参数怎么调等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)