Tensor-native multi-object tracking for Roboflow Inference
Project description
Tracktors is Roboflow's private, tensor-native fork of
Trackers, scoped to the four tracker
paths used by Inference: SORT, ByteTrack, OC-SORT, and BoT-SORT. It consumes
SuperiorVision's tensor-native supervision.Detections without making the
boxes take a ceremonial trip through NumPy first.
Both from tracktors import ... and the legacy from trackers import ...
interface are supported while Inference migrates. Same API, same algorithms,
fewer surprise CPU field trips.
Turning a GPU tensor into NumPy so a Kalman filter can immediately rebuild the same numbers somewhere else is not object tracking. It is luggage handling. Tracktors is retiring the carousel.
Why Tracktors?
- Clean-room implementations. Every algorithm is re-implemented from the original paper — not a thin wrapper around someone else's code. You can read it, understand it, and modify it.
- Detector-agnostic. Works with YOLO, DETR, RT-DETR, or any model that produces bounding boxes. No inference library required or assumed.
- SuperiorVision tensor native. Pass tensor-backed
sv.Detectionsin and get tensor-backed tracked detections back on the same device—zero glue code and zero NumPy exit tax. - Benchmarked across four datasets. MOT17, SportsMOT, SoccerNet, and DanceTrack — at default parameters and after hyperparameter tuning, so you know what to expect before you deploy.
- Tunable out of the box. Built-in Optuna-based hyperparameter search via
tracktors tune(or the compatibletrackers tune) so you can optimize for your specific scene and detector. - Camera motion compensation. BoT-SORT handles moving cameras natively, keeping track IDs stable even when the whole frame shifts.
Install
pip install tracktors
Install from source
git clone git@github.com:roboflow/tracktors.git
cd tracktors
uv sync
The package is published on PyPI; the source repository remains private.
Quick Start
Add tracking to your existing detection pipeline in a few lines. Every tracker shares the same update(detections, frame=None) interface, so switching algorithms later is a one-line change. The example below uses inference as the detector — swap it for any detector that returns supervision.Detections.
import cv2
import supervision as sv
from inference import get_model
from tracktors import ByteTrackTracker
model = get_model(model_id="rfdetr-medium")
tracker = ByteTrackTracker()
cap = cv2.VideoCapture("video.mp4")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
result = model.infer(frame)[0]
detections = sv.Detections.from_inference(result)
tracked = tracker.update(detections)
For more examples, see the tracking guide.
Track from CLI
Prefer the terminal? Point tracktors track at a video, webcam feed, RTSP stream, or image directory and it handles detection, tracking, and annotated output in one command — no Python script required.
tracktors track \
--source video.mp4 \
--output output.mp4 \
--model rfdetr-medium \
--tracker bytetrack \
--show-labels \
--show-trajectories
For all CLI options, see the tracking guide.
Algorithms
Each tracker below is a faithful implementation of its original paper. Pick the one that fits your scene, or run the benchmark to find out which performs best on your data.
| Algorithm | Description | MOT17 HOTA | SportsMOT HOTA | SoccerNet HOTA | DanceTrack HOTA |
|---|---|---|---|---|---|
| SORT | Kalman filter + Hungarian matching baseline. | 58.4 | 70.9 | 81.6 | 47.2 |
| ByteTrack | Two-stage association using high and low confidence detections. | 60.1 | 73.0 | 84.0 | 53.3 |
| OC-SORT | Observation-centric recovery for lost tracks. | 61.9 | 71.7 | 78.4 | 54.1 |
| BoT-SORT | Camera motion compensation | 63.7 | 73.8 | 84.5 | 57.8 |
| C-BIoU | Cascaded buffered IoU matching for fast or irregular motion. | 63.0 | 73.1 | 82.6 | 56.7 |
All scores use default parameters on the standard split. See the tracker comparison for tuned numbers and methodology.
Evaluate
Once you have tracking results, you want to know how good they are. trackers eval computes CLEAR, HOTA, and Identity metrics against ground-truth annotations and prints a per-sequence breakdown alongside the combined score.
tracktors eval \
--gt-dir ./data/mot17/val \
--tracker-dir results \
--metrics CLEAR HOTA Identity \
--columns MOTA HOTA IDF1
Sequence MOTA HOTA IDF1
----------------------------------------------------
MOT17-02-FRCNN 30.192 35.475 38.515
MOT17-04-FRCNN 48.912 55.096 61.854
MOT17-05-FRCNN 52.755 45.515 55.705
MOT17-09-FRCNN 51.441 50.108 57.038
MOT17-10-FRCNN 51.832 49.648 55.797
MOT17-11-FRCNN 55.501 49.401 55.061
MOT17-13-FRCNN 60.488 58.651 69.884
----------------------------------------------------
COMBINED 47.406 50.355 56.600
For the full evaluation workflow, see the evaluation guide.
Download Datasets
Need benchmark data to evaluate against? trackers download pulls MOT17, SportsMOT, and other supported datasets with a single command, handling splits and assets selectively so you only download what you need.
tracktors download mot17 \
--split val \
--asset annotations,detections
| Dataset | Description | Splits | Assets | License |
|---|---|---|---|---|
mot17 |
Pedestrian tracking with crowded scenes and frequent occlusions. | train, val, test |
frames, annotations, detections |
CC BY-NC-SA 3.0 |
sportsmot |
Sports broadcast tracking with fast motion and similar-looking targets. | train, val, test |
frames, annotations |
CC BY 4.0 |
For more download options, see the download guide.
Try It
Want to see it in action before writing any code? Try trackers in your browser with our Hugging Face Playground — no install required.
Where to go next
- New to tracking? Start with the tracking guide — it walks through the Python API and CLI end to end.
- Want benchmarks? The tracker comparison covers all four algorithms across all four datasets, at default and tuned parameters, with guidance on which to pick for your scene.
- Building a research pipeline? The evaluation guide and download guide cover the full offline benchmarking workflow.
- Upstream API reference → trackers.roboflow.com
- Try without installing → Hugging Face Playground
- Questions? Find us on Discord.
Contributing
We welcome contributions. Read our contributor guidelines to get started.
License
The code is released under the Apache 2.0 license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tracktors-2.6.0.dev1.tar.gz.
File metadata
- Download URL: tracktors-2.6.0.dev1.tar.gz
- Upload date:
- Size: 131.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72b5424e88855adfa5951abea985ada79c51ec49cf3860ee25f8283030e2b281
|
|
| MD5 |
93c477b59a4a3b4de842b9f620e72cab
|
|
| BLAKE2b-256 |
6fdacb651665f1d223a0dba6d7cb8dcc4515521053582668ccbefb5f99db4841
|
File details
Details for the file tracktors-2.6.0.dev1-py3-none-any.whl.
File metadata
- Download URL: tracktors-2.6.0.dev1-py3-none-any.whl
- Upload date:
- Size: 159.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7170f1ed7de844674b66b507cf00456d42404ca152c511e07539ae5a2d545402
|
|
| MD5 |
26aedeabf829b2c73938062211679872
|
|
| BLAKE2b-256 |
5fb0524f57e07d302cd5903983a268d73748262faee64c66e03f7034e7d65f9e
|