update events model

This commit is contained in:
Blake Blackshear
2020-10-24 09:49:13 -05:00
parent 070c9721b6
commit d67a56d37e
3 changed files with 39 additions and 7 deletions

View File

@@ -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):