2009-12-19考了CET英语,心情很差,估计又不过的,哎!英文差!
于是看看书,看看自己感兴趣的书
今天下午,研究了整个下午的小难题,在8点40分终于搞定了!肚子饿,还没吃饭,还没洗澡,克服了一个不懂的小难题,心理有点体会,想在这里留点纪念,方便别人以后学习。于是乎,我写了:
(那些开训练器的相关介绍我就不再详细谈了,进入正题)
我的问题:有了opencv自带的那些xml人脸检测文档,我们 就可以用cvLoad()这个函数加载他们,让他们对我们的人脸进行检测,但是,现在生活中的计算机视觉并不远远是检测人脸,还有很多物品需要识别,所以,能不能自己做个xml的检测文档,用它来检测自己需要的东西呢?例如,检测一个可乐瓶!
问题解决:
首先了解下,目标检测分为三个步骤:
1、 样本的创建
2、 训练分类器
3、 利用训练好的分类器进行目标检测。
一,样本的创建:
训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本(例如可乐瓶,人脸等),反例样本指其它任意图片,所有的样本图片都被归一化为同样的尺寸大小(例如,20x20)。
1 负样本(反例样本)可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述 ......
好接“OpenCV训练分类器制作xml文档之一”
了解了创建函数的命令行参数
现在我们对正样本举个例子:
假设有5 个正样本图片文件img1.bmp,…img5.bmp;创建一个正样本的txt文本文档,名字为 info.txt
正样本描述文件info.txt 的内容如下
positive/image1.bmp 1 0 0 24 28
positive/image2.bmp 1 0 0 24 28
positive/image3.bmp 1 0 0 24 28
positive/image4.bmp 1 0 0 24 28
positive/image5.bmp 1 0 0 24 28
positive/image6.bmp 1 0 0 24 28
图片img1.bmp 包含了单个目标对象实体,矩形为(0,0,24,28)。
注意:要从图片集中创建正样本,要用-info 参数而不是用-img 参数。
-info <collect_file_name>
标记特征的图片集合的描述文件。
背景(负样本)描述文件的内容如下:
_img/bg1.bmp 1 0 0 24 28
_ing/bg2.bmp 1 0 0 24 28
_img/bg3.bmp 1 0 0 24 28
_ing/bg4.bmp 1 0 0 24 28
_img/bg5.bmp 1 0 0 24 28
_ing/bg6.bmp 1 0 0 24 28
_img/bg7.bmp 1 0 0 24 28
_ing/bg8.bmp 1 0 0 24 28
_img/bg9.bmp 1 0 0 24 28
_ing/bg10.bmp 1 0 0 24 28
这几个文件的位置在同个文件夹下,哎,看图,一目了然:
现在说了这么多废话, ......
三、训练分类器
样本创建之后,接下来要训练分类器,这个过程是由haartraining 程序来实现的。
Haartraining 的命令行参数如下:
-data<dir_name>
存放训练好的分类器的路径名。
-vec<vec_file_name>
正样本文件名(由trainingssamples 程序或者由其他的方法创建的)
-bg<background_file_name>
背景描述文件。
-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>
用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg = 3000
-nstages<number_of_stages>
训练的阶段数。
-nsplits<number_of_splits>
决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier 被使用。如果是2 或者更
多,则带有number_of_splits 个内部节点的CART 分类器被使用。
-mem<memory_in_MB>
预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。
-sym(default)
-nonsym
指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
-minhitrate《min_hit_rate》
每个阶段分类器需要的最小的命中率。总的命中率为min ......
原贴:http://topic.csdn.net/u/20100412/14/f6941844-e9bf-4ed7-a0c2-bef03d775783.html?70615
declare @data xml=
'<root>
<SaleMan>
<SaleManId>1</SaleManId>
<SaleManCode>001</SaleManCode>
<Nodes>
<Node>
<NodeId>101</NodeId>
<NodeCode>101</NodeCode>
<CardSetting>
<R1>1</R1>
<R2>2</R2>
<R3>3</R3>
</CardSetting>
</Node>
<Node>
<NodeId>102</NodeId>
<NodeCode>102</NodeCode>
<CardSetting>
<R1>1</R1>
<R2>2</R2>
<R3>3</R3>
<R8>0</R8>
</CardSetting>
</Node>
<Node>
<NodeId>103</NodeId>
<NodeCode>103</NodeCode>
<CardSetting>
& ......
一XML 解析器
大多数浏览器都有读取和操作 XML 的内建 XML 解析器。
解析器把 XML 转换为 JavaScript 可访问的对象。
解析 XML
所有现代浏览器都有读取和操作 XML 的内建 XML 解析器。
解析器把 XML 载入内存,然后把它转换为可通过 JavaScript 访问的 XML DOM 对象。
您将在本教程的下一节中学习更多有关 XML DOM 的知识。
微软的 XML 解析器与其他浏览器中的解析器之间,存在一些差异。微软的解析器支持 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都包含遍历 XML 树、访问插入及删除节点(元素)及其属性的函数。
在本教程中,我们将为您展示如何创建可同时工作于 Internet Explorer 和其他浏览器中的脚本。
注释:当我们谈及 XML 解析,我们常常会使用有关 XML 元素的术语:节点。
通过微软的 XML 解析器来加载 XML
微软的 XML 解析器内建于 Internet Explorer 5 以及更高的版本中。
下面的 JavaScript 片段把一个 XML 文档载入解析器中:
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("note.xml");
例子解释:
上面代码的第一个行创建一个空的微软 XML 文档对象 ......
实现功能:根据配置文件(XXXX.ini)中的内容对XML中节点进行操作,如果XML中存在与配置文件中相同的节点,则根据配置文件将XML文件中相应节点的值进行更新;如果XML文件中不存在配置文件中出现的节点,则在XML中将新节点及值进行插入操作。
◆XML文档结构如下
//--------------------------------------------------------------------------------------------
- <printer driver-name="OKI C710(PS)">
<color-profile path="ColorProfiles/OkiC710CMY.icc" />
</printer>
- <printer driver-name="OKI C710(PCL)">
<color-profile path="ColorProfiles/OkiC710CMY.icc" />
</printer>
- <printer driver-name="OKI C830(PS)">
<color-profile path="ColorProfiles/OkiC830CMY_new.icc
" />
</printer>
- <printer driver-name="OKI C830(PCL)">
<color-profile path="ColorProfiles/OkiC830CMY.icc" />
</printer>
//---------- ......
实现功能:根据配置文件(XXXX.ini)中的内容对XML中节点进行操作,如果XML中存在与配置文件中相同的节点,则根据配置文件将XML文件中相应节点的值进行更新;如果XML文件中不存在配置文件中出现的节点,则在XML中将新节点及值进行插入操作。
◆XML文档结构如下
//--------------------------------------------------------------------------------------------
- <printer driver-name="OKI C710(PS)">
<color-profile path="ColorProfiles/OkiC710CMY.icc" />
</printer>
- <printer driver-name="OKI C710(PCL)">
<color-profile path="ColorProfiles/OkiC710CMY.icc" />
</printer>
- <printer driver-name="OKI C830(PS)">
<color-profile path="ColorProfiles/OkiC830CMY_new.icc
" />
</printer>
- <printer driver-name="OKI C830(PCL)">
<color-profile path="ColorProfiles/OkiC830CMY.icc" />
</printer>
//---------- ......