Quick Start Guide

This guide will get you tracking objects in under 5 minutes.

Basic Example

The simplest way to use SwarmSort:

from swarmsort import SwarmSortTracker, Detection
import numpy as np

# Create a tracker with default settings
tracker = SwarmSortTracker()

# Create detections for the current frame
detections = [
    Detection(position=np.array([100, 200]), confidence=0.9),
    Detection(position=np.array([300, 400]), confidence=0.85),
]

# Update tracker and get results
tracked_objects = tracker.update(detections)

# Use the results
for obj in tracked_objects:
    print(f"Track {obj.id}: position {obj.position}")

With Video Processing

Process a video file with object detection:

import cv2
from swarmsort import SwarmSortTracker, Detection

tracker = SwarmSortTracker()
cap = cv2.VideoCapture('video.mp4')

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

    # Get detections from your detector (e.g., YOLO)
    detections = detect_objects(frame)  # Your detection function

    # Convert to SwarmSort format
    swarmsort_detections = []
    for det in detections:
        swarmsort_detections.append(Detection(
            position=det['center'],
            confidence=det['score'],
            bbox=det['bbox']
        ))

    # Track objects
    tracked_objects = tracker.update(swarmsort_detections)

    # Draw results
    for obj in tracked_objects:
        if obj.bbox is not None:
            x1, y1, x2, y2 = obj.bbox.astype(int)
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, f"ID: {obj.id}", (x1, y1-10),
                       cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

    cv2.imshow('Tracking', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

Common Configurations

For Crowded Scenes

from swarmsort import SwarmSortConfig, SwarmSortTracker

config = SwarmSortConfig(
    max_distance=100.0,                 # Shorter association distance
    uncertainty_weight=0.5,             # More conservative
    collision_freeze_embeddings=True,   # Prevent ID switches
    min_consecutive_detections=3        # Faster initialization
)
tracker = SwarmSortTracker(config)

For Fast-Moving Objects

config = SwarmSortConfig(
    max_distance=200.0,                 # Longer association distance
    kalman_type='oc',                   # Better motion model
    assignment_strategy='hungarian',    # Optimal assignment
    max_track_age=15                    # Quick cleanup
)
tracker = SwarmSortTracker(config)

For High Accuracy

config = SwarmSortConfig(
    do_embeddings=True,                 # Use visual features
    embedding_weight=1.5,               # Trust appearance
    reid_enabled=True,                  # Re-identify lost tracks
    min_consecutive_detections=8        # Careful initialization
)
tracker = SwarmSortTracker(config)

Next Steps

  • Learn about Configuration Guide options

  • Explore advanced_features

  • See examples/visualization for drawing tracks

  • Check performance_tuning for optimization