This commit is contained in:
Josh Hawkins 2025-03-12 10:15:14 -05:00
parent f305ff3a5a
commit 64851aeb54
6 changed files with 61 additions and 9 deletions

View File

@ -340,6 +340,8 @@ def events_explore(limit: int = 10):
"average_estimated_speed", "average_estimated_speed",
"velocity_angle", "velocity_angle",
"path_data", "path_data",
"identifier",
"identifier_score",
] ]
}, },
"event_count": label_counts[event.label], "event_count": label_counts[event.label],
@ -627,6 +629,8 @@ def events_search(request: Request, params: EventsSearchQueryParams = Depends())
"average_estimated_speed", "average_estimated_speed",
"velocity_angle", "velocity_angle",
"path_data", "path_data",
"identifier",
"identifier_score",
] ]
} }

View File

@ -137,12 +137,13 @@ class CameraState:
# draw the bounding boxes on the frame # draw the bounding boxes on the frame
box = obj["box"] box = obj["box"]
text = ( text = (
obj["label"] obj["sub_label"][0]
if ( if (
not obj.get("sub_label") obj.get("sub_label") and is_label_printable(obj["sub_label"][0])
or not is_label_printable(obj["sub_label"][0])
) )
else obj["sub_label"][0] else obj.get("identifier", [None])[0]
if (obj.get("identifier") and obj["identifier"][0])
else obj["label"]
) )
draw_box_with_label( draw_box_with_label(
frame_copy, frame_copy,

View File

@ -14,6 +14,7 @@ class EventMetadataTypeEnum(str, Enum):
manual_event_end = "manual_event_end" manual_event_end = "manual_event_end"
regenerate_description = "regenerate_description" regenerate_description = "regenerate_description"
sub_label = "sub_label" sub_label = "sub_label"
identifier = "identifier"
class EventMetadataPublisher(Publisher): class EventMetadataPublisher(Publisher):

View File

@ -1054,13 +1054,20 @@ class LicensePlateProcessingMixin:
for plate in plates for plate in plates
) )
), ),
top_plate, None,
) )
# Send the result to the API # If it's a known plate, publish to sub_label
if sub_label is not None:
self.sub_label_publisher.publish( self.sub_label_publisher.publish(
EventMetadataTypeEnum.sub_label, (id, sub_label, avg_confidence) EventMetadataTypeEnum.sub_label, (id, sub_label, avg_confidence)
) )
# If it's not a known plate, publish to identifier instead
else:
self.sub_label_publisher.publish(
EventMetadataTypeEnum.identifier, (id, top_plate, avg_confidence)
)
self.detected_license_plates[id] = { self.detected_license_plates[id] = {
"plate": top_plate, "plate": top_plate,
"char_confidences": top_char_confidences, "char_confidences": top_char_confidences,

View File

@ -346,6 +346,41 @@ class TrackedObjectProcessor(threading.Thread):
return True return True
def set_identifier(
self, event_id: str, identifier: str | None, score: float | None
) -> None:
"""Update identifier for given event id."""
tracked_obj: TrackedObject = None
for state in self.camera_states.values():
tracked_obj = state.tracked_objects.get(event_id)
if tracked_obj is not None:
break
try:
event: Event = Event.get(Event.id == event_id)
except DoesNotExist:
event = None
if not tracked_obj and not event:
return
if tracked_obj:
tracked_obj.obj_data["identifier"] = (identifier, score)
if event:
data = event.data
data["identifier"] = identifier
if identifier is None:
data["identifier_score"] = None
elif score is not None:
data["identifier_score"] = score
event.data = data
event.save()
return True
def create_manual_event(self, payload: tuple) -> None: def create_manual_event(self, payload: tuple) -> None:
( (
frame_time, frame_time,
@ -507,6 +542,9 @@ class TrackedObjectProcessor(threading.Thread):
if topic.endswith(EventMetadataTypeEnum.sub_label.value): if topic.endswith(EventMetadataTypeEnum.sub_label.value):
(event_id, sub_label, score) = payload (event_id, sub_label, score) = payload
self.set_sub_label(event_id, sub_label, score) self.set_sub_label(event_id, sub_label, score)
if topic.endswith(EventMetadataTypeEnum.identifier.value):
(event_id, identifier, score) = payload
self.set_identifier(event_id, identifier, score)
elif topic.endswith(EventMetadataTypeEnum.manual_event_create.value): elif topic.endswith(EventMetadataTypeEnum.manual_event_create.value):
self.create_manual_event(payload) self.create_manual_event(payload)
elif topic.endswith(EventMetadataTypeEnum.manual_event_end.value): elif topic.endswith(EventMetadataTypeEnum.manual_event_end.value):

View File

@ -365,6 +365,7 @@ class TrackedObject:
"average_estimated_speed": self.average_estimated_speed, "average_estimated_speed": self.average_estimated_speed,
"velocity_angle": self.velocity_angle, "velocity_angle": self.velocity_angle,
"path_data": self.path_data, "path_data": self.path_data,
"identifier": self.obj_data.get("identifier"),
} }
return event return event