mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-04-23 23:34:32 +03:00
implement replacement rules for cleaning up and normalizing plates
This commit is contained in:
parent
c0fc598224
commit
f9f8c4cceb
@ -217,6 +217,13 @@ class CameraFaceRecognitionConfig(FrigateBaseModel):
|
|||||||
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
||||||
|
|
||||||
|
|
||||||
|
class ReplaceRule(FrigateBaseModel):
|
||||||
|
pattern: str = Field(..., title="Regex pattern to match.")
|
||||||
|
replacement: str = Field(
|
||||||
|
..., title="Replacement string (supports backrefs like '\\1')."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class LicensePlateRecognitionConfig(FrigateBaseModel):
|
class LicensePlateRecognitionConfig(FrigateBaseModel):
|
||||||
enabled: bool = Field(default=False, title="Enable license plate recognition.")
|
enabled: bool = Field(default=False, title="Enable license plate recognition.")
|
||||||
model_size: str = Field(
|
model_size: str = Field(
|
||||||
@ -269,6 +276,10 @@ class LicensePlateRecognitionConfig(FrigateBaseModel):
|
|||||||
title="The device key to use for LPR.",
|
title="The device key to use for LPR.",
|
||||||
description="This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information",
|
description="This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information",
|
||||||
)
|
)
|
||||||
|
replace_rules: List[ReplaceRule] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
title="List of regex replacement rules for normalizing detected plates. Each rule has 'pattern' and 'replacement'.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CameraLicensePlateRecognitionConfig(FrigateBaseModel):
|
class CameraLicensePlateRecognitionConfig(FrigateBaseModel):
|
||||||
|
|||||||
@ -360,6 +360,27 @@ class LicensePlateProcessingMixin:
|
|||||||
conf for conf_list in qualifying_confidences for conf in conf_list
|
conf for conf_list in qualifying_confidences for conf in conf_list
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Apply replace rules to combined_plate if configured
|
||||||
|
original_combined = combined_plate
|
||||||
|
if self.lpr_config.replace_rules:
|
||||||
|
for rule in self.lpr_config.replace_rules:
|
||||||
|
try:
|
||||||
|
pattern = getattr(rule, "pattern", "")
|
||||||
|
replacement = getattr(rule, "replacement", "")
|
||||||
|
if pattern:
|
||||||
|
combined_plate = re.sub(
|
||||||
|
pattern, replacement, combined_plate
|
||||||
|
)
|
||||||
|
except re.error as e:
|
||||||
|
logger.warning(
|
||||||
|
f"{camera}: Invalid regex in replace_rules '{pattern}': {e}"
|
||||||
|
)
|
||||||
|
|
||||||
|
if combined_plate != original_combined:
|
||||||
|
logger.debug(
|
||||||
|
f"{camera}: Rules applied: '{original_combined}' -> '{combined_plate}'"
|
||||||
|
)
|
||||||
|
|
||||||
# Compute the combined area for qualifying boxes
|
# Compute the combined area for qualifying boxes
|
||||||
qualifying_boxes = [boxes[i] for i in qualifying_indices]
|
qualifying_boxes = [boxes[i] for i in qualifying_indices]
|
||||||
qualifying_plate_images = [
|
qualifying_plate_images = [
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user