0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV上八种不同的目标追踪算法

zhKF_jqr_AI 来源:未知 作者:李倩 2018-08-05 09:03 次阅读

编者按:目标跟踪作为机器学习的一个重要分支,加之其在日常生活、军事行动中的广泛应用,很多国内外学者都对此颇有研究。本文将讨论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)

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:

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

我们的命令行参数包括:

--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行)。

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

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

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

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

我们将展示frame,并且继续迭代循环,键入其他指令才会停止。

当键入“s”后,我们用cv2.selectROI“选择”一个目标ROI。这一函数可以让你在视频暂停的时候手动选择一个ROI:

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

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

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

最后一个模块展示了我们如何停止循环,这时所有的指标都输出并且窗口关闭。

目标追踪结果

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

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

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

american_pharoah.mp4

dashcam_boston.mp4

drone.mp4

nascar_01.mp4

nascar_02.mp4

race.mp4

……

--tracker中的参数在:

csrt

kcf

boosting

mil

tld

medianflow

mosse

你也可以用计算机的摄像头:

下面的实例会展示OpenCV的追踪器如何在较长一段时间中进行追踪,以及与短时间片段进行对比:

总结

这篇文章讲解了如何用OpenCV进行目标物体追踪。具体来说,我们回顾了库里的八种算法:

CSRF

KCF

Boosting

MIL

TLD

MedianFlow

MOSSE

GOTURN

我们可以将OpenCV的这八种追踪器用于不同的任务,包括短跑比赛、赛马、赛车、无人机追踪等高速视频上。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8061

    浏览量

    130439
  • 追踪算法
    +关注

    关注

    2

    文章

    8

    浏览量

    7600
  • OpenCV
    +关注

    关注

    29

    文章

    609

    浏览量

    40710

原文标题:用OpenCV实现八种不同的目标跟踪算法

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    仿人足球机器人目标定位技术与追踪算法改进

    移动机器人视觉的研究主要集中在颜色模型建立、目标识别、定位以及跟踪等方面。目标的实时识别与定位是足球机器人在足球赛中精确踢球的前提。文章主要是针对目前足球机器人在视觉系统上所存在的问题进行了颜色模型建立及目标定位
    发表于 09-19 11:18 2519次阅读

    基于OPENCV的运动目标跟踪实现

    CAMSHIFT算法是一基于颜色直方图的目标跟踪算法。在视频跟踪过程中,CAMSHIFT算法利用选定
    发表于 12-23 14:21

    基于FPGA的实时移动目标追踪

    边界查找将结果显示到lcd显示屏。 图2 基于FPGA的移动目标追踪系统FPGA部分源码:结果展示:图3 实验图1图4 实验图2 图5 对6的边界追踪图6 对圆的边界跟踪图7 对菱形
    发表于 08-10 09:15

    基于QT+OpenCv目标跟踪算法实现

    目标跟踪算法作为一有着非常广泛的应用的算法,在航空航天、智能交通、智能设备等领域有着非常广泛的应用。本系列博客将教大家在410c开发板
    发表于 09-21 10:42

    四旋翼飞行器追踪地面移动目标控制策略研究

    获取实时灾情;对快速移动的物体进行拍摄,以获取可靠的影视资料等,均涉及飞行器对地面移动目标追踪。李永健等人给出了采用OpenCV处理图像获取反馈信号的方案[2],但OpenCV运行需
    发表于 12-03 19:35

    【方案分享】基于C6678+Zynq-7045 的目标追踪视觉技术

    GFLOP,算法能力强,满足目标追踪算法要求。ZYNQ Z-7045/7100集成PS端双核ARM Cortex-A9 + PL端Kintex-7架构28nm可编程逻辑资源,ARM主
    发表于 05-19 17:10

    什么是纯追踪算法

    什么是纯追踪算法
    发表于 11-22 06:08

    openCV的库自带了模板匹配算法吗?

    openCV的库自带了模板匹配算法
    发表于 10-10 06:48

    追踪_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:点追踪
    发表于 06-06 15:39 4次下载

    OpenCV3编程入门-源码例程全集-点追踪

    OpenCV3编程入门-源码例程全集-点追踪
    发表于 09-18 16:38 0次下载

    QT+Opencv粒子滤波算法实现视频目标跟踪——(三)QT环境安装及配置

    在QT+OpenCV实现在410c开发板上实现视频目标追踪预研系列内容呢的前面两个博客中已经对目标跟踪算法的选择进行了介绍,确定了使用粒子滤
    发表于 02-23 10:33 2891次阅读

    QT+Opencv粒子滤波算法实现视频目标跟踪——如何选择跟踪算法

    目标跟踪算法作为一种有着非常广泛的应用的算法,在航空航天、智能交通、智能设备等领域有着非常广泛的应用。本系列博客将教大家在410c开发板上基于linux操作系统环境,采用QT+Opencv
    发表于 02-27 10:32 5150次阅读
    QT+<b class='flag-5'>Opencv</b>粒子滤波<b class='flag-5'>算法</b>实现视频<b class='flag-5'>目标</b>跟踪——如何选择跟踪<b class='flag-5'>算法</b>

    基于OpenCv运动目标识别技术的研究孟介成

    基于OpenCv运动目标识别技术的研究_孟介成
    发表于 03-17 08:00 5次下载

    使用Adaboost算法实现车牌检测在OpenCV上实现的研究分析

    AdabtxⅪt是一个构建精确分类器的学习算法,在目标检测领域有着广泛的应用。OpenCV是Intel开源计算机视觉库。该文给出了在OpenCV上利用Adaboost
    发表于 09-27 17:49 7次下载
    使用Adaboost<b class='flag-5'>算法</b>实现车牌检测在<b class='flag-5'>OpenCV</b>上实现的研究分析

    OpenCV中八种不同的目标追踪算法

    分类器的任务是将图像的矩形区域分类为对象或背景。分类器接受图像区域作为输入,并返回介于0和1之间的分数,以指示图像区域包含对象的概率。如果确定图像区域是背景,则分数为0;如果确定区域是对象,则分数为1。
    的头像 发表于 03-30 10:22 797次阅读