Browse Source

filter objects before triggering events

Blake Blackshear 4 năm trước cách đây
mục cha
commit
3d2f1437e4
2 tập tin đã thay đổi với 16 bổ sung7 xóa
  1. 3 0
      config/config.example.yml
  2. 13 7
      frigate/object_processing.py

+ 3 - 0
config/config.example.yml

@@ -116,6 +116,9 @@ cameras:
     # from the video stream without re-encoding. Clips are them created by using ffmpeg to merge segments
     # without re-encoding. The segements saved are unaltered from what frigate receives to avoid re-encoding.
     # They do not contain bounding boxes. 30 seconds of video is added to the start of the clip.
+    #
+    # NOTE: This will only work for camera feeds that can be copied into the mp4 container format without
+    # encoding such as h264. I do not expect this to work for mjpeg streams.
     ################
     save_clips: False
 

+ 13 - 7
frigate/object_processing.py

@@ -22,6 +22,11 @@ COLOR_MAP = {}
 for key, val in LABELS.items():
     COLOR_MAP[val] = tuple(int(round(255 * c)) for c in cmap(key)[:3])
 
+def filter_false_positives(event):
+    if len(event['history']) < 2:
+        return True
+    return False
+
 class TrackedObjectProcessor(threading.Thread):
     def __init__(self, config, client, topic_prefix, tracked_objects_queue, event_queue):
         threading.Thread.__init__(self)
@@ -65,10 +70,12 @@ class TrackedObjectProcessor(threading.Thread):
             updated_ids = list(set(current_ids).intersection(previous_ids))
 
             for id in new_ids:
-                tracked_objects[id] = current_tracked_objects[id]
-                # publish events to mqtt
-                self.client.publish(f"{self.topic_prefix}/{camera}/events/start", json.dumps(tracked_objects[id]), retain=False)
-                self.event_queue.put(('start', camera, tracked_objects[id]))
+                # only register the object here if we are sure it isnt a false positive
+                if not filter_false_positives(current_tracked_objects[id]):
+                    tracked_objects[id] = current_tracked_objects[id]
+                    # publish events to mqtt
+                    self.client.publish(f"{self.topic_prefix}/{camera}/events/start", json.dumps(tracked_objects[id]), retain=False)
+                    self.event_queue.put(('start', camera, tracked_objects[id]))
             
             for id in updated_ids:
                 tracked_objects[id] = current_tracked_objects[id]
@@ -139,11 +146,10 @@ class TrackedObjectProcessor(threading.Thread):
             ###
             # Report over MQTT
             ###
-            # count objects with more than 2 entries in history by type
+            # count objects by type
             obj_counter = Counter()
             for obj in tracked_objects.values():
-                if len(obj['history']) > 1:
-                    obj_counter[obj['label']] += 1
+                obj_counter[obj['label']] += 1
                     
             # report on detected objects
             for obj_name, count in obj_counter.items():