Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions controller/src/controller/ilabs_tracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,12 @@ def from_tracked_object(self, tracked_object, objects):
sscape_object.inferRotationFromVelocity()
break
if not found:
sscape_object.setGID(uuid)
# Check if UUID manager already has a mapping for this rv_id
existing_gid = self.uuid_manager.active_ids.get(sscape_object.rv_id, [None])[0]
if existing_gid is None:
sscape_object.setGID(uuid)
else:
sscape_object.setGID(existing_gid)

self.uuid_manager.assignID(sscape_object)

Expand Down Expand Up @@ -176,8 +181,12 @@ def trackCategory(self, objects, when, already_tracked_objects):
"""Create reliable tracks for objects detected and tracks detected"""
when = datetime.fromtimestamp(when)
self.update_tracks(objects, when)
# Include ALL active C++ tracks to preserve UUID mappings
all_active_tracks = (self.tracker.get_reliable_tracks() +
self.tracker.get_unreliable_tracks() +
self.tracker.get_suspended_tracks())
tracked_objects = self.tracker.get_reliable_tracks()
self.uuid_manager.pruneInactiveTracks(tracked_objects)
self.uuid_manager.pruneInactiveTracks(all_active_tracks)
tracks_from_detections = [self.from_tracked_object(tracked_object, objects)
for tracked_object in tracked_objects]

Expand All @@ -190,8 +199,12 @@ def trackCategoryBatched(self, objects_per_camera, when, already_tracked_objects
"""Create reliable tracks for objects from multiple cameras using batched tracking"""
when = datetime.fromtimestamp(when)
self.update_tracks_batched(objects_per_camera, when)
# Include ALL active C++ tracks to preserve UUID mappings
all_active_tracks = (self.tracker.get_reliable_tracks() +
self.tracker.get_unreliable_tracks() +
self.tracker.get_suspended_tracks())
tracked_objects = self.tracker.get_reliable_tracks()
self.uuid_manager.pruneInactiveTracks(tracked_objects)
self.uuid_manager.pruneInactiveTracks(all_active_tracks)

# Flatten all objects for from_tracked_object lookup
all_objects = [obj for camera_objects in objects_per_camera for obj in camera_objects]
Expand Down
4 changes: 4 additions & 0 deletions controller/src/controller/uuid_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,10 @@ def assignID(self, sscape_object):
self.active_ids.setdefault(sscape_object.rv_id, [None, None])
self.gatherQualityVisualFeatures(sscape_object)
self.pickBestID(sscape_object)
# Store the assigned UUID in active_ids
with self.active_ids_lock:
if self.active_ids.get(sscape_object.rv_id, [None])[0] is None:
self.active_ids[sscape_object.rv_id] = [sscape_object.gid, None]
if self.haveSufficientVisualFeatures(sscape_object) and self.reid_enabled:
# Only do the query for similarity if it hasn't been run before
if sscape_object.rv_id not in self.active_query:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,16 @@ class MultipleObjectTracker
return mTrackManager.getReliableTracks();
}

inline std::vector<TrackedObject> getSuspendedTracks()
{
return mTrackManager.getSuspendedTracks();
}

inline std::vector<TrackedObject> getUnreliableTracks()
{
return mTrackManager.getUnreliableTracks();
}

/**
* @brief Returns a the list of all active tracked objects
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,12 @@ py::class_<rv::tracking::Classification>(tracking, "Classification", "Classifica
.def("get_reliable_tracks",
&rv::tracking::MultipleObjectTracker::getReliableTracks,
"Returns a list of all active reliable tracks.")
.def("get_suspended_tracks",
&rv::tracking::MultipleObjectTracker::getSuspendedTracks,
"Returns a list of all suspended tracks.")
.def("get_unreliable_tracks",
&rv::tracking::MultipleObjectTracker::getUnreliableTracks,
"Returns a list of all active unreliable tracks.")
.def("update_tracker_params",
&rv::tracking::MultipleObjectTracker::updateTrackerParams,
"Updates tracker frame based parameters.");
Expand Down
Loading