| 
					
				 | 
			
			
				@@ -161,8 +161,7 @@ class TrackedObject(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             'entered_zones': list(self.entered_zones).copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def snapshot_jpg(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def get_jpg_bytes(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if self._snapshot_jpg_time == self.thumbnail_data['frame_time']: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return self._snapshot_jpg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -410,11 +409,11 @@ class TrackedObjectProcessor(threading.Thread): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if self.config.cameras[camera].save_clips.enabled and not obj.false_positive: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 thumbnail_file_name = f"{camera}-{obj.obj_data['id']}.jpg" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 with open(os.path.join(self.config.save_clips.clips_dir, thumbnail_file_name), 'wb') as f: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    f.write(obj.snapshot_jpg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    f.write(obj.get_jpg_bytes()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.event_queue.put(('end', camera, obj.to_dict())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         def snapshot(camera, obj: TrackedObject): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self.client.publish(f"{self.topic_prefix}/{camera}/{obj.obj_data['label']}/snapshot", obj.snapshot_jpg, retain=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.client.publish(f"{self.topic_prefix}/{camera}/{obj.obj_data['label']}/snapshot", obj.get_jpg_bytes(), retain=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         def object_status(camera, object_name, status): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.client.publish(f"{self.topic_prefix}/{camera}/{object_name}", status, retain=False) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -436,9 +435,13 @@ class TrackedObjectProcessor(threading.Thread): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.zone_data = defaultdict(lambda: defaultdict(lambda: set())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def get_best(self, camera, label): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        best_objects = self.camera_states[camera].best_objects 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if label in best_objects: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return best_objects[label] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # TODO: need a lock here 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        camera_state = self.camera_states[camera] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if label in camera_state.best_objects: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            best_obj = camera_state.best_objects[label] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            best = best_obj.to_dict() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            best['frame'] = camera_state.frame_cache[best_obj.thumbnail_data['frame_time']] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return best 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 |