mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-11-03 12:20:31 +03:00
perf(track): avoid per-frame allocations and list lookups in tracker (#23523)
Two small per-object-per-frame improvements in the tracker hot path (match_and_update), both bit-identical: - get_stationary_threshold returned a freshly constructed StationaryThresholds (a dataclass plus a list) on every call for any label not in the three known lists - i.e. for common labels like person/dog. The default thresholds are constant and never mutated, so return a shared module-level singleton, as the other three cases already do. - untracked_object_boxes membership used `box not in [list of boxes]` (O(n)); build a set of box tuples for O(1) membership. Boxes are hashable as tuples and output is unchanged. get_stationary_threshold appeared in a live py-spy --gil profile of a camera process_frames worker. Adds tests for the threshold lookups. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
a2b46f5d84
commit
081d6f95ef
@@ -63,6 +63,9 @@ NON_STATIONARY_OBJECT_THRESHOLDS = StationaryThresholds(
|
||||
max_stationary_history=4,
|
||||
)
|
||||
|
||||
# Default thresholds for any other object label
|
||||
DEFAULT_OBJECT_THRESHOLDS = StationaryThresholds()
|
||||
|
||||
|
||||
def get_stationary_threshold(label: str) -> StationaryThresholds:
|
||||
"""Get the stationary thresholds for a given object label."""
|
||||
@@ -76,7 +79,7 @@ def get_stationary_threshold(label: str) -> StationaryThresholds:
|
||||
if label in NON_STATIONARY_OBJECT_THRESHOLDS.objects:
|
||||
return NON_STATIONARY_OBJECT_THRESHOLDS
|
||||
|
||||
return StationaryThresholds()
|
||||
return DEFAULT_OBJECT_THRESHOLDS
|
||||
|
||||
|
||||
class StationaryMotionClassifier:
|
||||
|
||||
Reference in New Issue
Block a user