YOLOv8/YOLOv11多目标追踪,并手把手教你实现目标追踪轨迹绘制和bytetrack参数解析


在这里插入图片描述


前言

视频分析领域的对象跟踪是一项关键任务,它不仅可以识别帧内对象的位置和类别,还可以在视频进行过程中为每个检测到的对象维护一个唯一的 ID。YOLOv8/YOLOv11跟踪器的输出与标准对象检测一致,但具有对象 ID 的附加值。这使得跟踪视频流中的对象并执行后续分析变得容易。官网的解释是:

  • 效率:实时处理视频流,而不会影响准确性。

  • 灵活性:支持多种跟踪算法和配置。

  • 易用性:用于快速集成和部署的简单 Python API 。

  • 可定制性:易于与经过自定义训练的 YOLO 模型一起使用,允许集成到特定领域的应用程序中。

官网的实际应用展示,如下所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实际应用:
在这里插入图片描述



🎓一、YOLOv8原始版本代码下载

官网的源码下载地址 : YOLOv8/YOLOv11官网代码

官网打不开的话,从我的网盘下载就行,网盘下载地址: YOLOv8原始版本源码下载,提取码: rpe7

注意注意注意:如果在我之前的文章下载过 YOLOv8 源码,不用重新下载了,没有特殊说明都是用同一个版本的源码

环境配置参考教程链接:链接: 环境配置链接如果已经配置好环境可以忽略此步骤


🎓二、多目标追踪并实现轨迹绘制代码

复制下面代码即可运行,运行效果如下:
在这里插入图片描述

from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO



if __name__ == '__main__':

    model = YOLO(model="yolov8n.pt")
    video_path = "car.mp4"
    cap = cv2.VideoCapture(video_path)
    track_history = defaultdict(lambda: [])

    while cap.isOpened():

        success, frame = cap.read()

        if success:
            results = model.track(frame, persist=True)

            boxes = results[0].boxes.xywh.cpu()
            track_ids = results[0].boxes.id.int().cpu().tolist()


            annotated_frame = results[0].plot()

            # Plot the tracks
            for box, track_id in zip(boxes, track_ids):
                x, y, w, h = box
                track = track_history[track_id]
                track.append((float(x), float(y)))  # x, y center point
                if len(track) > 20:  # retain 30 tracks for 30 frames
                    track.pop(0)


                points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
                cv2.polylines(annotated_frame, [points], isClosed=False, color=(0, 255, 0), thickness=2)


            cv2.imshow("YOLO Tracking", annotated_frame)


            if cv2.waitKey(1) & 0xFF == ord("q"):
                break
        else:
            break


    cap.release()
    cv2.destroyAllWindows()

代码需要修改的地方圈起来的部分,需要你去官网下载YOLOv8/YOLOv11模型,模型支持目标检测,实例分割等,video_path填你的视频文件路径
在这里插入图片描述

🎓三、多目标追踪整合到Web端

理解第二章代码即可在任意系统集成多目标追踪+踪轨迹绘制,如 PyQt5界面、Web界面等,作者实现效果如下:
在这里插入图片描述

YOLOv8/YOLOv11 原始推理代码使用 model.predict 方法如下:

model.predict(source=r'car.mp4',save=True,show=True)

多目标追踪推理使用 model.track 方法即可:

model.track(source=r'car.mp4', tracker="ultralytics/cfg/trackers/bytetrack.yaml", persist=True,show=True)

在这里插入图片描述

在这里插入图片描述
使用 ByteTrack 跟踪器进行目标跟踪,参数的解释:

  • tracker_type:指定跟踪器的类型,这里使用的是 bytetrack,bytetrack 是一种高效的多目标跟踪器。可以选择的类型包括 botsort 和bytetrack。
  • track_high_thresh: 第一轮关联的置信度阈值。检测框的置信度高于此值的目标会被用于初步关联跟踪。
  • track_low_thresh: 第二轮关联的置信度阈值。用于关联那些未能通过第一轮关联的低置信度检测框。如果检测框的置信度介于 track_low_thresh 和 track_high_thresh 之间,它们会被视为低置信度检测并尝试在第二轮关联中使用。
  • new_track_thresh: 用于初始化新跟踪目标的阈值。如果检测框在任何已有轨迹中都没有匹配,并且其置信度高于此值,则会创建一个新的跟踪目标。
  • track_buffer: 用于计算移除跟踪目标的时间缓冲。跟踪器会在失去目标一段时间(由该缓冲时间定义)后将其移除,以减少短暂丢失目标时的跟踪中断。
  • match_thresh: 用于匹配轨迹的阈值。轨迹之间的匹配度(如IoU或其他指标)必须超过此值才能视为匹配成功。

第二章代码是检测和在帧上显示对象的轨迹线,直接使用 track_history 来存储和绘制轨迹


总结

关注我,带你不挂科!!!
在这里插入图片描述

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挂科边缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值