OpenCV实战 | 八种目标跟踪算法

电脑杂谈  发布时间:2020-02-14 10:01:14  来源:网络整理

opencv车辆识别模型_opencv python 识别_opencv目标识别程序

2018-8-6 10:36|发布者: 炼数成金_小数|查看: 34245|评论: 0|原作者: Adrian Rosebrock|来自: CVer

摘要: 虽然我们了解的的质心追踪器表现得很高,但它必须我们在输入的视频上的每一帧运行一个目标探测器。对大多数环境来说,在每帧上进行测试比较浪费计算力。所以,我们想应用一种一次性的目标评估方式,然后在随后的帧上 ...

网络工具模型算法OpenCV

虽然我们了解的的质心追踪器表现得很高,但它必须我们在输入的视频上的每一帧运行一个目标探测器。对大多数环境来说,在每帧上进行测试比较消耗计算力。

所以,我们想应用一种一次性的目标评估方式,然后在随后的帧上都可进行目标追踪,使这一任务变得迅速、更高效。

这里的难题是:OpenCV可给我们超过这些目标追踪的目的吗?

答案是显然的。

OpenCV目标追踪

首先,我们会大概介绍八种建立在OpenCV上的目标跟踪算法。之后我会讲解怎样运用这种算法进行即时目标跟踪。最后,我们会非常各个OpenCV目标追踪的效果,总结各种方式才能适应的环境。

八种OpenCV目标追踪安装

无人机拍摄的视频,用MedianFlow进行目标追踪

你可能会惊讶OpenCV竟然有八种不同的目标追踪软件,他们都可以利用到计算机视觉领域中。

这八种工具比如:

BOOSTING Tracker:和Haar cascades(AdaBoost)背后所用的机器学习算法相同,但是距其问世已有十多年了。这一追踪器速度较慢,并且体现不好,但是成为大佬还是有必要提及的。(较低支持OpenCV 3.0.0)

MIL Tracker:比上一个追踪器更较准确,但是失败率比较高。(较低支持OpenCV 3.0.0)

KCF Tracker:比BOOSTING和MIL都快,但是在有遮挡的状况下体现不佳。(较低支持OpenCV 3.1.0)

CSRT Tracker:比KCF稍较准确,但速度不如后者。(较低支持OpenCV 3.4.2)

opencv目标识别程序_opencv车辆识别模型_opencv python 识别

MedianFlow Tracker:在报错方面体现得很高,但是针对迅速跳动或急速移动的物体,模型会失效。(较低支持OpenCV 3.0.0)

TLD Tracker:我不确定是不是OpenCV和TLD有哪些不兼容的弊端,但是TLD的误报非常多,所以不推荐。(较低支持OpenCV 3.0.0)

MOSSE Tracker:速度实在快,但是不如CSRT和KCF的准确率那么高,如果追求速度选它准没错。(较低支持OpenCV 3.4.1)

GOTURN Tracker:这是OpenCV中一深度学习为基础的目标检测器。它必须额外的模型能够运行,本文不具体讲解。(较低支持OpenCV 3.2.0)

我个人的建议:

如果追求高准确度,又可忍受慢一些的速度,那么就用CSRT

如果对准确度的规定不严格,想追求速度,那么就选KCF

纯粹想节省时间就用MOSSE

从OpenCV 3开始,目标检测器得到了迅速发展,下表总结了不同版本的OpenCV中能食用的追踪器:

开始动手

想要用OpenCV进行目标追踪,首先开启一个新文件,将它命名为opencv_object_tracker.py,然后插入以下代码:

我们开始输入需要的安装包,确保你终于安装了OpenCV(我推荐3.4以上的版本),其次你应安装imutils:

输入安装包后,我们开始分析命令行参数:

我们的命令行参数包括:

opencv目标识别程序_opencv车辆识别模型_opencv python 识别

--video:到达输入视频文件的代替路线。如果该参数失效,那么脚本将会使用你的网络。

--tracker:假设默认追踪器设置的是kcf,一整列可能的追踪器代码表示下一个代码块或下方的个别。

让我们处理追踪器的不同类别:

图2中我们看到,并不是所有追踪器都使用OpenCV 3以上的版本。在3.3版本上,同样出现了安装上的差异,在3.3之前,追踪器必须用cv2. Tracker_create创造,并且要在追踪器的名字上用小写字符串标注(22和23行)。

对于3.3以上的版本,每个追踪器可以用各自的变量创造,如cv2. TrackerKCF_create。词典OPENCV_OBJECT_TRACKERS包含了7种OpenCV的目标追踪器(30—38行)。它将目标追踪器的命令行参数字符串映射到实际的OpenCV追踪器函数上。

其中42行里的tracker目的是按照追踪器命令行参数以及从OPENCV_OBJECT_TRACKERS得来的相关重要信息。

注意:这里我没有将GOTURN加入至追踪器设置中由于它还必须额外的模型文件。

我们还对initBB进行初始化(46行),当我们用鼠标选中目标物体时,该变量会显示目标物体的界限框坐标。

接下来,让我们对视频流和FPS进行初始化:

49—52行是访问网络的方法,这里我们设置一个一秒钟的暂停时间,好令传感器进行“热身”。

接着--video命令行参数会出现,所以我们可以从视频文件中对视频流进行初始化(55—56行)。

下面是从视频流中进行帧数迭代循环的流程:

在65和66行中我们提取一个frame,同时在69和70行处理视频文件中没有帧数的状况。

为了使我们的算法处理帧数的速率很快,我们用resize将输入的视频帧调整为50像素(74行),这里处理的数据越少,速度才会越快。

之后,我们提取视频帧的长度跟高度,之后我们会用到高度(75行)。

opencv车辆识别模型_opencv python 识别_opencv目标识别程序

目标物体选定以后,我们就可以用下面代码进行处理:

如果目标物体已经被选定,我们必须不断更新目标物体的位置,为了做到这一点,我们在80行使用update方法,它会定位目标物体的新位置以及返回一个success和box值。

如果顺利的话,我们可以在frame中受到更新后的边界框位置。注意,追踪器可能会跟丢目标物并且报错,所以success可能不会一直是True。接着更新FPS估计器。

接着,让我们展现一下frame,以及用鼠标选取目标物体:

我们将展现frame,并且再次迭代循环,键入其他指令能够停止。

当输入“s”后,我们用cv2.selectROI“选择”一个目标ROI。这一函数可以使你在视频暂停的之后自动选择一个ROI:

用户需要画出边界框后按回车或空格键来确认所选区域。如果你必须再次选择,就按“ESCAPE”键。

同样,我们能够用真实的目标探测器来进行自动选择。

最后,如果视频有更多的帧,或者发生了“quit”的状况,如何退出这一循环:

最后一个模块展示了我们怎么停止循环,这时所有的指标都输出以及窗口关闭。

目标追踪结果

提示:为了保证你跟上本文的进度,并且用到了文章中的OpenCV方法,请先保证你在“下载资料”中下载了代码跟视频。

之后,打开一个终端并执行下面命令:

opencv目标识别程序_opencv python 识别_opencv车辆识别模型

如果你下载了本教程的源代码和视频,那么--video的只用参数在下面文件中:

american_pharoah.mp4

dashcam_boston.mp4

drone.mp4

nascar_01.mp4

nascar_02.mp4

race.mp4

……

--tracker中的参数在:

boosting

medianflow

mosse

你也可以用计算机的:

总结

这篇文章讲解了怎样用OpenCV进行目标物体追踪。具体来说opencv目标识别程序opencv目标识别程序,我们解读了库里的八种算法:

Boosting

MedianFlow

MOSSE

GOTURN

我们可以将OpenCV的这八种追踪器用于不同的任务,包括田径赛事、赛马、赛车、无人机追踪等高速视频上。如必须文中的代码跟视频,请点击下方原文地址获取。

原文地址:


本文来自电脑杂谈,转载请注明本文网址:
http://xinshanjie.com/a/jisuanjixue/article-140723-1.html

    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...