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
|
return
|
||||||
|
|
||||||
with open(f"{os.path.join(self.clip_dir, clip_name)}.json", 'w') as outfile:
|
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):
|
def run(self):
|
||||||
while True:
|
while True:
|
||||||
|
@ -135,12 +135,14 @@ class CameraState():
|
|||||||
for id in new_ids:
|
for id in new_ids:
|
||||||
self.tracked_objects[id] = tracked_objects[id]
|
self.tracked_objects[id] = tracked_objects[id]
|
||||||
self.tracked_objects[id]['zones'] = []
|
self.tracked_objects[id]['zones'] = []
|
||||||
|
self.tracked_objects[id]['entered_zones'] = set()
|
||||||
|
|
||||||
# start the score history
|
# start the score history
|
||||||
self.tracked_objects[id]['score_history'] = [self.tracked_objects[id]['score']]
|
self.tracked_objects[id]['score_history'] = [self.tracked_objects[id]['score']]
|
||||||
|
|
||||||
# calculate if this is a false positive
|
# calculate if this is a false positive
|
||||||
self.tracked_objects[id]['computed_score'] = self.compute_score(self.tracked_objects[id])
|
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])
|
self.tracked_objects[id]['false_positive'] = self.false_positive(self.tracked_objects[id])
|
||||||
|
|
||||||
# call event handlers
|
# call event handlers
|
||||||
@ -160,7 +162,10 @@ class CameraState():
|
|||||||
self.tracked_objects[id]['score_history'] = self.tracked_objects[id]['score_history'][-10:]
|
self.tracked_objects[id]['score_history'] = self.tracked_objects[id]['score_history'][-10:]
|
||||||
|
|
||||||
# calculate if this is a false positive
|
# 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])
|
self.tracked_objects[id]['false_positive'] = self.false_positive(self.tracked_objects[id])
|
||||||
|
|
||||||
# call event handlers
|
# call event handlers
|
||||||
@ -186,6 +191,8 @@ class CameraState():
|
|||||||
# if the object passed the filters once, dont apply again
|
# if the object passed the filters once, dont apply again
|
||||||
if name in obj.get('zones', []) or not zone_filtered(obj, zone.get('filters', {})):
|
if name in obj.get('zones', []) or not zone_filtered(obj, zone.get('filters', {})):
|
||||||
current_zones.append(name)
|
current_zones.append(name)
|
||||||
|
obj['entered_zones'].add(name)
|
||||||
|
|
||||||
|
|
||||||
obj['zones'] = current_zones
|
obj['zones'] = current_zones
|
||||||
|
|
||||||
@ -255,14 +262,33 @@ class TrackedObjectProcessor(threading.Thread):
|
|||||||
|
|
||||||
def start(camera, obj):
|
def start(camera, obj):
|
||||||
# publish events to mqtt
|
# 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))
|
self.event_queue.put(('start', camera, obj))
|
||||||
|
|
||||||
def update(camera, obj):
|
def update(camera, obj):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def end(camera, obj):
|
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))
|
self.event_queue.put(('end', camera, obj))
|
||||||
|
|
||||||
def snapshot(camera, obj):
|
def snapshot(camera, obj):
|
||||||
|
@ -23,7 +23,6 @@ class ObjectTracker():
|
|||||||
id = f"{obj['frame_time']}-{rand_id}"
|
id = f"{obj['frame_time']}-{rand_id}"
|
||||||
obj['id'] = id
|
obj['id'] = id
|
||||||
obj['start_time'] = obj['frame_time']
|
obj['start_time'] = obj['frame_time']
|
||||||
obj['top_score'] = obj['score']
|
|
||||||
self.tracked_objects[id] = obj
|
self.tracked_objects[id] = obj
|
||||||
self.disappeared[id] = 0
|
self.disappeared[id] = 0
|
||||||
|
|
||||||
@ -34,8 +33,6 @@ class ObjectTracker():
|
|||||||
def update(self, id, new_obj):
|
def update(self, id, new_obj):
|
||||||
self.disappeared[id] = 0
|
self.disappeared[id] = 0
|
||||||
self.tracked_objects[id].update(new_obj)
|
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):
|
def match_and_update(self, frame_time, new_objects):
|
||||||
# group by name
|
# group by name
|
||||||
|
Loading…
Reference in New Issue
Block a user