usiddiquee
hi
e1832f4
# Mikel Broström 🔥 Yolo Tracking 🧾 AGPL-3.0 license
import yaml
from boxmot.utils import BOXMOT, TRACKER_CONFIGS
def get_tracker_config(tracker_type):
"""Returns the path to the tracker configuration file."""
return TRACKER_CONFIGS / f'{tracker_type}.yaml'
def create_tracker(tracker_type, tracker_config=None, reid_weights=None, device=None, half=None, per_class=None, evolve_param_dict=None):
"""
Creates and returns an instance of the specified tracker type.
Parameters:
- tracker_type: The type of the tracker (e.g., 'strongsort', 'ocsort').
- tracker_config: Path to the tracker configuration file.
- reid_weights: Weights for ReID (re-identification).
- device: Device to run the tracker on (e.g., 'cpu', 'cuda').
- half: Boolean indicating whether to use half-precision.
- per_class: Boolean for class-specific tracking (optional).
- evolve_param_dict: A dictionary of parameters for evolving the tracker.
Returns:
- An instance of the selected tracker.
"""
# Load configuration from file or use provided dictionary
if evolve_param_dict is None:
with open(tracker_config, "r") as f:
yaml_config = yaml.load(f, Loader=yaml.FullLoader)
tracker_args = {param: details['default'] for param, details in yaml_config.items()}
else:
tracker_args = evolve_param_dict
# Arguments specific to ReID models
reid_args = {
'reid_weights': reid_weights,
'device': device,
'half': half,
}
# Map tracker types to their corresponding classes
tracker_mapping = {
'strongsort': 'boxmot.trackers.strongsort.strongsort.StrongSort',
'ocsort': 'boxmot.trackers.ocsort.ocsort.OcSort',
'bytetrack': 'boxmot.trackers.bytetrack.bytetrack.ByteTrack',
'botsort': 'boxmot.trackers.botsort.botsort.BotSort',
'deepocsort': 'boxmot.trackers.deepocsort.deepocsort.DeepOcSort',
'hybridsort': 'boxmot.trackers.hybridsort.hybridsort.HybridSort',
'imprassoc': 'boxmot.trackers.imprassoc.imprassoctrack.ImprAssocTrack',
'boosttrack': 'boxmot.trackers.boosttrack.boosttrack.BoostTrack',
}
# Check if the tracker type exists in the mapping
if tracker_type not in tracker_mapping:
print('Error: No such tracker found.')
exit()
# Dynamically import and instantiate the correct tracker class
module_path, class_name = tracker_mapping[tracker_type].rsplit('.', 1)
tracker_class = getattr(__import__(module_path, fromlist=[class_name]), class_name)
# For specific trackers, update tracker arguments with ReID parameters
if tracker_type in ['strongsort', 'botsort', 'deepocsort', 'hybridsort', 'imprassoc', 'boosttrack']:
tracker_args['per_class'] = per_class
tracker_args.update(reid_args)
if tracker_type in ['strongsort', 'boosttrack']:
tracker_args.pop('per_class') # per class not supported by
else:
tracker_args['per_class'] = per_class
# Return the instantiated tracker class with arguments
return tracker_class(**tracker_args)