forked from Github/frigate
update events model
This commit is contained in:
@@ -135,12 +135,14 @@ class CameraState():
|
||||
for id in new_ids:
|
||||
self.tracked_objects[id] = tracked_objects[id]
|
||||
self.tracked_objects[id]['zones'] = []
|
||||
self.tracked_objects[id]['entered_zones'] = set()
|
||||
|
||||
# start the score history
|
||||
self.tracked_objects[id]['score_history'] = [self.tracked_objects[id]['score']]
|
||||
|
||||
# calculate if this is a false positive
|
||||
self.tracked_objects[id]['computed_score'] = self.compute_score(self.tracked_objects[id])
|
||||
self.tracked_objects[id]['top_score'] = self.tracked_objects[id]['computed_score']
|
||||
self.tracked_objects[id]['false_positive'] = self.false_positive(self.tracked_objects[id])
|
||||
|
||||
# call event handlers
|
||||
@@ -160,7 +162,10 @@ class CameraState():
|
||||
self.tracked_objects[id]['score_history'] = self.tracked_objects[id]['score_history'][-10:]
|
||||
|
||||
# calculate if this is a false positive
|
||||
self.tracked_objects[id]['computed_score'] = self.compute_score(self.tracked_objects[id])
|
||||
computed_score = self.compute_score(self.tracked_objects[id])
|
||||
self.tracked_objects[id]['computed_score'] = computed_score
|
||||
if computed_score > self.tracked_objects[id]['top_score']:
|
||||
self.tracked_objects[id]['top_score'] = computed_score
|
||||
self.tracked_objects[id]['false_positive'] = self.false_positive(self.tracked_objects[id])
|
||||
|
||||
# call event handlers
|
||||
@@ -186,6 +191,8 @@ class CameraState():
|
||||
# if the object passed the filters once, dont apply again
|
||||
if name in obj.get('zones', []) or not zone_filtered(obj, zone.get('filters', {})):
|
||||
current_zones.append(name)
|
||||
obj['entered_zones'].add(name)
|
||||
|
||||
|
||||
obj['zones'] = current_zones
|
||||
|
||||
@@ -255,14 +262,33 @@ class TrackedObjectProcessor(threading.Thread):
|
||||
|
||||
def start(camera, obj):
|
||||
# publish events to mqtt
|
||||
self.client.publish(f"{self.topic_prefix}/{camera}/events/start", json.dumps(obj), retain=False)
|
||||
event_data = {
|
||||
'id': obj['id'],
|
||||
'label': obj['label'],
|
||||
'camera': camera,
|
||||
'start_time': obj['start_time'],
|
||||
'top_score': obj['top_score'],
|
||||
'false_positive': obj['false_positive'],
|
||||
'zones': list(obj['entered_zones'])
|
||||
}
|
||||
self.client.publish(f"{self.topic_prefix}/{camera}/events/start", json.dumps(event_data), retain=False)
|
||||
self.event_queue.put(('start', camera, obj))
|
||||
|
||||
def update(camera, obj):
|
||||
pass
|
||||
|
||||
def end(camera, obj):
|
||||
self.client.publish(f"{self.topic_prefix}/{camera}/events/end", json.dumps(obj), retain=False)
|
||||
event_data = {
|
||||
'id': obj['id'],
|
||||
'label': obj['label'],
|
||||
'camera': camera,
|
||||
'start_time': obj['start_time'],
|
||||
'end_time': obj['end_time'],
|
||||
'top_score': obj['top_score'],
|
||||
'false_positive': obj['false_positive'],
|
||||
'zones': list(obj['entered_zones'])
|
||||
}
|
||||
self.client.publish(f"{self.topic_prefix}/{camera}/events/end", json.dumps(event_data), retain=False)
|
||||
self.event_queue.put(('end', camera, obj))
|
||||
|
||||
def snapshot(camera, obj):
|
||||
|
||||
Reference in New Issue
Block a user