mikel-brostrom/boxmot
BoxMOT: Pluggable Python and C++ SOTA multi-object tracking modules with support for axis-aligned and oriented bounding boxes
BoxMOT – Pluggable Multi‑Object Tracking
What it is BoxMOT is a Python (and optional C++) library that lets you build, run, and evaluate multi‑object trackers (MOT) on top of any object detector. It provides a clean, modular API where the four main pieces – detector, segmentation mask, appearance encoder (Re‑ID), and tracker – can be swapped independently. The library ships with a command‑line interface (CLI) for common workflows (tracking, evaluation, tuning, dataset materialisation, etc.) and a Python API for embedding trackers in your own code.
Key features
| Feature | Why it matters |
|---|---|
| Unified CLI | One entry point (boxmot) covers tracking, evaluation, hyper‑parameter tuning, Re‑ID training, dataset export, and more, reducing the need to stitch together separate tools. |
| Pluggable components | Detectors (e.g., YOLO variants), segmentors, Re‑ID encoders, and trackers can be mixed‑and‑matched via simple flags, enabling rapid experimentation. |
| AABB & OBB support | Handles both axis‑aligned (AABB) and oriented (OBB) bounding boxes, useful for aerial or sports footage where objects rotate. |
| Native C++ backend | An optional high‑performance C++ implementation of the trackers can be used (--tracker-backend cpp) and integrated into other C++ projects via CMake. |
| Immutable Parquet builds | Detections, masks, and embeddings are stored in keyed Parquet files, making datasets reproducible and reusable across experiments. |
| Extensive benchmark tables | The README lists HOTA, MOTA, and IDF1 scores on MOT17, SportsMOT, and MMOT OBB datasets for many built‑in trackers (e.g., occluboost, botsort, bytetrack). |
| Python API | Example shows creating a tracker (OccluBoost) and feeding NumPy detections + BGR frames to obtain track IDs, with optional OBB mode. |
| Installation | pip install boxmot works on Python 3.10‑3.13; extra profiles (yolo, service, onnx, etc.) are available for GPU or CPU builds. |
| Community & support | Discord, GitHub Discussions, and limited free consulting for non‑profit conservation projects. |
Typical usage
# Track from a webcam using YOLO‑v2 detector, a Re‑ID model, and the OccluBoost tracker
boxmot track \
--detector yolo26n \
--reid lmbn_n_duke \
--tracker occluboost \
--source 0 --save --show
from boxmot import OccluBoost
import numpy as np
tracker = OccluBoost()
# detections: [x1, y1, x2, y2, confidence, class_id]
dets = np.array([[100,200,300,400,0.9,0]])
frame = np.zeros((480,640,3), dtype=np.uint8) # dummy BGR image
tracks = tracker.update(dets, frame)
print(tracks[:,4].astype(int)) # track IDs
Who should use it
- Researchers prototyping new MOT algorithms who need a reproducible pipeline.
- Practitioners deploying real‑time tracking (e.g., wildlife monitoring, sports analytics) who want a fast C++ backend.
- Anyone needing a unified interface to evaluate multiple trackers on standard MOT benchmarks.
Where to learn more
- Full documentation:
docs/(installation, modes, API reference, tracker list). - Benchmark results and experiment guides are in the README tables and
docs/guides/. - Community help via Discord or GitHub Discussions.
Related
- Project
- Project
- Project
- Project
- Project