trackers gives you clean, modular re-implementations of leading multi-object tracking algorithms released under the permissive Apache 2.0 license. You combine them with any detection model you already use.
trackers-2.0.0-promo.mp4
Install
You can install and use trackers in a Python>=3.10 environment. For detailed installation instructions, including installing from source and setting up a local development environment, check out our install page.
install from source
By installing trackers from source, you can explore the most recent features and enhancements that have not yet been officially released. Please note that these updates are still in development and may not be as stable as the latest published release.
pip install https://github.com/roboflow/trackers/archive/refs/heads/develop.zip
Quickstart
Use the trackers CLI to quickly test how our tracking algorithms perform on your videos and streams. This feature is experimental; see the CLI documentation for details.
trackers track --source source.mp4 --output output.mp4 --model rfdetr-nano --tracker bytetrack
Tracking Algorithms
trackers gives you clean, modular re-implementations of leading multi-object tracking algorithms. The package currently supports SORT and ByteTrack. OC-SORT, BoT-SORT, and McByte support is coming soon. For comparisons, see the tracker comparison page.
| Algorithm | MOT17 HOTA | MOT17 IDF1 | MOT17 MOTA | SportsMOT HOTA | SoccerNet HOTA |
|---|---|---|---|---|---|
| SORT | 58.4 | 69.9 | 67.2 | 70.9 | 81.6 |
| ByteTrack | 60.1 | 73.2 | 74.1 | 73.0 | 84.0 |
| OC-SORT | — | — | — | — | — |
| BoT-SORT | — | — | — | — | — |
| McByte | — | — | — | — | — |
Integration
With a modular design, trackers lets you combine object detectors from different libraries with the tracker of your choice.
import cv2 from rfdetr import RFDETRNano from trackers import ByteTrackTracker model = RFDETRNano() tracker = ByteTrackTracker() cap = cv2.VideoCapture("source.mp4") while True: ret, frame = cap.read() if not ret: break frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) detections = model.predict(frame_rgb) detections = tracker.update(detections)
run with Inference
import cv2 import supervision as sv from inference import get_model from trackers import ByteTrackTracker model = get_model(model_id="rfdetr-nano") tracker = ByteTrackTracker() cap = cv2.VideoCapture("source.mp4") while True: ret, frame = cap.read() if not ret: break result = model.infer(frame)[0] detections = sv.Detections.from_inference(result) detections = tracker.update(detections)
run with Ultralytics
import cv2 import supervision as sv from ultralytics import YOLO from trackers import ByteTrackTracker model = YOLO("yolo11n.pt") tracker = ByteTrackTracker() cap = cv2.VideoCapture("source.mp4") while True: ret, frame = cap.read() if not ret: break result = model(frame)[0] detections = sv.Detections.from_ultralytics(result) detections = tracker.update(detections)
License
The code is released under the Apache 2.0 license.
Contribution
We welcome all contributions—whether it’s reporting issues, suggesting features, or submitting pull requests. Please read our contributor guidelines to learn about our processes and best practices.