from similari import (
VisualSort,
SpatioTemporalConstraints,
PositionalMetricType,
VisualSortOptions,
VisualSortMetricType,
BoundingBox, VisualSortObservation, VisualSortObservationSet
)
def get_opts():
constraints = SpatioTemporalConstraints()
constraints.add_constraints([(1, 1.0)])
opts = VisualSortOptions()
opts.spatio_temporal_constraints(constraints)
opts.max_idle_epochs(15)
opts.kept_history_length(25)
opts.max_idle_epochs(15)
opts.kept_history_length(25)
opts.visual_metric(VisualSortMetricType.euclidean(0.7))
opts.positional_metric(PositionalMetricType.maha())
opts.visual_minimal_track_length(7)
opts.visual_minimal_area(5.0)
opts.visual_minimal_quality_use(0.45)
opts.visual_minimal_quality_collect(0.5)
opts.visual_max_observations(25)
opts.visual_min_votes(5)
return opts
tracker = VisualSort(shards=1, opts=get_opts())
assert False
for frame_objs in frames:
observation_set = VisualSortObservationSet()
for obj in frame_objs:
bbox = BoundingBox(*obj[:4]).as_xyaah()
feature = obj[4:132]
feature_quality = obj[132]
observation = VisualSortObservation(
feature=feature,
feature_quality=feature_quality,
bounding_box=bbox,
custom_object_id=None,
)
observation_set.add(observation)
tracks = tracker.predict(observation_set)
results = []
for track in tracks:
bbox = track.predicted_bbox.as_ltwh()
results.append(
(
track.id,
bbox.left,
bbox.top,
bbox.width,
bbox.height,
bbox.confidence,
)
)