import uuid from collections.abc import Iterable from typing import Any, Optional, Sequence, Union import numpy as np import scipy from filterpy.kalman import KalmanFilter from motpy.core import Box, Detection, Track, Vector, setup_logger from motpy.metrics import angular_similarity, calculate_iou from motpy.model import Model, ModelPreset logger = setup_logger(__name__) def get_single_object_tracker(model: Model, x0: Optional[Vector] = None) -> KalmanFilter: """ returns Kalman-based tracker based on a specified motion model spec. e.g. for spec = {'order_pos': 1, 'dim_pos': 2, 'order_size': 0, 'dim_size': 1} we expect the following setup: state x, x', y, y', w, h where x and y are centers of boxes w and h are width and height """ tracker = KalmanFilter(dim_x=model.state_length, dim_z=model.measurement_length) tracker.F = model.build_F() tracker.Q = model.build_Q() tracker.H = model.build_H() tracker.R = model.build_R()
import time import cv2 from motpy import ModelPreset, MultiObjectTracker from motpy.core import setup_logger from motpy.testing_viz import draw_rectangle, draw_track, image_generator from motpy.utils import ensure_packages_installed ensure_packages_installed(['cv2']) logger = setup_logger(__name__, 'DEBUG', is_main=True) def demo_tracking_visualization( model_spec=ModelPreset.constant_acceleration_and_static_box_size_2d. value, num_steps: int = 1000, num_objects: int = 20): gen = image_generator(num_steps=num_steps, num_objects=num_objects, max_omega=0.03, miss_prob=0.33, disappear_prob=0.00, det_err_sigma=3.33) dt = 1 / 24 tracker = MultiObjectTracker(dt=dt, model_spec=model_spec, active_tracks_kwargs={ 'min_steps_alive': 2, 'max_staleness': 6
import cv2 import motpy from motpy import ModelPreset, MultiObjectTracker from motpy.core import setup_logger from motpy.testing_viz import draw_rectangle, draw_text, image_generator logger = setup_logger(__name__, is_main=True) def demo_tracking_visualization(num_steps: int = 1000, num_objects: int = 10): gen = image_generator(num_steps=num_steps, num_objects=num_objects, max_omega=0.03, miss_prob=0.33, disappear_prob=0.00, det_err_sigma=3.33) dt = 1 / 24 tracker = MultiObjectTracker( dt=dt, model_spec=ModelPreset.constant_acceleration_and_static_box_size_2d. value, active_tracks_kwargs={ 'min_steps_alive': 2, 'max_staleness': 6 }, tracker_kwargs={'max_staleness': 12}) for _ in range(num_steps): img, _, detections = next(gen)