Download Latest Version v2.6.0_ McByte and dynamic frame rate source code.zip (1.1 MB)
Email in envelope

Get an email when there's a new version of trackers

Home / 2.3.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-03-16 6.1 kB
Trackers 2.3.0 source code.tar.gz 2026-03-16 356.0 kB
Trackers 2.3.0 source code.zip 2026-03-16 418.6 kB
Totals: 3 Items   780.7 kB 0

Changelog

🚀 Added

  • Added OCSORTTracker, a clean re-implementation of OC-SORT. OC-SORT shifts to an observation-centric paradigm, using real detections to correct Kalman filter errors accumulated during occlusions. It introduces Observation-Centric Re-Update (ORU) for state recovery, Observation-Centric Momentum (OCM) for direction-consistency-weighted association, and Observation-Centric Recovery (OCR) for second-stage heuristic matching. OC-SORT achieves the highest HOTA on MOT17 and DanceTrack with default parameters. (#207)
Algorithm Description MOT17 HOTA SportsMOT HOTA SoccerNet HOTA DanceTrack HOTA
SORT Kalman filter + Hungarian matching baseline. 58.4 70.9 81.6 45.0
ByteTrack Two-stage association using high and low confidence detections. 60.1 73.0 84.0 50.2
OC-SORT Observation-centric recovery for lost tracks. 61.9 71.7 78.4 51.8
:::python
import cv2
import supervision as sv
from inference import get_model
from trackers import OCSORTTracker

model = get_model("rfdetr-medium")
tracker = OCSORTTracker()

box_annotator = sv.BoxAnnotator()
label_annotator = sv.LabelAnnotator()

cap = cv2.VideoCapture("<SOURCE_VIDEO_PATH>")
if not cap.isOpened():
    raise RuntimeError("Failed to open video source")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    result = model.infer(frame)[0]
    detections = sv.Detections.from_inference(result)
    detections = tracker.update(detections)

    frame = box_annotator.annotate(frame, detections)
    frame = label_annotator.annotate(frame, detections, labels=detections.tracker_id)

    cv2.imshow("RF-DETR + OC-SORT", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

https://github.com/user-attachments/assets/8f6ac3fd-a873-4b8b-94d1-6ed189d9fd01

  • Added trackers download CLI command and download_dataset Python API. Download benchmark datasets directly from the command line or from code. Supports MOT17 and SportsMOT with split and asset filtering. (#262)

    :::bash

    List available datasets

    trackers download --list

    Download full dataset

    trackers download mot17

    Download specific split and asset type

    trackers download mot17 --split train --annotations-only

    Custom output directory

    trackers download sportsmot --split val -o ./datasets

    :::python from trackers import download_dataset, Dataset, DatasetSplit, DatasetAsset

    download_dataset( dataset=Dataset.MOT17, split=[DatasetSplit.VAL], asset=[DatasetAsset.ANNOTATIONS, DatasetAsset.DETECTIONS], output_dir="./data", )

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

https://github.com/user-attachments/assets/14742f66-5dc7-40a3-bed9-4096f6890f6d

https://github.com/user-attachments/assets/d53f1047-be01-4059-8dd2-580111b44ab4

  • Added --track-ids flag to trackers track CLI command. Filter displayed tracks by track ID to focus on specific objects in a scene. (#280)

    :::bash trackers track --source video.mp4 --output output.mp4 \ --model rfdetr-medium \ --tracker bytetrack \ --track-ids 1,2

🌱 Changed

  • Made --source optional in trackers track when --detections is provided and no visual output is requested, enabling frameless tracking for evaluation workflows. (#322)

  • Optimized xcycsr_to_xyxy and xyxy_to_xcycsr bounding box converters for the single-box hot path, reducing per-call overhead in inner tracking loops. (#296)

🛠️ Fix

  • Fixed a bug in MOT evaluation where ground-truth entries with conf=0 (distractors) were not filtered, causing artificially low scores on MOT17. Tracker entries with id < 0 are now also excluded. Results now match TrackEval exactly. (#322)

🏆 Contributors

@JVSCHANDRADITHYA (Chandradithya Janaswami), @salmanmkc (Salman Chishti), @AlexBodner (Alexander Bodner), @Borda (Jirka Borovec), @SkalskiP (Piotr Skalski)

Source: README.md, updated 2026-03-16