Skip to content

Commit

Permalink
filter objects before triggering events
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeblackshear committed Aug 1, 2020
1 parent fbe721c commit 3d2f143
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 7 deletions.
3 changes: 3 additions & 0 deletions config/config.example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
20 changes: 13 additions & 7 deletions frigate/object_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@
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)
Expand Down Expand Up @@ -65,10 +70,12 @@ def run(self):
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]
Expand Down Expand Up @@ -139,11 +146,10 @@ def run(self):
###
# 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():
Expand Down

0 comments on commit 3d2f143

Please sign in to comment.