mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-02-09 00:17:00 +01:00
update events model
This commit is contained in:
parent
070c9721b6
commit
d67a56d37e
@ -135,7 +135,16 @@ class EventProcessor(threading.Thread):
|
||||
return
|
||||
|
||||
with open(f"{os.path.join(self.clip_dir, clip_name)}.json", 'w') as outfile:
|
||||
json.dump(event_data, outfile)
|
||||
json.dump({
|
||||
'id': event_data['id'],
|
||||
'label': event_data['label'],
|
||||
'camera': camera,
|
||||
'start_time': event_data['start_time'],
|
||||
'end_time': event_data['end_time'],
|
||||
'top_score': event_data['top_score'],
|
||||
'false_positive': event_data['false_positive'],
|
||||
'zones': list(event_data['entered_zones'])
|
||||
}, outfile)
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
|
@ -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):
|
||||
|
@ -23,7 +23,6 @@ class ObjectTracker():
|
||||
id = f"{obj['frame_time']}-{rand_id}"
|
||||
obj['id'] = id
|
||||
obj['start_time'] = obj['frame_time']
|
||||
obj['top_score'] = obj['score']
|
||||
self.tracked_objects[id] = obj
|
||||
self.disappeared[id] = 0
|
||||
|
||||
@ -34,8 +33,6 @@ class ObjectTracker():
|
||||
def update(self, id, new_obj):
|
||||
self.disappeared[id] = 0
|
||||
self.tracked_objects[id].update(new_obj)
|
||||
if self.tracked_objects[id]['score'] > self.tracked_objects[id]['top_score']:
|
||||
self.tracked_objects[id]['top_score'] = self.tracked_objects[id]['score']
|
||||
|
||||
def match_and_update(self, frame_time, new_objects):
|
||||
# group by name
|
||||
|
Loading…
Reference in New Issue
Block a user