xml分类器训练

xml分类器训练
xml分类器训练

分类:数据库/DB2/文章

第一步采集样本

1、将正负样本分别放在两个不同的文件夹下面

分别取名pos和neg,其中pos用来存放正样本图像,neg用来存放负样本

注意事项:1、正样本要统一切成24*24像素(或者其他)的格式,建议保存成灰度图,节省空间

2、正样本的数目越多,训练的时间也将越长,训练出来的效果也就越好

3、负样本的数量想对于正样本一定要足够的多,很多朋友在训练的时候,往往出现了CPU占用率达到了100%,但是训练只是停留在一个分类器长达几小时没有相应,问题出现在取负样本的那个函数icvGetHaarTrainingDataFromBG中; 当剩下所有的negtive样本在临时的cascade Classifier中,evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环

2、建立正负样本的说明文件

这里我们假定根目录在D:\boost下面。

在cmd下面进入pos目录,输入dir /b > pos.txt

这个时候会在pos文件加下面生成一个pos.txt文件,打开pos.txt

我们对它进行如下编辑:

(1)、将BMP 替换成为BMP 1 0 0 24 24

注意:1代表此图片出现的目标个数后面的0 0 24 24代表目标矩形框(0,0)到(24,24),用户可以根据自身需要调整数值(2)、删除文本中最后一行的“pos.txt”

2、对负样本进行编辑

在CMD下输入dir /b > neg.txt

同理,打开neg目录下的neg.txt文件,只需要删除最后一行的neg.txt这一句

注意:1、负样本说明文件不能含有目标物体

2、负样本图像尺寸不受到限制,但是尺寸越大,训练所用的时间越长,

3、负样本图像可以是灰度图,也可以不是,笔者建议使用灰度图,这样处理起来可能更有效率

4、负样本图像一定不要重复,增大负样本图像的差异性,可以增加分类器的使用范围,笔者建议可以使用网上的素材库,将1000多张不含目标的图片灰度处理后用来训练,效果更佳

二、使用opencv_createsamples.exe创立样本VEC文件

1、首先我们将要用的的2个程序opencv_createsamples.exe和opencv_haartraining.exe拷到根目录下

在CMD下输入如下命令:

opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -bg neg\neg.txt -w 40 -h 40 -num 142

以上参数的含义如下:

-vec

训练好的正样本的输出文件名。

-img

源目标图片(例如:一个公司图标)

-bg

背景描述文件。

-num

要产生的正样本的数量,和正样本图片数目相同。

-bgcolor

背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh 参数来指定。则在bgcolor-bgthresh 和bgcolor+bgthresh 中间的像素被认为是透明的。

-bgthresh

-inv

如果指定,颜色会反色

-randinv

如果指定,颜色会任意反色

-maxidev

背景色最大的偏离度。

-maxangel

-maxangle

-maxzangle

最大旋转角度,以弧度为单位。

-show

如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程

继续。这是个有用的debug 选项。

-w

输出样本的宽度(以像素为单位)

-h《sample_height》

输出样本的高度,以像素为单位。

按下回车后我们的正样本

三、使用opencv_haartraing.exe进行训练

参数说明如下:

Haartraining 的命令行参数如下:

-data存放训练好的分类器的路径名。

-vec正样本文件名(由trainingssamples 程序或者由其他的方法创建的)

-bg背景描述文件。

-npos

-nneg用来训练每一个分类器阶段的正/负样本。合理的值是:

-nPos = 7000;nNeg = 3000-nstages训练的阶段数。

-nsplits决定用于阶段分类器的弱分类器。

如果1,则一个简单的stump classifier 被使用。如果是2 或者更多,则带有number_of_splits 个内部节点的CART 分类器被使用。-mem预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。-sym(default)-nonsym指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。

-minhitrate《min_hit_rate》每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate 的number_of_stages 次方。

-maxfalsealarm没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate 的number_of_stages 次方。

-weighttrimming指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9-eqw

-mode选择用来训练的haar 特征集的种类。basic 仅仅使用垂直特征。all 使用垂直和45 度角旋转特征。-w《sample_width》-h《sample_height》训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同

在CMD下输入opencv_haartraining.exe -data xml -vec pos.vec -bg neg\neg.txt -w 40 -h 40 -mem 800

然后开始训练

训练过程如图,呵呵,要是成百上千的样本的话,我们先去吃完泡面休息一下吧

好了,休息回来,训练完成提示信息如下:

在根目录下就会生成相应的XML文件

人脸数据库汇总

■Annotated Database (Hand, Meat, LV Cardiac, IMM face) (http://www2.imm.dtu.dk/~aam/)

■AR Face Database (https://www.360docs.net/doc/539431004.html,/~aleix/aleix_face_DB.html)

■BioID Face Database (https://www.360docs.net/doc/539431004.html,/downloads/facedb/index.php)

■Caltech Computational Vision Group Archive (Cars, Motorcycles, Airplanes, Faces, Leaves, Background)

(https://www.360docs.net/doc/539431004.html,/html-files/archive.html)

■Carnegie Mellon Image Database (motion, stereo, face, car, ...) (https://www.360docs.net/doc/539431004.html,/idb/)

■CAS-PEAL Face Database (https://www.360docs.net/doc/539431004.html,/peal/index.html)

■CMU Cohn-Kanade AU-Coded Facial Expression Database (https://www.360docs.net/doc/539431004.html,/projects/project_421.html

■CMU Face Detection Databases (https://www.360docs.net/doc/539431004.html,/projects/project_419.html)

■CMU Face Expression Database (https://www.360docs.net/doc/539431004.html,/projects/FaceAuthentication/download.htm)

■CMU Face Pose, Illumination, and Expression (PIE) Database (https://www.360docs.net/doc/539431004.html,/projects/project_418.html)

■CMU VASC Image Database (motion, road sequences, stereo, CIL’s stereo data with ground truth, JISCT, face, face expressions, car) (https://www.360docs.net/doc/539431004.html,/idb/)

■Content-based Image Retrieval Database (https://www.360docs.net/doc/539431004.html,/research/imagedatabase/groundtruth/) ■Face Video Database of the Max Planck Institute for Biological Cybernetics (http://vdb.kyb.tuebingen.mpg.de/)

■FERET Database (https://www.360docs.net/doc/539431004.html,/)

■FERET Color Database (https://www.360docs.net/doc/539431004.html,/iad/humanid/colorferet/home.htmlhttps://www.360docs.net/doc/539431004.html,/colorferet/ )

■Georgia Tech Face Database (https://www.360docs.net/doc/539431004.html,/face_reco.htm)

■German Fingerspelling Database (https://www.360docs.net/doc/539431004.html,/face_reco.htm )

■Indian Face Database (http:// https://www.360docs.net/doc/539431004.html,/~vidit/IndianFaceDatabase)

■MIT-CBCL Car Database (https://www.360docs.net/doc/539431004.html,/software-datasets/CarData.html)

■MIT-CBCL Face Recognition Database (https://www.360docs.net/doc/539431004.html,/software-datasets/heisele/facerecognition-database.html)

■MIT-CBCL Face Databases (https://www.360docs.net/doc/539431004.html,/software-datasets/FaceData2.html)

■MIT-CBCL Pedestrian Database (https://www.360docs.net/doc/539431004.html,/software-datasets/PedestrianData.html)

■MIT-CBCL Street Scenes Database (https://www.360docs.net/doc/539431004.html,/software-datasets/streetscenes/)

■NIST/Equinox Visible and Infrared Face Image Database (https://www.360docs.net/doc/539431004.html,/products/HID.html)

■NIST Fingerprint Data at Columbia (Link)

■ORL Database of Faces (https://www.360docs.net/doc/539431004.html,/research/dtg/attarchive/facedatabase.html)

■Rutgers Skin Texture Database (https://www.360docs.net/doc/539431004.html,/rutgers_texture/)

■The Japanese Female Facial Expression (JAFFE) Database (https://www.360docs.net/doc/539431004.html,/jaffe.html

■The Ohio State University SAMPL Image Database (3D, still, motion) (https://www.360docs.net/doc/539431004.html,/database.htm)

■The University of Oulu Physics-Based Face Database (http://www.ee.oulu.fi/research/imag/color/pbfd.html)

■UMIST Face Database (https://www.360docs.net/doc/539431004.html,/danny/database.html)

■USF Range Image Data (with ground truth) (https://www.360docs.net/doc/539431004.html,/range/DataBase.html)

■Usenix Face Database (hundreds of images, several formats) (Link)

■UCI Machine Learning Repository (https://www.360docs.net/doc/539431004.html,/~mlearn/MLSummary.html)

■USC-SIPI Image Database (collection of digitized images) (https://www.360docs.net/doc/539431004.html,/services/database/Database.html)

■UCD VALID Database (multimodal for still face, audio, and video) (http://ee.ucd.ie/validdb/)

■UCD Color Face Image (UCFI) Database for Face Detection (http://ee.ucd.ie/~prag/)

■UCL M2VTS Multimodal Face Database (http://www.tele.ucl.ac.be/PROJECTS/M2VTS/m2fdb.html)

■Vision Image Archive at UMass (sequences, stereo, medical, indoor, outlook, road, underwater, aerial, satellite, space and more) (https://www.360docs.net/doc/539431004.html,/database/)

■Where can I find Lenna and other images? (https://www.360docs.net/doc/539431004.html,/faqs/compression-faq/part1/section-30.html)

■Yale Face Database (https://www.360docs.net/doc/539431004.html,/projects/yalefaces/yalefaces.html)

■Yale Face Database B (https://www.360docs.net/doc/539431004.html,/projects/yalefaces/yalefaces.html)

目前人脸识别领域常用的人脸数据库主要有:

1. FERET人脸数据库[2]

由FERET项目创建,包含14,051张多姿态,光照的灰度人脸图像,是人脸识别领域应用最广泛

的人脸数据库之一.其中的多数人是西方人,每个人所包含的人脸图像的变化比较单一.

2. MIT人脸数据库[4]

由麻省理工大学媒体实验室创建,包含16位志愿者的2,592张不同姿态,光照和大小的面部图像.

3. Yale人脸数据库[5]

由耶鲁大学计算视觉与控制中心创建,包含15位志愿者的165张图片,包含光照,表情和姿态

的变化.

4. Yale人脸数据库B[6]

包含了10个人的5,850幅多姿态,多光照的图像.其中的姿态和光照变化的图像都是在严格控制

的条件下采集的,主要用于光照和姿态问题的建模与分析.由于采集人数较少,该数据库的进一步应

用受到了比较大的限制.

5. PIE人脸数据库[7]

由美国卡耐基梅隆大学创建,包含68位志愿者的41,368张多姿态,光照和表情的面部图像.其

中的姿态和光照变化图像也是在严格控制的条件下采集的,目前已经逐渐成为人脸识别领域的一个重

要的测试集合.

6. ORL人脸数据库[8]

由剑桥大学AT&T实验室创建,包含40人共400张面部图像,部分志愿者的图像包括了姿态,

表情和面部饰物的变化.该人脸库在人脸识别研究的早期经常被人们采用,但由于变化模式较少,多

数系统的识别率均可以达到90%以上,因此进一步利用的价值已经不大.

7. PF01人脸数据库[9]

由韩国浦项科技大学创建,包含103人的1,751张不同光照,姿态,表情的面部图像,志愿者以

韩国人为主.

8. AR人脸数据库[10]

由西班牙巴塞罗那计算机视觉中心建立,包含116人的3,288幅图像.采集环境中的摄像机参数,

光照环境,摄像机距离等都是严格控制的.

9. BANCA人脸数据库[11]

该数据库是欧洲BANCA计划的一部分,包含了208人,每人12幅不同时间段的面部图像.

10. KFDB人脸数据库[12]

包含了1,000人,共52,000幅多姿态,多光照,多表情的面部图像,其中姿态和光照变化的图像

是在严格控制的条件下采集的.志愿者以韩国人为主.

11. MPI人脸数据库[13]

该人脸数据库包含了200人的头部3维结构数据和1,400幅多姿态的人脸图像.

12. XM2VTS人脸数据库[14]

包含了295人在4个不同时间段的图像和语音视频片断.在每个时间段,每人被记录了2个头部

旋转的视频片断和6个语音视频片断.此外,其中的293人的3维模型也可得到.

opencv老是卡在某一层,

最近在做人脸检测的Haartraining训练分类器,发现训练到最后误检率很低时分类器总是卡到某一层就不在继续进行,像是进入了死循环,程序代码与参数输入应该是没有任何问题的,所以我从网上找这方面的资料,最后在OpenCV的中文论坛看到一个帖,终于找到原因了。具体如下:

1、问题出现在取负样本的那个函数icvGetHaarTrainingDataFromBG中;

当剩下所有的negtive样本在临时的cascade Classifier中evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环!

2、解决方法是,增大负样本数目,增大负样本之间的变化!

P.S. 因为负样本原则应该是无强大而且多样性越大越好,这在现实中是不可行的,所以我们采集的负样本一般无论从数量上还是多样性上都很难满足要求,所以出现上述问题就很正常了,不过此时的分类器已经完全额、可以使用,因为它的误检率已经很低,从实用性上时没有任何问题的。

另外,帖中还提到:

负样本不需要做成和正样本一样大小的,所以你搜集个几千张各种照片就够用了,比如网页素材库啊什么的,只要保证你的负样本里不包含检测目标就行了。另外训练的时候,负样本不要一下子都加进去,不够了再加,否则会在找负样本上耗费很多时间。

也就是说,训练的时候如果发现很慢了,就ctrl+c停下来,修改bg_data.list,提供新的bg图像。

呵呵,现在感觉Haartraining太工程化了,到最后有点重复操作,所以觉得没必要在很多问题上深究,会用就行了。

[转载]OpenCV训练分类器制作xml文档

原文地址:OpenCV训练分类器制作xml文档作者:yumantang我的问题:有了opencv自带的那些xml人脸检测文档,我们就可以用cvLoad()这个函数加载他们,让他们对我们的人脸进行检测,但是,现在生活中的计算机视觉并不远远是检测人脸,还有很多物品需要识别,所以,能不能自己做个xml的检测文档,用它来检测自己需要的东西呢?例如,检测一个可乐瓶!

问题解决:

首先了解下,目标检测分为三个步骤:

1、样本的创建

2、训练分类器

3、利用训练好的分类器进行目标检测。

一,样本的创建:

训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本(例如可乐瓶,人脸等),反例样本指其它任意图片。

1.正样本

现在,我们来看正样本的创建步骤:

正样本由程序createsample 程序来创建。该程序的源代码由OpenCV 给出,并且在bin 目录下包含了这个可执行的程序。例如你opencv安装目录为c: 既C:OpenCVbin,你找找就有

正样本可以由单个的目标图片或者一系列的事先标记好的图片来创建!

2-2在用createsamples.exe 这个程序前,先来了解下这个程序的一些命令组合模式

Createsamples 程序的命令行参数:

命令行参数:

-vec

训练好的正样本的输出文件名。

-img

源目标图片(例如:一个公司图标)

-bg

背景描述文件。

-num

要产生的正样本的数量,和正样本图片数目相同。

-bgcolor

背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh

参数来指定。则在bgcolor-bgthresh 和bgcolor+bgthresh 中间的像素被认为是透明的。

-bgthresh

-inv

如果指定,颜色会反色

-randinv

如果指定,颜色会任意反色

-maxidev

背景色最大的偏离度。

-maxangel

-maxangle

-maxzangle

最大旋转角度,以弧度为单位。

-show

如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程

继续。这是个有用的debug 选项。

-w

输出样本的宽度(以像素为单位)

-h《sample_height》

输出样本的高度,以像素为单位。

注:正样本也可以从一个预先标记好的图像集合中获取。这个集合由一个文本文件来描述。每一个文本行对应一个图片。每行的第一个元素是图片文件名,第二个元素是对象实体的个数。后面紧跟着的是与之匹配的矩形框(x, y, 宽度,高度)。

由于HaarTraining 训练时输入的正样本是vec 文件,所以需要使用OpenCV 自带的

CreateSamples程序将准备好的正样本转换为vec文件。转换的步骤如下:

1) 制作一个正样本描述文件,用于描述正样本文件名(包括绝对路径或相对路径),

正样本数目以及各正样本在图片中的位置和大小。典型的正样本描述文件如下:

face_100/face00001.bmp 1 0 0 20 20

face_100/face00002.bmp 1 0 0 20 20

face_100/face00003.bmp 1 0 0 20 20

可采用Dos命令结合EditPlus 软件生成样本描述文件。具体方法是在Dos下的恰当

目录敲入dir face_100 /b > samples.dat,则会生成一个samples.dat,里面包含所有正

样本文件名列表,但没有相对路径名和正样本位置信息。在samples.dat 文件各行行

首增加“face _100/”的方法是使用EditPlus,先选中所有行,然后按Tab键为每行

增加一个制表位,然后将制表位全部替换为“face _100/”即可。通过将“bmp”替

换为“bmp 1 0 0 20 20”即可在每行添加“1 0 0 20 20”。运行CreateSamples程序。下面是一个运行参数示例:

-info pos.dat -vec pos.vec -num 200 -w 32 -h 32

表示有200 个样本,样本宽20,高20,正样本描述文件为samples.dat,结果输出

到samples.vec。

运行完了会生成一个*.vec 的文件。该文件包含正样本数目,宽高以及所有样本图. 2 负样本图像可以是不含有正样本模式的任何图像,比如一些风景照等。训练时,OpenCV

需要一个负样本描述文件,该文件只需包含所有负样本的文件名及绝对(或相对)路径名。

以下是一个负样本描述文件内容示例:

nonface_200/00001.bmp

nonface_200/00002.bmp

nonface_200/00003.bmp

负样本描述文件的生成方法可参照正样本描述文件生成方法。

负样本图像的大小只要不小于正样本就可以,在使用负样本时,OpenCV 自动从负样本

图像中抠出一块和正样本同样大小的区域作为负样本,具体可查看函数

icvGetNextFromBackgroundData()。具体抠图过程为:

1) 确定抠图区域的左上角坐标(Point.x, Point.y)

2) 确定一个最小缩放比例,使得原负样本图像缩放后恰好包含选中负样本区域

3) 对原负样本图象按计算好的缩放比例进行缩放

4) 在缩放后的图像上抠出负样本,如图3.2 左半部分的虚线框所示。

三、训练分类器

样本创建之后,接下来要训练分类器,这个过程是由haartraining 程序来实现的。

Haartraining 的命令行参数如下:

-data

存放训练好的分类器的路径名。

-vec

正样本文件名(由trainingssamples 程序或者由其他的方法创建的)

-bg

背景描述文件。

-npos

-nneg

用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg = 3000

-nstages

训练的阶段数。

-nsplits

决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier 被使用。如果是2 或者更多,则带有number_of_splits 个内部节点的CART 分类器被使用。

-mem

预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。

-sym(default)

-nonsym

指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。-minhitrate《min_hit_rate》

每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate 的number_of_stages 次方。-maxfalsealarm

没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate 的

number_of_stages 次方。

-weighttrimming

指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9

-eqw

-mode

选择用来训练的haar 特征集的种类。basic 仅仅使用垂直特征。all 使用垂直和45 度角旋转特征。-w《sample_width》

-h《sample_height》

训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同

然后,同样在dos命令行输入harr这个函数的命令

然后,按回车,会出现“成果”界面

到目前为止,你自己需要的分类器的xml文档就生成了,你自个找下你当前那个目录,会发现,多了几个文件夹,请看图:

到目前为止,就告一段落了!

(这里就只有几个图片,所以,很快训练完,不过,要想训练出检测率高的xml,图片的张数的很多,那时候,会训练几个小时到1天,时间几天的时间,那时候,你只求你的电脑不要断电!)

那么我该用什么办法检验我训练出的分类器的各项性能呢?

回答:要用opencv_performance.exe

先得到test sample:

用命令:opencv_createsamples.exe -info test1.dat -img face7.jpg -bg C:/TDDOWNLOAD/car_pic/bg.txt -num 35

-info 后面是生成的dat 文件,

-img 是人脸图片

-bg 背景图片

-num 生成的sample数量

测试命令:

opencv_performance.exe -data haarcascade_frontalface_alt2.xml -info test1.dat -ni

-data 参数接要测试的xml文档-info 是生成的sample

分类器训练

一、简介 目标检测方法最初由Paul Viola [Viola01]提出,并由Rainer Lienhart [Lienhart02]对这一方法进行了改善。该方法的基本步骤为:首先,利用样本(大约几百幅样本图片)的 harr 特征进行分类器训练,得到一个级联的boosted分类器。 分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器,这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。 分类器训练完以后,就可以应用于输入图像中的感兴趣区域(与训练样本相同的尺寸)的检测。检测到目标区域(汽车或人脸)分类器输出为1,否则输出为0。为了检测整副图像,可以在图像中移动搜索窗口,检测每一个位置来确定可能的目标。为了搜索不同大小的目标物体,分类器被设计为可以进行尺寸改变,这样比改变待检图像的尺寸大小更为有效。所以,为了在图像中检测未知大小的目标物体,扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描。 目前支持这种分类器的boosting技术有四种: Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。 "boosted" 即指级联分类器的每一层都可以从中选取一个boosting算法(权重投票),并利用基础分类器的自我训练得到。 根据上面的分析,目标检测分为三个步骤: 1、样本的创建 2、训练分类器 3、利用训练好的分类器进行目标检测。 二、样本创建 训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本(例如人脸或汽车等),反例样本指其它任意图片,所有的样本图片都被归一化为同样的尺寸大小(例如,20x20)。 负样本 负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个文本文件,每一行包含了一个负样本图片的文件名(基于描述文件的相对路径)。该文件必须手工创建。 e.g: 负样本描述文件的一个例子: 假定目录结构如下: /img img1.jpg img2.jpg bg.txt 则背景描述文件bg.txt的内容为: img/img1.jpg img/img2.jpg 正样本 正样本由程序createsample程序来创建。该程序的源代码由OpenCV给出,并且在bin目录下包含了这个可执行的程序。 正样本可以由单个的目标图片或者一系列的事先标记好的图片来创建。 Createsamples程序的命令行参数:

液位计的种类、原理及优缺点

液位计的种类、原理及优缺点 磁性浮子液位计 根据浮力原理和磁性耦合作用研制而成。当被测容器中的液位升降时,液位计本体管中的磁性浮子也随之升降,浮子内的永久磁钢通过磁耦合传递到磁翻柱指示器,驱动红、白翻柱翻转,当液位上升时翻柱由白色转变为红色,当液位下降时翻柱由红色转变为白色,指示器的红白交界处为容器内部液位的实际高度,从而实现液位清晰的指示。 可以做到高密封,防泄漏和适用于高温、高压、耐腐蚀的场合。对高温、高压、有毒、有害、强腐蚀介质更显其优越性。 与介质直接接触,浮球密封要求要严格,不能测量粘性介质。磁性材料如退磁易导致液位计不能正常工作 磁性翻板(柱)式液位计 与上同 与上同 翻板容易卡死,造成无法远传指示。磁性材料如退磁易导致液位计不能正常工作。 电磁波雷达液位计(导波雷达液位计) 雷达液位计采用发射—反射—接收的工作模式。雷达液位计的天线发射出电磁波,这些波经被测对象表面反射后,再被天线接收,电磁波从发射到接收的时间与到液面的距离成正比,关系式如下: D=CT/2(D:雷达液位计到液面的距离C:光速T:电磁波运行时间) 雷达液位计记录脉冲波经历的时间,而电磁波的传输速度为常数,则可算出液面到雷达天线的距离,从而知道液面的液位。

不需要传输媒介,不受大气、蒸气、槽内挥发雾影响的特点,能用于挥发介质的液位测量。采用非接触式测量,不受槽内液体的密度、浓度等物理特性的影响。 价格昂贵。仪表需要设置的参数较多,一旦出现问题,通常很难查出是什么原因造成的。如果天线本身不慎沾上介质会报错。如有结晶结冰现象会报错,需加热保温处理,并清理天线。最初安装需要是空仓,即空料位? 超声波液位计 超声波液位计是由微处理器控制的数字物位仪表。在测量中脉冲超声波由传感器(换能器)发出,声波经物体表面反射后被同一传感器接收,转换成电信号。并由声波的发射和接收之间的时间来计算传感器到被测物体的距离。 无机械可动部分,可靠性高,安装简单、方便,属于非接触测量,且不受液体的粘度、密度等影响 精度比较低,测试容易有盲区。不可以测量压力容器,不能测量易挥发性介质。 电容式液位计 采用测量电容的变化来测量液面的高低的。它是一根金属棒插入盛液容器内,金属棒作为电容的一个极,容器壁作为电容的另一极。两电极间的介质即为液体及其上面的气体。由于液体的介电常数ε1和液面上的介电常数ε2不同,比如:ε1》ε2,则当液位升高时,两电极间总的介电常数值随之加大因而电容量增大。反之当液位下降,ε值减小,电容量也减小。所以,可通过两电极间的电容量的变化来测量液位的高低。电容液位计的灵敏度主要取决于两种介电常数的差值,而且,只有ε1和ε2的恒定才能保证液位测量准确,因被测介质具有导电性,所以金属棒电极都有绝缘层覆盖。 传感器无机械可动部分,结构简单、可靠;精确度高;检测端消耗电能小,动态响应快;维护

java_Dom4j解析XML详解

学习:Dom4j 1、DOM4J简介 DOM4J是https://www.360docs.net/doc/539431004.html, 出品的一个开源XML 解析包。DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。 DOM4J 使用起来非常简单。只要你了解基本的XML-DOM 模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:

接口之间的继承关系如下: interface https://www.360docs.net/doc/539431004.html,ng.Cloneable interface org.dom4j.Node interface org.dom4j.Attribute interface org.dom4j.Branch interface org.dom4j.Document interface org.dom4j.Element interface org.dom4j.CharacterData interface org.dom4j.CDATA interface https://www.360docs.net/doc/539431004.html,ment interface org.dom4j.Text interface org.dom4j.DocumentType interface org.dom4j.Entity interface org.dom4j.ProcessingInstruction 2、XML文档操作1 2.1、读取XML文档: 读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。 public static Docum ent load(String filenam e) { Document docum ent =null; try { SAXReader saxReader = new SAXReader(); docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象 } catch (Exception ex) { ex.printStackTrace();

如何训练分类器

如何用OpenCV训练自己的分类器 另:英文说明http://se.cs.ait.ac.th/cvwiki/opencv:tutorial:haartraining 最近要做一个性别识别的项目,在人脸检测与五官定位上我采用OPENCV的haartraining 进行定位,这里介绍下这两天我学习的如何用opencv训练自己的分类器。在这两天的学习里,我遇到了不少问题,不过我遇到了几个好心的大侠帮我解决了不少问题,特别是无忌,在这里我再次感谢他的帮助。 一、简介 目标检测方法最初由Paul Viola [Viola01]提出,并由Rainer Lienhart [Lienhart02]对这一方法进行了改善。该方法的基本步骤为:首先,利用样本(大约几百幅样本图片)的 harr 特征进行分类器训练,得到一个级联的boosted分类器。 分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器,这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。 分类器训练完以后,就可以应用于输入图像中的感兴趣区域的检测。检测到目标区域分类器输出为1,否则输出为0。为了检测整副图像,可以在图像中移动搜索窗口,检测每一个位置来确定可能的目标。为了搜索不同大小的目标物体,分类器被设计为可以进行尺寸改变,这样比改变待检图像的尺寸大小更为有效。所以,为了在图像中检测未知大小的目标物体,扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描。 目前支持这种分类器的boosting技术有四种:Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。 "boosted" 即指级联分类器的每一层都可以从中选取一个boosting算法(权重投票),并利用基础分类器的自我训练得到。 根据上面的分析,目标检测分为三个步骤: 1、样本的创建 2、训练分类器 3、利用训练好的分类器进行目标检测。 二、样本创建 训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本,反例样本指其它任意图片。 负样本 负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个文本文件,每一行包含了一个负样本图片的文件名(基于描述文件的相对路径)。该文件创建方法如下: 采用Dos命令生成样本描述文件。具体方法是在Dos下的进入你的图片目录,比如我的图片放在D:\face\posdata下,则: 按Ctrl+R打开Windows运行程序,输入cmd打开DOS命令窗口,输入d:回车,再输入cd D:\face\negdata进入图片路径,再次输入dir /b > negdata.dat,则会图片路径下生成一个negdata.dat文件,打开该文件将最后一行的negdata.dat删除,这样就生成了负样本描述文件。dos命令窗口结果如下图:

Python解析XML的三种方式

一、什么是 XML? XML 被设计用来传输和存储数据。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。 准备一个解析用的xml如下: 1 laoz 老曾 30 https://www.360docs.net/doc/539431004.html, 我是老曾 2 qz 强子 30 https://www.360docs.net/doc/539431004.html, 我是强子 1、第一行是 XML 声明 它定义 XML 的版本(1.0)和所使用的编码(utf-8 : 万国码, 可显示各种语言) 2、必须包含根元素(有且只有一个) 该元素是所有其他元素的父元素,这里的根元素是Data ..

所有的都被包含在里面 3、元素开始标签必须要有结束标签 < account > 元素有 6个子元素:、< description > 每个元素都有对应的关闭标签(跟HTML不一样,有一些是不需要关闭的,比如,
) 4、XML 标签对大小写敏感 比如是不一样的 5、XML 属性值必须加引号 < account name=laoz>这样会报错的,必须"laoz"才行 二、Python 对 XML 的解析 Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree。 DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件。 1、利用DOM解析XML 一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

液位传感器的分类方法

按液位计传感器的所属学科分类。可分为物理型、化学型和生物型。把被测量转换成电址参数;化学型是利用化学反应,物理型是利用各种物理效应,把被测量转换成为电量参数;生物型是利用生物 按液位计传感器转换过程中的能量关系分类,可分为能最转换型和能最控制型。能量转换型是磁性翻柱液位计传感器直接将被测量的能最转换为输出量的能量;能量控制型是由外部供给液位计传感器能量。而由被测量来控制输出的能量。 按液位计传感器转换原理分类,可分为电阻式、微波式、激光式、超声式、光电式、热电式、电感式、电容式、电磁式、压电式、髯尔式、光纤式及核辐射式等等。 按液位计传感器转换过程中的物理现象分类,可分为结构型和物性型。结构型是依靠液位计传感器结构变化来实现参数转换的;物性型是利用液位计传感器的敏感元件特性变化实现参数转换的。 按液位计传感器的用途分类。可分为重址、位移、速度、加速度、力、电压、电流、温度、压力、流傲、功率物性参数等等。 效应及机体部分组织、微生物,把被测量转换为电最参数。 按液位计传感器输出量的形式分类,可分为模拟式和数字式。模拟式液位计传感器枪出为模拟量;数字式液位计传感器输出直接为数字量。 按液位计传感器的功能分类。可分为传统型和智能型。传统型磁翻板液位计传感器一般是指只具有显示和输出功能的液位计传感器;真正意义上的智能液位计传感器,推理、感知、应该具备学习、通讯等功能,具有精度高、性能价格比高、使用方便等特点。 智能型液位计传感器发展迅速,目前可实现的功能,概括起来有: 具有自动补偿功能具有自校零、自标定、白校正功能;具有双向通讯、标准化数字输出或者符号输出功能能够自动采集数据,并对数据进行预处理;能够自动进行检验、自选量程、自动诊断故障;具有数据存储、记忆与信息处理功能;具有判断、决策处理功能。 艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。 如需进一步了解图尔克、奥托尼克斯、科瑞、山武、倍加福、邦纳、亚德客、施克等各类传感器的选型,报价,采购,参数,图片,批发信息,请关注艾驰商

XML报文解析测试

XML报文解析测试 在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预备 测试环境: AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试。 XML 文件格式如下: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> 测试方法: 采用 JSP 端调用Bean(至于为什么采用JSP来调用,请参考: https://www.360docs.net/doc/539431004.html,/rosen/archive/2004/10/15/138324.aspx),让每一种方案分别解析10K、100K、1000K、10000K的 XML 文件,计算其消耗时间(单位:毫秒)。 JSP 文件: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="com.test.*"%> <html> <body> <% String args[]={""}; MyXMLReader.main(args); %>

VC++ xml解析

三种最流行的开放源码XML 库是expat、libxml 和Xerces。 第一部分:DOM解析: 概述:DOM解析将会把一个完整的XML文档读进来,生成一个结构树。这样会要把XML文档全部都加载到内在中。所以解析起来的速度会要慢一些。 1、如何加载xml文件: //创建DOM,加载XML文档 MSXML::IXMLDOMDocumentPtr pCommandDoc; pCommandDoc.CreateInstance(__uuidof(MSXML::DOMDocument)); pCommandDoc->put_async(V ARIANT_FALSE); pCommandDoc->put_validateOnParse(VARIANT_FALSE); pCommandDoc->put_resolveExternals(V ARIANT_FALSE); pCommandDoc->put_preserveWhiteSpace(V ARIANT_TRUE); pCommandDoc->load(file.GetBuffer(0)); 2、在XML文档中查找指定的结点: //找到 MSXML::IXMLDOMNodePtr pRootNode=pCommandDoc->selectSingleNode("root/record"); if (pRootNode==NULL) { return ; } 3、得到XML文档中,结点的属性 CString strTemp; MSXML::IXMLDOMNamedNodeMapPtr pAttrs = NULL; pRootNode->get_attributes(&pAttrs); if (pAttrs==NULL) { return; } MSXML::IXMLDOMNodePtr pRequestTypeAttr=pAttrs->getQualifiedItem("name",""); _bstr_t strRequestType=pRequestTypeAttr->Gettext(); strTemp=strRequestType.operator char *(); 4、得到结点的内容 _bstr_t strVisiPort=pNode->Gettext(); 5、设置结点的内容 HRESULT hr=pNode->put_text(_bstr_t(m_strGatewayPassword)); 6、设置一个属性内容 IXMLDOMAttribute *pa=NULL; bstr = SysAllocString(L"属性1"); pXMLDom->createAttribute(bstr,&pNode); var = VariantString(L"strin"); pa->put_value(var); pRoot->setAttributeNode(pa, &pa1); 第二部分、如何使用SAX解析

简单分类器的MATLAB实现

简单分类器的MATLAB实现 摘要:本实验运用最小距离法、Fisher线形判别法、朴素贝叶斯法、K近邻法四种模式识别中最简单的方法处理两维两类别的识别问题,最后对实验结果进行了比较。 关键字:MATLAB 最小距离Fisher线形判别朴素贝叶斯K近邻法 一.M atlab语言简介 Matlab 语言(即Matrix 和Laboratory) 的前三位字母组合,意为“矩阵实验室”,Matlab 语言是一种具有面向对象程序设计特征的高级语言,以矩阵和阵列为基本编程单位。Matlab 可以被高度“向量化”,而且用户易写易读。传统的高级语言开发程序不仅仅需要掌握所用语言的语法,还需要对有关算法进行深入的分析。与其他高级程序设计语言相比,Matlab 在编程的效率、可读性以及可移植性等方面都要高于其他高级语言,但是执行效率要低于高级语言,对计算机系统的要求比较高。例如,某数据集是m*n的二维数据组,对一般的高级计算机语言来说,必须采用两层循环才能得到结果,不但循环费时费力,而且程序复杂;而用Matlab 处理这样的问题就快得多,只需要一小段程序就可完成该功能,虽然指令简单,但其计算的快速性、准确性和稳定性是一般高级语言程序所远远不及的。严格地说,Matlab 语言所开发的程序不能脱离其解释性执行环境而运行。 二.样本预处理 实验样本来源于1996年UCI的Abalone data,原始样本格式如下: 1 2 3 4 5 6 7 8 9 其中第一行是属性代码:1.sex 2.length 3.diameter 4.height 5.whole_weight 6.shucked_weight 7 .viscera weight 8. shell weight 9.age 原始样本是一个8维20类的样本集,就是根据Abalone的第一至第八个特征来预测第九个特征,即Abalone的年龄。为简单其见,首先将原始样本处理成两维两类别问题的样本。选取length和weiht作为两个特征向量,来预测第三个特征向量age.(age=6或者age=9),我们将age=6的样本做为第一类,age=12的样本做为第二类。 处理后的样本: length weight age

四种XML解析器比较

1.详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。 而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM 还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.360docs.net/doc/539431004.html, JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102” 将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。 JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开

opencv自己训练分类器进行物体识别

从SVM的那几张图可以看出来,SVM是一种典型的两类分类器,即它只回答属于正类还是负类的问题。而现实中要解决的问题,往往是多类的问题(少部分例外,例如垃圾邮件过滤,就只需要确定“是”还是“不是”垃圾邮件),比如文本分类,比如数字识别。如何由两类分类器得到多类分类器,就是一个值得研究的问题。 还以文本分类为例,现成的方法有很多,其中一种一劳永逸的方法,就是真的一次性考虑所有样本,并求解一个多目标函数的优化问题,一次性得到多个分类面,就像下图这样: 多个超平面把空间划分为多个区域,每个区域对应一个类别,给一篇文章,看它落在哪个区域就知道了它的分类。 看起来很美对不对?只可惜这种算法还基本停留在纸面上,因为一次性求解的方法计算量实在太大,大到无法实用的地步。 稍稍退一步,我们就会想到所谓“一类对其余”的方法,就是每次仍然解一个两类分类的问题。比如我们有5个类别,第一次就把类别1的样本定为正样本,其余2,3,4,5的样本合起来定为负样本,这样得到一个两类分类器,它能够指出一篇文章是还是不是第1类的;第二次我们把类别2 的样本定为正样本,把1,3,4,5的样本合起来定为负样本,得到一个分类器,如此下去,我们可以得到5个这样的两类分类器(总是和类别的数目一致)。到了有文章需要分类的时候,我们就拿着这篇文章挨个分类器的问:是属于你的么?是属于你的

么?哪个分类器点头说是了,文章的类别就确定了。这种方法的好处是每个优化问题的规模比较小,而且分类的时候速度很快(只需要调用5个分类器就知道了结果)。但有时也会出现两种很尴尬的情况,例如拿一篇文章问了一圈,每一个分类器都说它是属于它那一类的,或者每一个分类器都说它不是它那一类的,前者叫分类重叠现象,后者叫不可分类现象。分类重叠倒还好办,随便选一个结果都不至于太离谱,或者看看这篇文章到各个超平面的距离,哪个远就判给哪个。不可分类现象就着实难办了,只能把它分给第6个类别了……更要命的是,本来各个类别的样本数目是差不多的,但“其余”的那一类样本数总是要数倍于正类(因为它是除正类以外其他类别的样本之和嘛),这就人为的造成了上一节所说的“数据集偏斜”问题。 因此我们还得再退一步,还是解两类分类问题,还是每次选一个类的样本作正类样本,而负类样本则变成只选一个类(称为“一对一单挑”的方法,哦,不对,没有单挑,就是“一对一”的方法,呵呵),这就避免了偏斜。因此过程就是算出这样一些分类器,第一个只回答“是第1类还是第2类”,第二个只回答“是第1类还是第3类”,第三个只回答“是第1类还是第4类”,如此下去,你也可以马上得出,这样的分类器应该有5 X 4/2=10个(通式是,如果有k个类别,则总的两类分类器数目为k(k-1)/2)。虽然分类器的数目多了,但是在训练阶段(也就是算出这些分类器的分类平面时)所用的总时间却比“一类对其余”方法少很多,在真正用来分类的时候,把一篇文章扔给所有分类器,第一个分类器会投票说它是“1”或者“2”,第二个会说它是“1”或者“3”,让每一个都投上自己的一票,最后统计票数,如果类别“1”得票最多,就判这篇文章属于第1类。这种方法显然也会有分类重叠的现象,但不会有不可分类现象,因为总不可能所有类别的票数都是0。看起来够好么?其实不然,想想分类一篇文章,我们调用了多少个分类器?10个,这还是类别数为5的时候,类别数如果是1000,要调用的分类器数目会上升至约500,000个(类别数的平方量级)。这如何是好? 看来我们必须再退一步,在分类的时候下功夫,我们还是像一对一方法那样来训练,只是在对一篇文章进行分类之前,我们先按照下面图的样子来组织分类器(如你所见,这是一个有向无环图,因此这种方法也叫做DAG SVM)

几种液位计的原理与选型

几种液位计的原理与选型. 磁翻柱液位计 主要原理 磁翻柱液位计也称为磁翻板液位计,它的结构主要基于浮力和磁力原理设计生产的。带有磁体的浮子(简称磁性浮子)在被测介质中的位置受浮力作用影响。液位的变化导致磁性浮子位置的变化、磁性浮子和磁翻柱(也成为磁翻板)的静磁力耦合作用导致磁翻柱翻转一定角度(磁翻柱表面涂敷不同的颜色),进而反映容器内液位的情况。 配合传感器(磁簧开关)和精密电子元器件等构成的电子模块和变送器模块,可以变送输出电阻值信号、电流值(4~20mA)信号、开关信号以及其他电学信号。从而实现现场观测和远程控制的完美结合。 适用范围及特点 本液位计采用优质磁体和进口电子元件,使产品具有:设计合理、结构简单、使用方便、性能稳定、使用寿命长、便于安装维护等优点。 本液位计输出信号多样,实现远距离的液位指示、检测、控制和记录。 本液位计几乎可以适用于各种工业自动化过程控制中的液位测量与控制。可以广泛运用于石油加工、食品加工、化工、水处理、制药、电力、造纸、冶金、船舶和锅炉等领域中的液位测量、控制与监测。 磁浮球液位计(液位开关) 主要原理 磁浮球液位计(液位开关)结构主要基于浮力和静磁场原理设计生产的。带有磁体的浮球(简称浮球)在被测介质中的位置受浮力作用影响:液位的变化导致磁性浮子位置的变化。浮球中的磁体和传感器(磁簧开关)作用,使串联入电路的元件(如定值电阻)的数量发生变化,进而使仪表电路系统的电学量发生改变。也就是使磁性浮子位置的变化引起电学量的变化。通过检测电学量的变化来反映容器内液位的情况。 该液位计可以直接输出电阻值信号,也可以配合使用变送模块,输出电流值(4~20mA)信号;同时配合其他转换器,输出电压信号或者开关信号(也可以按照客户需求转换器由公司配送)。从而实现电学信号的远程传输、分析与控制。 适用范围及特点 本产品采用优质磁体和进口电子元件,使产品具有:结构简单、使用方便、性能稳定、使用寿命长、便于安装维护等优点。 本产品几乎可以适用与各种工业自动化过程控制中的液位测量与控制,可以广泛运用于石油加工、食品加工、化工、水处理、制药、电力、造纸、冶金、船舶和锅炉等领域中的液位测量、控制与监测。 防爆浮球液位开关 主要原理 防爆浮球液位开关,也称为防爆浮球液位控制器。它是专门为爆炸性环境中使用而设计制造的液位控制仪表,本产品是基于浮力原理和杠杆原理设计的,当容器内液位发生变化时,浮球的位置将随液位的变化而变化,浮球的这种位移将通过杠杆作用于微动开关,进而由微动开关产生开关信号。 适用范围及特点 本产品采用优质材料和进口电子元件,使产品具有:设计合理、结构简单、使用方便、性能

XML创建与解析常用方法介绍

XML解析方式介绍 1.DOM4J(Document Object Model for Java) 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java 开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。 DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J. 【优点】 ①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。 ②支持XPath。 ③有很好的性能。 【缺点】 ①大量使用了接口,API较为复杂。 2.SAX(Simple API for XML) SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX 采用的是事件模型。

SAX解析XML原理

SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是 W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。 常见的事件处理器有三种基本类型: ● 用于访问XML DTD内容的DTDHandler; ● 用于低级访问解析错误的ErrorHandler; ● 用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。 图 2显示了SAX解析器如何通过一个回调机制报告事件。解析器读取输入文档并在处理文档时将每个事件推给文档处理器(MyContentHandler)。 与DOM相比,SAX解析器能提供更好的性能优势,它提供对XML文档内容的有效低级访问。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,你无需像在DOM中那样为所有节点创建对象。最后,SAX“推”模型可用于广播环境,能够同时注册多个ContentHandler,并行接收事件,而不是在一个管道中一个接一个地进行处理。 SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为SAX解析器不能交流元信息,如DOM的父/子支持,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑就越复杂。虽然没有必要一次将整个文档加载到内存中,但SAX解析器仍然需要解析整个文档,这点和DOM一样。 也许SAX面临的最大问题是它没有内置如XPath所提供的那些导航支持。再加上它的单遍解析,使它不能支持随机访问。这一限制也表现在名字空间上: 对有继承名字空间的元素不做注解。这些限制使SAX很少被用于操作或修改文档。 那些只需要单遍读取内容的应用程序可以从SAX解析中大大受益。很多B2B和EAI应用程序将XML用做封装格式,接收端用这种格式简单地接收所有数据。这就是SAX明显优于DOM的地方:因高效而获得高吞吐率。在SAX 2.0 中有一个内置的过滤机制,可以很轻松地输出一个文档子集或进行简单的文档转换。

xml分类器训练

分类:数据库/DB2/文章 第一步采集样本 1、将正负样本分别放在两个不同的文件夹下面 分别取名pos和neg,其中pos用来存放正样本图像,neg用来存放负样本 注意事项:1、正样本要统一切成24*24像素(或者其他)的格式,建议保存成灰度图,节省空间 2、正样本的数目越多,训练的时间也将越长,训练出来的效果也就越好 3、负样本的数量想对于正样本一定要足够的多,很多朋友在训练的时候,往往出现了CPU占用率达到了100%,但是训练只是停留在一个分类器长达几小时没有相应,问题出现在取负样本的那个函数icvGetHaarTrainingDataFromBG中; 当剩下所有的negtive样本在临时的cascade Classifier中,evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环 2、建立正负样本的说明文件 这里我们假定根目录在D:\boost下面。

在cmd下面进入pos目录,输入dir /b > pos.txt 这个时候会在pos文件加下面生成一个pos.txt文件,打开pos.txt

我们对它进行如下编辑: (1)、将BMP 替换成为BMP 1 0 0 24 24 注意:1代表此图片出现的目标个数后面的0 0 24 24代表目标矩形框(0,0)到(24,24),用户可以根据自身需要调整数值(2)、删除文本中最后一行的“pos.txt”

2、对负样本进行编辑 在CMD下输入dir /b > neg.txt 同理,打开neg目录下的neg.txt文件,只需要删除最后一行的neg.txt这一句 注意:1、负样本说明文件不能含有目标物体 2、负样本图像尺寸不受到限制,但是尺寸越大,训练所用的时间越长, 3、负样本图像可以是灰度图,也可以不是,笔者建议使用灰度图,这样处理起来可能更有效率 4、负样本图像一定不要重复,增大负样本图像的差异性,可以增加分类器的使用范围,笔者建议可以使用网上的素材库,将1000多张不含目标的图片灰度处理后用来训练,效果更佳 二、使用opencv_createsamples.exe创立样本VEC文件 1、首先我们将要用的的2个程序opencv_createsamples.exe和opencv_haartraining.exe拷到根目录下 在CMD下输入如下命令: opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -bg neg\neg.txt -w 40 -h 40 -num 142 以上参数的含义如下:

水位传感器种类、工作原理介绍

水位传感器种类、工作原理介绍 水位传感器是一种可以检测水位的传感器,主要应用于医疗、食品、化工行业中,进行水位控制、水位的检测。先介绍水位传感器的分类。 水位传感器的种类: 水位传感器种类很多,包括单法兰静压/双法兰差压水位传感器,浮球式水位传感器,磁性水位传感器,投入式水位传感器,电动内浮球水位传感器,电动浮筒水位传感器,电容式水位传感器,磁致伸缩水位传感器,伺服水位传感器等,超声波水位传感器,雷达水位传感器等。 (图片源自网络)

(图片来源于网络)

上图是一个水位传感器种类的大概情况,由此图我们可以看出水位传感器种类较多,主要可以分为接触式和非接触式两种。 浮筒式水位传感器:浮筒式水位变送器是将磁性浮球改为浮筒,水位传感器是根据阿基米德浮力原理设计的。浮筒式水位变送器是利用微小的金属膜应变传感技术来测量液体的水位、界位或密度的,它在工作时可以通过现场按键来进行常规的设定操作。 浮球式水位传感器:浮球式水位变送器由磁性浮球、测量导管、信号单元、电子单元、接线盒及安装件组成,一般磁性浮球的比重小于0.5,可漂于液面之上并沿测量导管上下移动,导管内装有测量元件,它可以在外磁作用下将被测水位信号转换成正比于水位变化的电阻信号,并将电子单元转换成信号输出。浮球开关因为是最简单、最古老的检测方式,有着检测水位不精确的缺点,浮子易卡死。 (图片源自网络)

静压式水位传感器: 该变送器利用液体静压力的测量原理工作,它一般选用硅压力测压传感器将测量到的压力转换成电信号,再经放大电路放大和补偿电路补偿,最后以4~20mA或0~10mA电流方式输出。 超声波式水位传感器: 这是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生振动产生的超声波,超声波在碰到液体会产生显著反射形成反射成回波。因此以超声波作为检测手段,产生超声波和接收超声波。这就是超声波式的水位传感器工作原理。超声波式水位传感器特点:频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播。 光电式水位传感器: 光电液位传感器是利用光在两种不同介质界面发生反射折射原理而 开发的新型接触式点液位测控装置。光电水位传感器具有结构简单、定位精度高,没有机械部件,不需调试,灵敏度高及耐腐蚀、耗电少、体积小等诸多优点,还具有耐高温、耐高压、耐强腐蚀,化学性质稳定,对被测介质影响小等特征。

Java解析XML文件

Java解析XML文件 ========================================== xml文件 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> ========================================== 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByT agName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("车牌号码:" +

相关文档
最新文档