AI个人学习
和实操指南
TRAE

Trackers:用于视频对象跟踪的开源工具库

综合介绍

Trackers 是一个开源的 Python 工具库,专注于视频中的多对象跟踪。它集成了多种领先的跟踪算法,如 SORT 和 DeepSORT,允许用户结合不同的对象检测模型(如 YOLO、RT-DETR)进行灵活的视频分析。用户可以通过简单的代码实现视频帧的检测、跟踪和标注,适用于交通监控、工业自动化等场景。

Trackers:用于视频对象跟踪的开源工具库-1


 

功能列表

  • 支持多种跟踪算法,包括 SORT 和 DeepSORT,未来计划增加更多算法。
  • 兼容主流对象检测模型,如 YOLO、RT-DETR 和 RFDETR。
  • 提供视频帧标注功能,支持显示跟踪 ID 和边界框。
  • 模块化设计,允许用户自由组合检测器和跟踪器。
  • 支持从视频文件或实时视频流中处理帧。
  • 开源免费,基于 Apache 2.0 许可证,代码公开透明。

 

使用帮助

安装流程

要使用 Trackers,需要在 Python 环境中安装相关依赖。以下是详细的安装步骤:

  1. 准备环境
    确保系统已安装 Python 3.6 或以上版本。推荐使用虚拟环境以避免依赖冲突:

    python -m venv venv
    source venv/bin/activate  # Windows 用户使用 venv\Scripts\activate
    
  2. 安装 Trackers 库
    可以从 GitHub 安装最新版本:

    pip install git+https://github.com/roboflow/trackers.git
    

    或者安装已发布的稳定版本:

    pip install trackers
    
  3. 安装依赖库
    Trackers 依赖 supervisiontorch 和其他库。根据使用的检测模型,可能需要额外安装:

    • 对于 YOLO 模型:
      pip install ultralytics
      
    • 对于 RT-DETR 模型:
      pip install transformers
      
    • 确保安装 opencv-python 用于视频处理:
      pip install opencv-python
      
  4. 验证安装
    运行以下代码检查是否安装成功:

    from trackers import SORTTracker
    print(SORTTracker)
    

使用方法

Trackers 的核心功能是通过对象检测和跟踪算法处理视频帧。以下是使用 SORTTracker 结合 YOLO 模型的详细操作流程:

示例:使用 YOLO 和 SORTTracker 进行视频对象跟踪

  1. 准备视频文件
    确保有一个输入视频文件,例如 input.mp4。将其放置在项目目录下。
  2. 编写代码
    以下是一个完整的示例代码,用于加载 YOLO 模型,跟踪视频中的对象,并在输出视频中标注跟踪 ID:

    import supervision as sv
    from trackers import SORTTracker
    from ultralytics import YOLO
    # 初始化跟踪器和模型
    tracker = SORTTracker()
    model = YOLO("yolo11m.pt")
    annotator = sv.LabelAnnotator(text_position=sv.Position.CENTER)
    # 定义回调函数处理每帧
    def callback(frame, _):
    result = model(frame)[0]
    detections = sv.Detections.from_ultralytics(result)
    detections = tracker.update(detections)
    return annotator.annotate(frame, detections, labels=detections.tracker_id)
    # 处理视频
    sv.process_video(
    source_path="input.mp4",
    target_path="output.mp4",
    callback=callback
    )
    

    代码说明

    • YOLO("yolo11m.pt") 加载预训练的 YOLO11 模型。
    • SORTTracker() 初始化 SORT 跟踪器。
    • sv.Detections.from_ultralytics 将 YOLO 的检测结果转换为 Supervision 格式。
    • tracker.update(detections) 更新跟踪状态,分配跟踪 ID。
    • annotator.annotate 在帧上绘制边界框和 ID。
    • sv.process_video 逐帧处理视频并保存结果。
  3. 运行代码
    将代码保存为 track.py,然后运行:

    python track.py
    

    输出视频 output.mp4 将包含带有跟踪 ID 的标注。

特色功能操作

  • 切换检测模型
    Trackers 支持多种检测模型。例如,使用 RT-DETR 模型:

    import torch
    from transformers import RTDetrV2ForObjectDetection, RTDetrImageProcessor
    tracker = SORTTracker()
    processor = RTDetrImageProcessor.from_pretrained("PekingU/rtdetr_v2_r18vd")
    model = RTDetrV2ForObjectDetection.from_pretrained("PekingU/rtdetr_v2_r18vd")
    annotator = sv.LabelAnnotator()
    def callback(frame, _):
    inputs = processor(images=frame, return_tensors="pt")
    with torch.no_grad():
    outputs = model(**inputs)
    h, w, _ = frame.shape
    results = processor.post_process_object_detection(
    outputs, target_sizes=torch.tensor([(h, w)]), threshold=0.5
    )[0]
    detections = sv.Detections.from_transformers(results, id2label=model.config.id2label)
    detections = tracker.update(detections)
    return annotator.annotate(frame, detections, labels=detections.tracker_id)
    sv.process_video(source_path="input.mp4", target_path="output.mp4", callback=callback)
    
  • 自定义标注
    可以调整标注样式,例如更改标签位置或添加边界框:

    annotator = sv.LabelAnnotator(text_position=sv.Position.TOP_LEFT)
    box_annotator = sv.BoundingBoxAnnotator()
    def callback(frame, _):
    result = model(frame)[0]
    detections = sv.Detections.from_ultralytics(result)
    detections = tracker.update(detections)
    frame = box_annotator.annotate(frame, detections)
    return annotator.annotate(frame, detections, labels=detections.tracker_id)
    
  • 处理实时视频流
    如果需要处理摄像头输入,可以修改代码:

    import cv2
    cap = cv2.VideoCapture(0)  # 打开默认摄像头
    while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
    break
    annotated_frame = callback(frame, None)
    cv2.imshow("Tracking", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
    break
    cap.release()
    cv2.destroyAllWindows()
    

注意事项

  • 性能优化:处理长视频可能导致内存占用高。可以通过设置环境变量限制缓冲区大小:
    export VIDEO_SOURCE_BUFFER_SIZE=2
    
  • 模型选择:确保检测模型与跟踪器兼容,YOLO 和 RT-DETR 是推荐选项。
  • 调试:如果跟踪 ID 频繁切换,尝试调整检测模型的置信度阈值或跟踪器的参数,如 track_buffer

 

应用场景

  1. 交通监控
    Trackers 可用于分析道路上的车辆和行人轨迹。例如,在城市交通摄像头中,结合 YOLO 检测车辆,SORTTracker 跟踪每辆车的路径,生成流量统计或违章记录。
  2. 工业自动化
    在生产线上,Trackers 可跟踪移动的物体,如传送带上的产品。结合检测模型识别产品类型,跟踪器记录每个产品的移动路径,用于质量控制或库存管理。
  3. 运动分析
    在体育视频中,Trackers 可跟踪运动员或球的运动轨迹。例如,分析足球比赛中球员的跑动路径,生成热力图或统计数据。
  4. 安全监控
    在安防系统中,Trackers 可跟踪可疑目标的移动。例如,在商场摄像头中,检测并跟踪特定人员,记录其活动路径以便后续分析。

 

QA

  1. Trackers 支持哪些跟踪算法?
    当前支持 SORT 和 DeepSORT,未来版本计划增加更多算法,如 ByteTrack。
  2. 如何提高跟踪的稳定性?
    确保检测模型的准确性,调整置信度阈值(例如 0.5),或增加跟踪器的 track_buffer 参数以减少 ID 切换。
  3. 是否支持实时视频处理?
    是的,Trackers 支持实时视频流,如摄像头输入。需要使用 OpenCV 捕获帧并逐帧处理。
  4. 如何处理内存溢出问题?
    设置环境变量 VIDEO_SOURCE_BUFFER_SIZE=2 限制帧缓冲,或使用更轻量级的模型如 YOLO11n。
未经允许不得转载:首席AI分享圈 » Trackers:用于视频对象跟踪的开源工具库
zh_CN简体中文