BoxMOT: pluggable SOTA tracking modules for segmentation, object detection and pose estimation models
Project description
Pluggable Python and C++ multi-object tracking modules for axis-aligned and oriented bounding box detections from any model.
Docs • Installation • Modes • API Reference • Trackers • Contributing
BoxMOT gives you one CLI and one Python API for running modern multi-object tracking workflows. It covers direct tracking, cached benchmark evaluation, tuning, research loops, ReID training and evaluation, and ReID export without forcing you to rebuild the detector and tracker stack for each experiment.
Why BoxMOT
- One interface for
track,generate,eval,tune,research,train,eval-reid, andexport. - Swappable trackers with shared detector and ReID plumbing.
- Benchmark-oriented workflows with reusable detections and embeddings.
- Support for both AABB and OBB tracking paths.
- Optional production-ready native C++ tracker implementations with the same metrics as the Python path, opted into via
--tracker-backend cppand embeddable in standalone C++ projects via CMake (see Native C++ Integration). - Public Python API for embedding the same workflows in applications and notebooks.
Installation
BoxMOT supports Python 3.10 through 3.13.
pip install boxmot
boxmot --help
For mode-specific extras such as yolo, evolve, research, onnx, openvino, and tflite, see the installation guide.
Benchmark Results
| Tracker | Status | MOT17 ablation | SportsMOT val | MMOT test | OBB | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| HOTA | MOTA | IDF1 | HOTA | MOTA | IDF1 | HOTA | MOTA | IDF1 | |||
| occluboost | ✅ | 70.47 (70.48) |
78.32 (78.31) |
84.14 (84.14) |
83.17 | 97.48 | 89.36 | – | – | – | ✅ |
| botsort | ✅ | 69.44 (69.43) |
78.24 (78.26) |
81.94 (82.00) |
76.93 | 98.11 | 78.30 | 51.79 | 46.05 | 60.85 | ✅ |
| boosttrack | ✅ | 69.25 (—) |
75.91 (—) |
83.20 (—) |
76.32 | 97.08 | 77.82 | – | – | – | ❌ |
| strongsort | ✅ | 68.05 (—) |
76.19 (—) |
80.76 (—) |
79.80 | 97.31 | 80.27 | – | – | – | ❌ |
| deepocsort | ✅ | 67.95 (—) |
75.83 (—) |
80.54 (—) |
79.51 | 97.94 | 79.59 | – | – | – | ❌ |
| bytetrack | ✅ | 67.68 (67.75) |
78.04 (78.03) |
79.16 (79.38) |
67.93 | 97.25 | 76.90 | 33.97 | 33.72 | 39.74 | ✅ |
| hybridsort | ✅ | 67.31 (—) |
74.09 (—) |
78.87 (—) |
81.14 | 98.07 | 81.88 | – | – | – | ❌ |
| ocsort | ✅ | 66.44 (66.44) |
74.55 (74.55) |
77.90 (77.90) |
76.34 | 96.60 | 75.64 | 28.57 | 26.19 | 29.95 | ✅ |
| sfsort | ✅ | 62.65 (62.66) |
76.87 (76.74) |
69.18 (69.18) |
75.73 | 98.39 | 72.99 | 44.19 | 44.27 | 46.25 | ✅ |
Py (C++); — unavailable. See Benchmark Workflows.
Related guides:
Minimal Usage
CLI:
boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show
Python:
import numpy as np
from boxmot.trackers import OccluBoost
tracker = OccluBoost()
# dets: (N, 6) array with [x1, y1, x2, y2, conf, cls] per detection
dets = np.array([[100, 200, 300, 400, 0.9, 0]], dtype=np.float32)
img = np.zeros((480, 640, 3), dtype=np.uint8) # current frame
# tracks: (M, 8) array with [x1, y1, x2, y2, id, conf, cls, det_ind] per track
tracks = tracker.update(dets, img)
print(tracks)
Contributing
Start with CONTRIBUTING.md and the contributor docs.
Contributors
Support and Citation
- Bugs and feature requests: GitHub Issues
- Questions and discussion: GitHub Discussions or Discord
- Citation metadata: CITATION.cff
- Commercial support:
box-mot@outlook.com
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 boxmot-21.0.0.tar.gz.
File metadata
- Download URL: boxmot-21.0.0.tar.gz
- Upload date:
- Size: 26.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b044d73a33474ba49f9f1a49b55c7ed457d5a25e8f597cfadcbd63d2d4d06dd3
|
|
| MD5 |
59f693fd90f1118bfef1b381b6be5b74
|
|
| BLAKE2b-256 |
199b272d1a8365aab58e8d72b8978ead250fcfd59409a1c0aff265a952d9ddcb
|
File details
Details for the file boxmot-21.0.0-py3-none-any.whl.
File metadata
- Download URL: boxmot-21.0.0-py3-none-any.whl
- Upload date:
- Size: 2.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f77cd220170ebd39804174c4db4fd83353c5c2acb6824888f7674b68b7b6f89
|
|
| MD5 |
8c64f0b049043775d663763ee44c066e
|
|
| BLAKE2b-256 |
bfeaba83945d43818705dd14fbb2e9be67e29dad6d15944e18f61bb61e70d857
|