MCPcopy Index your code
hub / github.com/mikel-brostrom/boxmot

github.com/mikel-brostrom/boxmot @v21.0.0

repository ↗ · DeepWiki ↗ · release v21.0.0 ↗ · Ask this repo → · + Follow
3,776 symbols 12,075 edges 326 files 1,174 documented · 31% updated 1d agov21.0.0 · 2026-06-03★ 8,225
README

BoxMOT logo

Pluggable Python and C++ multi-object tracking modules for axis-aligned and oriented bounding box detections from any model.

CI PyPI version downloads license python-version docker pulls DOI colab discord Ask DeepWiki

mikel-brostrom%2Fboxmot | Trendshift


DocsInstallationModesAPI ReferenceTrackersContributing

BoxMOT demo

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, and export.
  • 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 cpp and 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

BoxMOT contributors

Support and Citation

Core symbols most depended-on inside this repo

append
called by 707
boxmot/postprocessing/gta.py
get_name
called by 37
boxmot/engine/trackeval/trackeval/datasets/rob_mots.py
update
called by 31
boxmot/engine/tracking/tracker.py
resolve_model_path
called by 30
boxmot/utils/misc.py
get_mode_default
called by 29
boxmot/configs/__init__.py
parse_args
called by 26
boxmot/engine/cli.py
encode
called by 26
boxmot/reid/backbones/clip/clip/simple_tokenizer.py
append
called by 25
boxmot/data/cache.py

Shape

Method 1,947
Function 1,428
Class 399
Route 2

Languages

Python100%

Modules by API surface

tests/unit/test_inference.py154 symbols
tests/unit/test_python_api.py121 symbols
tests/unit/test_tuner.py74 symbols
boxmot/utils/rich/reporting.py74 symbols
boxmot/engine/research.py73 symbols
boxmot/engine/workflows/results.py65 symbols
boxmot/engine/tracking/results.py55 symbols
boxmot/configs/benchmark.py54 symbols
boxmot/utils/download.py52 symbols
boxmot/utils/rich/ui.py47 symbols
tests/unit/test_engine_tracker.py45 symbols
tests/unit/test_engine_research.py42 symbols

Dependencies from manifests, versioned

Pillow8.1.2 · 1×
click8.1.8 · 1×
huggingface-hub1.7.1 · 1×
matplotlib3.2.1 · 1×
numpy2.2.0 · 1×
opencv_python4.4.0.46 · 1×
pycocotools2.0.2 · 1×
pytest6.0.1 · 1×
regex2024.0.0 · 1×
rich15.0.0 · 1×
scikit_image0.16.2 · 1×
scipy1.4.1 · 1×

For agents

$ claude mcp add boxmot \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact