目标跟踪(3)multitracker:基于opencv(c++/python)的多目标跟踪

author author     2023-03-10     339

关键词:

参考技术A

在这篇文章中,我们将介绍如何使用通过 MultiTracker 类实现的 OpenCV 的多对象跟踪 API。我们将共享C++ 和 Python 代码。


大多数计算机视觉和机器学习的初学者都学习对象检测。如果您是初学者,您可能会想为什么我们需要对象跟踪。我们不能只检测每一帧中的对象吗?

让我们来探究一下跟踪是有用的几个原因。

首先,当在视频帧中检测到多个对象(例如人)时,跟踪有助于跨帧建立对象的身份。

其次,在某些情况下,对象检测可能会失败,但仍可能跟踪对象,因为跟踪考虑了对象在前一帧中的位置和外观。

第三,一些跟踪算法非常快,因为它们做的是局部搜索,而不是全局搜索。因此,我们可以通过每n帧进行目标检测,并在中间帧中跟踪目标,从而为我们的系统获得很高的帧率。

那么,为什么不在第一次检测后无限期地跟踪对象呢?跟踪算法有时可能会丢失它正在跟踪的对象。例如,当对象的运动太大时,跟踪算法可能跟不上。许多现实世界的应用程序同时使用检测和跟踪。

在本教程中,我们只关注跟踪部分。我们想要跟踪的对象将通过拖动它们周围的包围框来指定。

OpenCV 中的 MultiTracker 类提供了多目标跟踪的实现。它是一个简单的实现,因为它独立处理跟踪对象,而不对跟踪对象进行任何优化。

让我们逐步查看代码,了解如何使用 OpenCV 的多目标跟踪 API。

2.1 第 1 步:创建单一对象跟踪器

多目标跟踪器只是单目标跟踪器的集合。我们首先定义一个函数,该函数接受一个跟踪器类型作为输入,并创建一个跟踪器对象。OpenCV有8种不同的跟踪器类型:BOOSTING, MIL, KCF,TLD, MEDIANFLOW, GOTURN, MOSSE, CSRT。

如果您想使用 GOTURN 跟踪器,请务必阅读这篇文章并下载 caffe 模型。

在下面的代码中,给定跟踪器类的名称,我们返回跟踪器对象。这将在稍后用于多目标跟踪器。

Python


C++


2.2 第 2 步:读取视频的第一帧

多目标跟踪器需要两个输入

给定这些信息,跟踪器在所有后续帧中跟踪这些指定对象的位置。 在下面的代码中,我们首先使用 VideoCapture 类加载视频并读取第一帧。这将在稍后用于初始化 MultiTracker。

Python


C++


2.3 第 3 步:在第一帧中定位对象

接下来,我们需要在第一帧中定位我们想要跟踪的对象。该位置只是一个边界框。 OpenCV 提供了一个名为 selectROI 的函数,该函数会弹出一个 GUI 来选择边界框(也称为感兴趣区域 (ROI))。 在 C++ 版本中,selectROI 允许您获取多个边界框,但在 Python 版本中,它只返回一个边界框。所以,在 Python 版本中,我们需要一个循环来获取多个边界框。 对于每个对象,我们还选择一种随机颜色来显示边界框。 代码如下所示。

Python


C++

getRandomColors 函数相当简单

2.4 第 3 步:初始化 MultiTracker

到目前为止,我们已经读取了第一帧并获得了对象周围的边界框。这就是我们初始化多目标跟踪器所需的所有信息。

我们首先创建一个 MultiTracker 对象,并向其中添加与边界框一样多的单个对象跟踪器。在此示例中,我们使用 CSRT 单对象跟踪器,但您可以通过将下面的 trackerType 变量更改为本文开头提到的 8 个跟踪器之一来尝试其他跟踪器类型。 CSRT 跟踪器不是最快的,但在我们尝试的许多情况下它产生了最好的结果。

您还可以使用包裹在同一个 MultiTracker 中的不同跟踪器,但当然,这没什么意义。

MultiTracker 类只是这些单个对象跟踪器的包装器。正如我们从上一篇文章中知道的那样,单个对象跟踪器是使用第一帧初始化的,并且边界框指示我们想要跟踪的对象的位置。 MultiTracker 将此信息传递给它在内部包装的单个对象跟踪器。

Python


C++


2.5 第 4 步:更新 MultiTracker 并显示结果

最后,我们的 MultiTracker 已准备就绪,我们可以在新帧中跟踪多个对象。我们使用 MultiTracker 类的 update 方法来定位新框架中的对象。每个跟踪对象的每个边界框都使用不同的颜色绘制。

Python


C++


C++


Python


国科大人工智能学院《计算机视觉》课—运动视觉—视觉跟踪(目标跟踪视觉定位)

一、视觉跟踪的前奏知识1.什么是跟踪:目标跟踪、相机跟踪2.目标跟踪的问题分类3.目标跟踪的应用:行为分析、虚拟现实、增强现实等二、目标跟踪:传统跟踪方法、基于神经网络的跟踪方法1.运动目标的表示方法&... 查看详情

基于物体颜色的目标检测与跟踪(代码片段)

...容(1)利用摄像头,根据物体颜色,实现目标检测(2)根据目标移动轨迹,绘制跟踪路径(3)参考 查看详情

[ai开发]基于深度学习的视频多目标跟踪实现

据我目前了解掌握,多目标跟踪大概有两种方式:Option1基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪。这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出现了新的物体... 查看详情

目标跟踪算法

参考技术A一般将目标跟踪分为两个部分:特征提取、目标跟踪算法。其中提取的目标特征大致可以分为以下几种:1)以目标区域的颜色直方图作为特征,颜色特征具有旋转不变性,且不受目标物大小和形状的变化影响,在颜色... 查看详情

基于二轴云台目标跟踪系统设计

文章目录前言机器学习之前的目标检测研究一、系统总览 上位机及其功能下位机及其功能二、基本方案设计 云台结构设计机器视觉运算需求分析三、目标识别算法与跟踪算法 运用HOG特征结合SVM的目标识别和跟踪算法改进的HOG... 查看详情

BitTorrent Multitracker 扩展会导致分裂群吗?

】BitTorrentMultitracker扩展会导致分裂群吗?【英文标题】:DoestheBitTorrentMultitrackerextensioncausesplitswarms?【发布时间】:2016-10-2215:36:11【问题描述】:WikipediapageofBitTorrent说关于Multitracker种子,“这样做的一个缺点是,一个种子可能有... 查看详情

目标跟踪基于kalman滤波跟踪视频运动目标matlab代码(代码片段)

...过帧差法对运动物体的识别,定位,利用卡尔曼滤波算法对目标运动进行预测,跟踪,从而控制摄像头转动,跟踪目标物,使目标物体始终出现监控画面的中心.在此采用卡尔曼滤算法,进行目标运动的预估,利用Matlab对其仿真.仿真结果显... 查看详情

目标跟踪文章翻译--基于主动特征选择的鲁棒目标跟踪

...类器可以把一个对象从局部背景中分离出来。利用从检测目标位置附近的当前帧中提取的正样本和负样本不断更新分类器。然而,如果检测不准确,样本可能提取的不太准确,从而导致视觉漂移。最近,基于跟踪的多实例学习(MI... 查看详情

目标跟踪检测算法(四)——多目标扩展

...出极大的优势。与行人重识别问题紧密相关的是行人的多目标跟踪问题。【嵌牛鼻子】深度多目标跟踪算法【嵌牛提问】深度多目标跟踪算法有哪些?【嵌牛正文】第一阶段(概率统计最大化的追踪)1)多假设多目标追踪算法... 查看详情

textopencv3_multitracking_sample(代码片段)

查看详情

基于特征点匹配的自适应目标跟踪算法

基于特征点匹配的自适应目标跟踪算法2016-01-2913:11摘要:由于实际场景复杂多变,目标在运动过程中往往会出现形变、遮挡等问题,增加了跟踪的难度。为了解决上述问题,提出一种基于特征点匹配的自适应目标... 查看详情

国科大人工智能学院《计算机视觉》课—运动视觉—视觉跟踪(目标跟踪视觉定位)

一、视觉跟踪的前奏知识1.什么是跟踪:目标跟踪、相机跟踪2.目标跟踪的问题分类3.目标跟踪的应用:行为分析、虚拟现实、增强现实等二、目标跟踪:传统跟踪方法、基于神经网络的跟踪方法1.运动目标的表示方法&... 查看详情

目标跟踪基于matlabkalman目标跟踪含matlab源码1119期(代码片段)

...以知道运动物体的位置,一个是我们观察到的,目标A在的某一帧图像的某个坐标点,另一个是我们根据前面几帧里目标的运动情况估计出来的,这个估计是假定目标运动是光滑的(当然也可以有其他模型)... 查看详情

deepsort

目标跟踪任务的难度和复杂度要比分类和目标检测高不少,具有更大的挑战性。目前主流的目标跟踪算法都是基于Tracking-by-Detection(检测加跟踪,使效果更稳定)策略,即基于目标检测的结果来进行目标跟踪。DeepSORT运用的就是这... 查看详情

论文盘点:基于图卷积gnn的多目标跟踪算法解析

论文盘点:基于图卷积GNN的多目标跟踪算法解析Source:PaperWeekly  [1]JiangX,LiP,LiY,etal.GraphNeuralBasedEnd-to-endDataAssociationFrameworkforOnlineMultiple-ObjectTracking[J].arXivpreprintarXiv:1907.05315,2019.&nb 查看详情

计算机视觉目标跟踪的算法分类

...基于区域的跟踪算法基于区域的跟踪算法基本思想是:将目标初始所在区域的图像块作为目标模板,将目标模板与候选图像中所有可能的位置进行相关匹配,匹配度最高的地方即为目标所在的位置。最常用的相关匹配准则是差的... 查看详情

运动对象检测和描述

运动图像检测基于背景减法目标跟踪,背景分割器:KNN、MOG2和GMGBasicmotiondetectionandtrackingwithPythonandOpenCV使用背景减除进行目标检测用OpenCV实现多目标追踪(C++/Python)通过形态学改善图像过滤,追踪人脸,检测前景/背景区域和深度... 查看详情

目标跟踪基于matlab光流法运动视频跟踪含matlab源码1357期

一、光流场简介1案例背景运动视觉研究的内容是如何从变化场景中的一系列不同时刻的图像中提取有关场景中物体的形状、位置和运动的信息。根据研究的方法,它可以分为两类:基于特征的方法和基于光流场的方法。基于特... 查看详情