mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +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