OpenCV目标识别

来源:互联网 发布:python读取csv文件 编辑:程序博客网 时间:2024/05/01 01:58


Viola和Jones提出了著名的Viola-Jones识别器,是一种快速可靠的图像目标识别器。OpenCV在CascadeClassifier中实现了这一识别器。

 

CascadeClassifier类可以从视频中识别目标:

 

String face_cascade_name = "haarcascade_frontalface_alt.xml";

String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";

CascadeClassifier face_cascade;

CascadeClassifier eyes_cascade;

 

具体来说通过load函数来导入.xml分类器文件,支持两种类型的分类器:Haar 分类器和 LBP 分类器。通过detectMultiScale函数来实施目标的识别。

 

具体的识别操作过程如下:

Load 分类器  ——  face_cascade.load

读取视频数据  ——  cvCaptureFromCAM

处理识别一帧数据  ——  detectAndDisplay( frame )

 

 

在实际应用中,我们需要自己定义所待识别的目标对象,如卡片图形、各类水果、常见物品等。重新训练过程按照标准的模式识别流程进行,包括以下步骤:

数据准备:目标对象的图像(足够的数量,包含各种光照姿态条件);非目标对象的图像(足够的数量,包含常见的各场景背景)。

图像读取和增强(见上文的光照均衡、图像降噪算法)

特征提取(在OpenCV例子中可以采用Haar特征

模型训练(即CascadeClassifier检测器的重训练)

 

 

具体的重训练操作过程如下(参见OpenCV User Guide

 

我们可以使用这两个工具进行重训练:opencv_traincascade 或者 opencv_haartraining。推荐使用前者,其为包含了Haar特征和LBP特征的更新版本。

 

第一步,通用参数设定:

 

• -data <cascade_dir_name>

保存训练好的分类器的路径。

 

• -vec <vec_file_name>

保存正性样本的文件,可以使用opencv_createsamples生成。

 

• -bg <background_file_name>

背景描述文件

 

• -numPos <number_of_positive_samples>

• -numNeg <number_of_negative_samples>

训练中的正性和负性样本数量

 

• -numStages <number_of_stages>

需要训练的分类器的级联阶数。

 

 

第二步,与分类器级联结构有关的参数:

• -stageType <BOOST(default)>

仅支持Boost分类器类型

 

• -featureType<{HAAR(default), LBP}>

特征类型: HAAR - Haar特征,LBP - local binary patterns特征。

 

• -w <sampleWidth>

• -h <sampleHeight>

训练样本尺寸

 

 

第三步,Boosted分类器参数:

• -bt <{DAB, RAB, LB, GAB(default)}>

各种boosted算法类型选择: DAB - Discrete AdaBoost, RAB - Real AdaBoost, LB - LogitBoost, GAB

- Gentle AdaBoost.

 

• -minHitRate <min_hit_rate>

各阶分类器最小命中率

 

• -maxFalseAlarmRate <max_false_alarm_rate>

各阶分类器最大期望的false alarm rate

 

其他与算法有关的具体参数设定(略)。

 

第四步,Haar特征参数设定:

• -mode <BASIC (default) | CORE | ALL>

选择特征类型:BASIC 为正面特征, ALL 为包含45Rotation特征。 

 

 

注:若使用Local Binary PatternsLBP)特征,无需额外参数设定。

 


 

第五步,opencv_traincascade训练。结果保存在 cascade.xml 中,路径由前面 -data 指定

0 0
原创粉丝点击