From 7500b41d411204332512558d03106cca7cc1c172 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 19 Mar 2024 13:43:50 -0600 Subject: [PATCH] Configure loitering --- frigate/object_processing.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/frigate/object_processing.py b/frigate/object_processing.py index f3bb54adc..6c393383c 100644 --- a/frigate/object_processing.py +++ b/frigate/object_processing.py @@ -116,7 +116,8 @@ class TrackedObject: self.colormap = colormap self.camera_config = camera_config self.frame_cache = frame_cache - self.zone_presence = {} + self.zone_presence: dict[str, int] = {} + self.zone_loitering: dict[str, int] = {} self.current_zones = [] self.entered_zones = [] self.attributes = defaultdict(float) @@ -198,10 +199,15 @@ class TrackedObject: # an object is only considered present in a zone if it has a zone inertia of 3+ if self.zone_presence[name] >= zone.inertia: - current_zones.append(name) + loitering_score = self.zone_loitering.get(name, 0) + self.zone_loitering[name] = loitering_score + 1 - if name not in self.entered_zones: - self.entered_zones.append(name) + # loitering time is configured as seconds, convert to count of frames + if self.zone_loitering[name] >= (self.camera_config.zones[name].loitering_time * self.camera_config.detect.fps): + current_zones.append(name) + + if name not in self.entered_zones: + self.entered_zones.append(name) else: # once an object has a zone inertia of 3+ it is not checked anymore if 0 < zone_score < zone.inertia: