From 1fcadb09b0d16db075c1f3d07adfbe9a1cfb16d1 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 15 May 2025 13:12:11 -0600 Subject: [PATCH] Cleanup resetting tracked object activity --- .../common/license_plate/mixin.py | 21 +++++++++++++++++- frigate/data_processing/real_time/face.py | 3 ++- .../real_time/license_plate.py | 22 ++----------------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/frigate/data_processing/common/license_plate/mixin.py b/frigate/data_processing/common/license_plate/mixin.py index 62a13cec0..78f7dbb90 100644 --- a/frigate/data_processing/common/license_plate/mixin.py +++ b/frigate/data_processing/common/license_plate/mixin.py @@ -1570,10 +1570,29 @@ class LicensePlateProcessingMixin: def handle_request(self, topic, request_data) -> dict[str, Any] | None: return - def expire_object(self, object_id: str, camera: str): + def lpr_expire(self, object_id: str, camera: str): + print( + f"expiring {self.detected_license_plates} and we have cars {self.camera_current_cars}" + ) if object_id in self.detected_license_plates: self.detected_license_plates.pop(object_id) + if object_id in self.camera_current_cars.get(camera, []): + self.camera_current_cars[camera].remove(object_id) + + if len(self.camera_current_cars[camera]) == 0: + self.requestor.send_data( + "tracked_object_update", + json.dumps( + { + "type": TrackedObjectUpdateTypesEnum.lpr, + "name": None, + "plate": None, + "camera": camera, + } + ), + ) + class CTCDecoder: """ diff --git a/frigate/data_processing/real_time/face.py b/frigate/data_processing/real_time/face.py index bb427b846..dadad0fad 100644 --- a/frigate/data_processing/real_time/face.py +++ b/frigate/data_processing/real_time/face.py @@ -293,10 +293,11 @@ class FaceRealTimeProcessor(RealTimeProcessorApi): if camera not in self.camera_current_people: self.camera_current_people[camera] = [] + self.camera_current_people[camera].append(id) + self.person_face_history[id].append( (sub_label, score, face_frame.shape[0] * face_frame.shape[1]) ) - self.camera_current_people[camera].append(id) (weighted_sub_label, weighted_score) = self.weighted_average( self.person_face_history[id] ) diff --git a/frigate/data_processing/real_time/license_plate.py b/frigate/data_processing/real_time/license_plate.py index 13be45a77..59c625de2 100644 --- a/frigate/data_processing/real_time/license_plate.py +++ b/frigate/data_processing/real_time/license_plate.py @@ -1,6 +1,5 @@ """Handle processing images for face detection and recognition.""" -import json import logging from typing import Any @@ -15,7 +14,6 @@ from frigate.data_processing.common.license_plate.mixin import ( from frigate.data_processing.common.license_plate.model import ( LicensePlateModelRunner, ) -from frigate.types import TrackedObjectUpdateTypesEnum from ..types import DataProcessorMetrics from .api import RealTimeProcessorApi @@ -55,21 +53,5 @@ class LicensePlateRealTimeProcessor(LicensePlateProcessingMixin, RealTimeProcess return def expire_object(self, object_id: str, camera: str): - if object_id in self.detected_license_plates: - self.detected_license_plates.pop(object_id) - - if object_id in self.camera_current_cars.get(camera, []): - self.camera_current_cars[camera].remove(object_id) - - if len(self.camera_current_cars[camera]) == 0: - self.requestor.send_data( - "tracked_object_update", - json.dumps( - { - "type": TrackedObjectUpdateTypesEnum.lpr, - "name": None, - "plate": None, - "camera": camera, - } - ), - ) + """Expire lpr objects.""" + self.lpr_expire(object_id, camera)