BoxMOT

raw JSON →
18.0.0 verified Sat May 09 auth: no python

BoxMOT provides pluggable state-of-the-art multi-object tracking modules for segmentation, object detection, and pose estimation models. Current version 18.0.0 requires Python <3.13,>=3.9 and follows a fast release cadence.

pip install boxmot
error ModuleNotFoundError: No module named 'boxmot.trackers'
cause Import path changed in v18; old code uses boxmot.trackers submodule.
fix
Change import to from boxmot import BoTSORT.
error TypeError: update() missing 1 required positional argument: 'img'
cause The update method now requires an image argument for feature computation.
fix
Pass an image array as second argument: tracker.update(detections, image).
error ValueError: detections array shape mismatch; expected (N,6)
cause The detections array must have shape (N,6) with columns (x1,y1,x2,y2,conf,class_id).
fix
Ensure detections are formatted as 2D array with 6 columns per detection.
error ImportError: cannot import name 'create_tracker' from 'boxmot'
cause The create_tracker helper function was removed in v18.
fix
Instantiate tracker classes directly: from boxmot import BoTSORT; tracker = BoTSORT().
breaking In version 18.0.0, the import paths changed: trackers are now directly under boxmot, not boxmot.trackers.
fix Use `from boxmot import BoTSORT` instead of `from boxmot.trackers import BoTSORT`.
breaking The signature of the update method changed. The method now requires a second argument (image) for features, and the return format may differ.
fix Call tracker.update(detections, image) where image is a numpy array (H,W,3). Review return structure.
deprecated The creation of a tracker without explicit configuration will use defaults; future versions may require config.
fix Pass a configuration dictionary to the tracker constructor, e.g., BoTSORT(config={...}).
pip install boxmot[ultralytics]

Initialize BoTSORT tracker and update with dummy detections.

from boxmot import BoTSORT
import numpy as np

# Initialize tracker
tracker = BoTSORT()

# Simulate detections: [x1, y1, x2, y2, conf, class_id]
detections = np.array([[100, 100, 200, 200, 0.9, 0]])

# Update with a dummy image (for embeddings, pass real image if needed)
results = tracker.update(detections, np.zeros((480, 640, 3), dtype=np.uint8))
print(results)