Python OpenCV使用带背景减法的 Haar 级联分类器的车辆和行人实时检测和分类

本文详细介绍了如何利用OpenCV库和Haar特征进行行人检测。首先,通过背景减法(如MOG2)进行预处理,然后收集正负样本图像,创建XML文件。接着,使用Haar训练工具进行特征训练,生成级联分类器。最后,通过级联分类器检测视频帧中的行人,并展示检测结果。整个过程包括图像预处理、特征训练、分类器创建和物体检测四个步骤。
摘要由CSDN通过智能技术生成

所提出系统的检测阶段主要是在输入图像上移动目标大小的窗口,并为图像的每个子部分计算类 Haar 特征。然后将此差异与将非对象与对象分开的学习阈值进行比较。

这种方法的最大优点是计算速度。由于使用  积分图像可以快速有效地生成网格的矩形子集中的值的总和,因此可以在恒定时间内计算出任何大小的类 Haar 特征(对于 2 个矩形特征大约需要 60 条微处理器指令) )。

1 显示了一个示例视频的单帧。该图像包含行人作为对象。图 2 是使用 MOG2 背景减法后的输出快照。行人下方的灰色部分代表人的影子。

  1 视频样本帧

作为提高性能的预处理步骤,在   OpenCV 库函数的帮助下使用 MOG2 执行背景减法。用于行人检测的 MOG2 减法结果如图 2 所示。

 

2 背景扣除后的结果

接下来,我们创建要检测的各种对象(目标对象)的 XML 文件,即公共汽车、汽车、双轮车和行人各有一个 XML 文件。参与创建的步骤

XML文件如下所示

 

涉及的各种过程的流程图

为了实现上述步骤,我们使用了一种称为 Haar 训练工具的特殊工具。该工具由用于创建 XML 文件的各种文件和文件夹组成,如下图所示。

 

1 步:正负图像集的收集 

对于正图像数据集,一些图像是从视频中手动裁剪出来的,其余图像是从互联网上下载的。负片图像通过 ImageNet 下载并进行灰度处理,因为与彩色图像相比,这些图像的处理速度和性能既高又简单。然后将所有负图像放置在名为负的文件夹中,然后将所有正图像放置在训练工具文件夹的正文件夹中名为 rawdata 的文件夹中。

 

公共汽车、汽车、行人和两轮车的正面形象

 

放置在负片文件夹中的灰度负片图像

正图像是包含目标对象的图像,负图像是没有目标对象的图像。

2 步:创建 info.txtbg.txt Vector 文件

 在这一步中,我们转到否定文件夹并单击批处理文件-create_list.bat。这反过来会创建一个文件 bg.txt,其中包含如下所示的负面图像的名称列表

 

接下来,我们创建 info.txt 文件,该文件告诉我们正图像中对象的确切位置、对象的数量、其 x 坐标、y 坐标等。为此,我们使用一个工具

称为 objectmarker.exe

 

 使用对象标记工具,我们在原始数据文件夹中给出的每个正图像中标记对象,方法是使用矩形框包围对象,然后按 <space>。如果我们在同一图像中有另一个对象,那么我们选择该对象并按 <space>。选择所有对象后,我们按 <enter> 键转到下一张图像。然后在 objectmarker.exe 中显示有关图像中检测到的对象的一行详细信息,如下图所示。

 

在对 rawdata 文件夹中的所有图像执行上述过程后,objectmarker 工具将关闭并创建一个名为 info.txt 的文件,如下所示,其中提供了有关正图像和在其中检测到的对象的详细信息。

 

  例如,  info.txt 中的“rawdata/a1.bmp 1 32 97 236 236”行表示名为“a1.bmp”的正图像存储在路径“rawdata/a1.bmp”  1个对象它,放置在给定的位置:

x 坐标 = 32y 坐标 = 97,宽度 = 236,高度 = 236

接下来,我们为正图像创建了矢量文件。在    文件夹 ..\training\ 中有一个名为 samples_creation 的批处理文件。蝙蝠。Bath 文件的内容如下所示。createsamples.exe -info positive/info.txt

 –vec 向量/objectvector.vec –num 200 -w 24 -h 24

主要参数:

-info positive/info.txt正信息文件的路径           

-vec vector/objectvector.vec   输出矢量文件的路径

-num 200 要处理                             的正文件数 

打包成矢量文件

-w 24对象的宽度                                    

-h 24对象的高度                                      

这个批处理文件加载 info.txt 并将对象图像打包成一个矢量文件,名称为例如 objectvector.vec 。运行批处理文件后,我们将在文件夹..\training\vector 中得到文件objectvector.vec

4 步:训练 Haar 分类器

   这个  步骤中,  我们   点击    haartraining.exe  文件  ,其开始     哈尔  分类  培训。在  下面的   东西  已经在haarTraining.bat文件中设置。

 

bat 文件用于定义矢量文件的位置、负文件、使用的正负图像的数量 - 此处均为 200,分配给该训练程序的内存(以 MB 为单位)-此处为 4096MB、宽度和样本图像的高度 - 此处为 24,此处为 20 的训练阶段数。此处 - 数据级联表示路径并用于存储分类器的级联。

 

   使用haartraining.exe 时会出现上述屏幕。这里

父节点:  定义当前训练过程中的阶段

N:本阶段使用的特征数                  

%SMP:样本百分比(用于此功能的样本百分比)      

F“+”如果翻转(应用对称时)和“-                    

”  如果不是

ST.THR        阶段阈值

HR:基于阶段阈值的命中率               

FA:基于阶段阈值的误报                

经验值 ERR:强分类器的指数误差            

训练师在第10阶段的图像如下所示。在这里,我们观察到整体错误检测/警报(FA)已经减少,使用的特征没有增加,训练所需的时间也随着阶段的增加而增加。

 

5 步:创建 XML 文件

 上述过程结束后,cascades 文件夹加载了 0 N-1 个文件夹,其中 N 是我们在 haarTraining.bat 文件中输入的阶段数。每个文件夹都包含一个名为 AdaBoostCARTHaarClassifier.txt 的文件。现在我们将所有这些文件夹复制到cascade2xml/data文件夹,如下所示。

 

现在我们应该将所有创建的阶段(分类器)合并到一个 XML 文件中,这将是我们的最终文件,即 Haar 分类器的级联。然后我们将convert.bat 文件设置为要创建的xml 文件的名称、宽度和高度。然后我们通过单击 haarconv.exe 创建 XML 文件。之后我们将得到如下所示的 myobjectdetector.xml 文件。

 

同样,我们为汽车、行人、两轮车等创建 XML 文件。

  生成的XML文件,然后与级联分类器的命令处理的OpenCV,然后将每个帧被转换成灰度级作为彩色帧  降低了处理速度。

下一步涉及到  detectMultiScale完成的物体检测,该命令的重要参数是比例因子,它在避免误检和漏检方面起着重要作用。尝试了各种比例因子的值,并为每个汽车、公共汽车、两轮车和行人检测选择最合适的一个,因此在检测到的对象上绘制矩形。

使用用于检测公共汽车、汽车、行人和两轮车等物体的各种 xml 文件后获得的结果示例图像如下所示。

 

总线检测

 

汽车检测

 

两轮车检测

 

  行人检测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值