多目标追踪opencv项目实战(对视频处理+鼠标交互+python实现+原理+实验报告)

资源:多目标追踪opencv项目实战(对视频处理+鼠标交互+python实现+原理+实验报告)

实现效果:

在这里插入图片描述
蓝色框框为正在选取目标,绿色的为已经选取的目标。
按s进行鼠标选目标,按空格键继续

执行步骤:

  1. 在终端cd进入multi-object-tracking文件夹;
  2. 运行指令 python multi_object_tracking.py --video videos/soccer_01.mp4 --tracker kcf
  3. 注意opencv版本3.3及以上;
  4. 按s可以通过鼠标进行追踪目标选取
  5. 利用鼠标框出目标后,按空格键继续视频
  6. video和tracker参数可以自己修改,现在使用的tracker追踪算法为kcf;

可供选择的算法参数:

  • “csrt”: cv2.TrackerCSRT_create,
  • “kcf”: cv2.TrackerKCF_create,
  • “boosting”: cv2.TrackerBoosting_create,
  • “mil”: cv2.TrackerMIL_create,
  • “tld”: cv2.TrackerTLD_create,
  • “medianflow”:cv2.TrackerMedianFlow_create,
  • “mosse”: cv2.TrackerMOSSE_create

相关原理:

KCF全称为KernelCorrelation Filter 核相关滤波算法。相关滤波算法算是判别式跟踪,主要是通过核相关滤波器使用给出的样本去训练一个判别分类器,判断跟踪到的是目标还是周围的背景信息。主要使用轮转矩阵对样本进行采集,使用快速傅里叶变化对算法进行加速计算。

相关滤波器是根据之前的MOSSE算法改进的,可以说是后来CSK、STC、Color Attributes等tracker的鼻祖。Correlation Filter(以下简称CF)源于信号处理领域,后被运用于图像分类等方面。而Correlation Filter应用于tracking方面最朴素的想法就是:相关是衡量两个信号相似值的度量,如果两个信号越相似,那么其相关值就越高,而在tracking的应用里,就是需要设计一个滤波模板,使得当它作用在跟踪目标上时,得到的响应最大,最大响应值的位置就是目标的位置。

在跟踪的过程中,我们只需要把以上模板与当前帧的图像作相关操作,将得到的响应结果中最大的那点对应坐标作为目标在当前帧位置就可以了(相当于在2维上平移我们的模板)。然后,模板的更新方式可以按照如下的方式进行:
H t = ( 1 − η ) H t − 1 + η H ( t ) H_t=\left( 1-\eta \right) H_{t-1}+\eta H\left( t \right) Ht=(1η)Ht1+ηH(t)
KCF算法执行流程:
1.在第一帧中通过HOG检测得到目标图像,循环矩阵对样本进行处理,得到大量的虚拟样本,通过这些样本训练分类器,而这些大量的虚拟样本的计算可以得益于循环矩阵的快速计算而得到迅速的处理。
2.相关滤波,就是寻找两幅图片的相关性,通过大量的样本学习得到一个模板,也就是数字信号处理中的冲激响应,然后,以下一帧图片作为输入,寻找输出中相应最大的点即为最相似的点,也就是新目标的位置。
3.在创建模板的相关滤波的算法中,用到了核函数(其实就是数学上的最小二乘法的一种应用,得到一个函数用来处理数据,使得训练的模板与实际值之间的差值最小),通过找到能使显示输出的目标位置与理想目标位置之间的误差最小的核函数,在该算法中用到的是岭回归函数,训练的目的就是去找到这样一个函数使得误差最小,然后带入输入,求其极值即可得到新的目标位置。

代码步骤及部分代码:

1. 导入库
import argparse
import cv2
2. 配置参数
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", type=str,
   help="path to input video file")
ap.add_argument("-t", "--tracker", type=str, default="kcf",
   help="OpenCV object tracker type")
args = vars(ap.parse_args())
3. opencv已经实现了的追踪算法
OPENCV_OBJECT_TRACKERS = {
    
    
   "csrt": cv2.TrackerCSRT_create,
   "kcf": cv2.TrackerKCF_create,
   "boosting": cv2.TrackerBoosting_create,
   "mil": cv2.TrackerMIL_create,
   "tld": cv2.TrackerTLD_create,
   "medianflow": cv2.TrackerMedianFlow_create,
   "mosse": cv2.TrackerMOSSE_create
}
4. 实例化
5. 视频流
   # 取当前帧
   # 到头了就结束
   # resize每一帧
   # 追踪结果
   # 绘制区域

完整代码及实验报告见:
多目标追踪opencv项目实战(对视频处理+鼠标交互+python实现+原理+实验报告)

猜你喜欢

转载自blog.csdn.net/m0_46384757/article/details/125672997