Imporove attributes handling (#22035)
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled

* Revert "Fix saving attributes for object to DB (#22000)"

This reverts commit 73c1e12faf.

* Automatically handle attributes by obj data parsing
This commit is contained in:
Nicolas Mowen 2026-02-18 10:48:45 -07:00 committed by GitHub
parent 3101d5f27b
commit ef5608a970
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 20 deletions

View File

@ -33,7 +33,6 @@ from frigate.config.camera.updater import (
CameraConfigUpdateEnum, CameraConfigUpdateEnum,
CameraConfigUpdateSubscriber, CameraConfigUpdateSubscriber,
) )
from frigate.config.classification import ObjectClassificationType
from frigate.const import ( from frigate.const import (
FAST_QUEUE_TIMEOUT, FAST_QUEUE_TIMEOUT,
UPDATE_CAMERA_ACTIVITY, UPDATE_CAMERA_ACTIVITY,
@ -760,16 +759,8 @@ class TrackedObjectProcessor(threading.Thread):
self.update_mqtt_motion(camera, frame_time, motion_boxes) self.update_mqtt_motion(camera, frame_time, motion_boxes)
attribute_model_names = [
name
for name, model_config in self.config.classification.custom.items()
if model_config.object_config
and model_config.object_config.classification_type
== ObjectClassificationType.attribute
]
tracked_objects = [ tracked_objects = [
o.to_dict(attribute_model_names=attribute_model_names) o.to_dict() for o in camera_state.tracked_objects.values()
for o in camera_state.tracked_objects.values()
] ]
# publish info on this frame # publish info on this frame

View File

@ -376,11 +376,15 @@ class TrackedObject:
) )
return (thumb_update, significant_change, path_update, autotracker_update) return (thumb_update, significant_change, path_update, autotracker_update)
def to_dict( def to_dict(self) -> dict[str, Any]:
self, # Tracking internals excluded from output (centroid, estimate, estimate_velocity)
attribute_model_names: list[str] | None = None, _EXCLUDED_OBJ_DATA_KEYS = {
) -> dict[str, Any]: "centroid",
event = { "estimate",
"estimate_velocity",
}
event: dict[str, Any] = {
"id": self.obj_data["id"], "id": self.obj_data["id"],
"camera": self.camera_config.name, "camera": self.camera_config.name,
"frame_time": self.obj_data["frame_time"], "frame_time": self.obj_data["frame_time"],
@ -414,11 +418,11 @@ class TrackedObject:
"path_data": self.path_data.copy(), "path_data": self.path_data.copy(),
"recognized_license_plate": self.obj_data.get("recognized_license_plate"), "recognized_license_plate": self.obj_data.get("recognized_license_plate"),
} }
if attribute_model_names is not None:
for name in attribute_model_names: # Add any other obj_data keys (e.g. custom attribute fields) not yet included
value = self.obj_data.get(name) for key, value in self.obj_data.items():
if value is not None: if key not in _EXCLUDED_OBJ_DATA_KEYS and key not in event:
event[name] = value event[key] = value
return event return event