LPR device selection (#17592)

* config changes

* use device

* docs

* docs

* reset state

* remove auto

* use device

* docs
This commit is contained in:
Josh Hawkins
2025-04-07 20:30:08 -05:00
committed by GitHub
parent cb27bdb2f7
commit 921908fe33
5 changed files with 27 additions and 7 deletions

View File

@@ -19,6 +19,11 @@ class SemanticSearchModelEnum(str, Enum):
jinav2 = "jinav2"
class LPRDeviceEnum(str, Enum):
GPU = "GPU"
CPU = "CPU"
class BirdClassificationConfig(FrigateBaseModel):
enabled: bool = Field(default=False, title="Enable bird classification.")
threshold: float = Field(
@@ -94,6 +99,10 @@ class CameraFaceRecognitionConfig(FrigateBaseModel):
class LicensePlateRecognitionConfig(FrigateBaseModel):
enabled: bool = Field(default=False, title="Enable license plate recognition.")
device: Optional[LPRDeviceEnum] = Field(
default=LPRDeviceEnum.CPU,
title="The device used for license plate recognition.",
)
detection_threshold: float = Field(
default=0.7,
title="License plate object confidence score required to begin running recognition.",

View File

@@ -12,13 +12,13 @@ class LicensePlateModelRunner(DataProcessorModelRunner):
def __init__(self, requestor, device: str = "CPU", model_size: str = "large"):
super().__init__(requestor, device, model_size)
self.detection_model = PaddleOCRDetection(
model_size=model_size, requestor=requestor, device="CPU"
model_size=model_size, requestor=requestor, device=device
)
self.classification_model = PaddleOCRClassification(
model_size=model_size, requestor=requestor, device="CPU"
model_size=model_size, requestor=requestor, device=device
)
self.recognition_model = PaddleOCRRecognition(
model_size=model_size, requestor=requestor, device="CPU"
model_size=model_size, requestor=requestor, device=device
)
self.yolov9_detection_model = LicensePlateDetector(
model_size=model_size, requestor=requestor, device=device

View File

@@ -108,7 +108,9 @@ class EmbeddingMaintainer(threading.Thread):
# model runners to share between realtime and post processors
if self.config.lpr.enabled:
lpr_model_runner = LicensePlateModelRunner(self.requestor, device="AUTO")
lpr_model_runner = LicensePlateModelRunner(
self.requestor, device=self.config.lpr.device
)
# realtime processors
self.realtime_processors: list[RealTimeProcessorApi] = []

View File

@@ -94,6 +94,10 @@ class ONNXModelRunner:
if self.type == "ov":
infer_request = self.interpreter.create_infer_request()
# This ensures the model starts with a clean state for each sequence
# Important for RNN models like PaddleOCR recognition
infer_request.reset_state()
outputs = infer_request.infer(input)
return outputs