综合介绍
Trackers 是一个开源的 Python 工具库,专注于视频中的多对象跟踪。它集成了多种领先的跟踪算法,如 SORT 和 DeepSORT,允许用户结合不同的对象检测模型(如 YOLO、RT-DETR)进行灵活的视频分析。用户可以通过简单的代码实现视频帧的检测、跟踪和标注,适用于交通监控、工业自动化等场景。
功能列表
- 支持多种跟踪算法,包括 SORT 和 DeepSORT,未来计划增加更多算法。
- 兼容主流对象检测模型,如 YOLO、RT-DETR 和 RFDETR。
- 提供视频帧标注功能,支持显示跟踪 ID 和边界框。
- 模块化设计,允许用户自由组合检测器和跟踪器。
- 支持从视频文件或实时视频流中处理帧。
- 开源免费,基于 Apache 2.0 许可证,代码公开透明。
使用帮助
安装流程
要使用 Trackers,需要在 Python 环境中安装相关依赖。以下是详细的安装步骤:
- 准备环境
确保系统已安装 Python 3.6 或以上版本。推荐使用虚拟环境以避免依赖冲突:python -m venv venv source venv/bin/activate # Windows 用户使用 venv\Scripts\activate
- 安装 Trackers 库
可以从 GitHub 安装最新版本:pip install git+https://github.com/roboflow/trackers.git
或者安装已发布的稳定版本:
pip install trackers
- 安装依赖库
Trackers 依赖supervision
、torch
和其他库。根据使用的检测模型,可能需要额外安装:- 对于 YOLO 模型:
pip install ultralytics
- 对于 RT-DETR 模型:
pip install transformers
- 确保安装
opencv-python
用于视频处理:pip install opencv-python
- 对于 YOLO 模型:
- 验证安装
运行以下代码检查是否安装成功:from trackers import SORTTracker print(SORTTracker)
使用方法
Trackers 的核心功能是通过对象检测和跟踪算法处理视频帧。以下是使用 SORTTracker 结合 YOLO 模型的详细操作流程:
示例:使用 YOLO 和 SORTTracker 进行视频对象跟踪
- 准备视频文件
确保有一个输入视频文件,例如input.mp4
。将其放置在项目目录下。 - 编写代码
以下是一个完整的示例代码,用于加载 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
逐帧处理视频并保存结果。
- 运行代码
将代码保存为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
。
应用场景
- 交通监控
Trackers 可用于分析道路上的车辆和行人轨迹。例如,在城市交通摄像头中,结合 YOLO 检测车辆,SORTTracker 跟踪每辆车的路径,生成流量统计或违章记录。 - 工业自动化
在生产线上,Trackers 可跟踪移动的物体,如传送带上的产品。结合检测模型识别产品类型,跟踪器记录每个产品的移动路径,用于质量控制或库存管理。 - 运动分析
在体育视频中,Trackers 可跟踪运动员或球的运动轨迹。例如,分析足球比赛中球员的跑动路径,生成热力图或统计数据。 - 安全监控
在安防系统中,Trackers 可跟踪可疑目标的移动。例如,在商场摄像头中,检测并跟踪特定人员,记录其活动路径以便后续分析。
QA
- Trackers 支持哪些跟踪算法?
当前支持 SORT 和 DeepSORT,未来版本计划增加更多算法,如 ByteTrack。 - 如何提高跟踪的稳定性?
确保检测模型的准确性,调整置信度阈值(例如 0.5),或增加跟踪器的track_buffer
参数以减少 ID 切换。 - 是否支持实时视频处理?
是的,Trackers 支持实时视频流,如摄像头输入。需要使用 OpenCV 捕获帧并逐帧处理。 - 如何处理内存溢出问题?
设置环境变量VIDEO_SOURCE_BUFFER_SIZE=2
限制帧缓冲,或使用更轻量级的模型如 YOLO11n。