mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	better frame handling for best images
This commit is contained in:
		
							parent
							
								
									4e113e62c0
								
							
						
					
					
						commit
						977785fb10
					
				@ -236,7 +236,7 @@ class CameraState():
 | 
				
			|||||||
        self.config = config
 | 
					        self.config = config
 | 
				
			||||||
        self.camera_config = config.cameras[name]
 | 
					        self.camera_config = config.cameras[name]
 | 
				
			||||||
        self.frame_manager = frame_manager
 | 
					        self.frame_manager = frame_manager
 | 
				
			||||||
        self.best_objects = {}
 | 
					        self.best_objects: Dict[str, TrackedObject] = {}
 | 
				
			||||||
        self.object_status = defaultdict(lambda: 'OFF')
 | 
					        self.object_status = defaultdict(lambda: 'OFF')
 | 
				
			||||||
        self.tracked_objects: Dict[str, TrackedObject] = {}
 | 
					        self.tracked_objects: Dict[str, TrackedObject] = {}
 | 
				
			||||||
        self.thumbnail_frames = {}
 | 
					        self.thumbnail_frames = {}
 | 
				
			||||||
@ -339,18 +339,13 @@ class CameraState():
 | 
				
			|||||||
                now = datetime.datetime.now().timestamp()
 | 
					                now = datetime.datetime.now().timestamp()
 | 
				
			||||||
                # if the object is a higher score than the current best score 
 | 
					                # if the object is a higher score than the current best score 
 | 
				
			||||||
                # or the current object is older than desired, use the new object
 | 
					                # or the current object is older than desired, use the new object
 | 
				
			||||||
                if is_better_thumbnail(current_best['thumbnail'], obj.thumbnail, self.camera_config.frame_shape) or (now - current_best['frame_time']) > self.config.best_image_timeout:
 | 
					                if (is_better_thumbnail(current_best.thumbnail_data, obj.thumbnail_data, self.camera_config.frame_shape) 
 | 
				
			||||||
                    obj_copy = copy.deepcopy(obj.obj_data)
 | 
					                    or (now - current_best.thumbnail_data['frame_time']) > self.camera_config.best_image_timeout):
 | 
				
			||||||
                    obj_copy['thumbnail'] = copy.deepcopy(obj.thumbnail_data)
 | 
					                    self.best_objects[object_type] = obj
 | 
				
			||||||
                    obj_copy['frame'] = np.copy(current_frame)
 | 
					 | 
				
			||||||
                    self.best_objects[object_type] = obj_copy
 | 
					 | 
				
			||||||
                    for c in self.callbacks['snapshot']:
 | 
					                    for c in self.callbacks['snapshot']:
 | 
				
			||||||
                        c(self.name, self.best_objects[object_type])
 | 
					                        c(self.name, self.best_objects[object_type])
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                obj_copy = copy.deepcopy(obj)
 | 
					                self.best_objects[object_type] = obj
 | 
				
			||||||
                obj_copy['thumbnail'] = copy.deepcopy(obj.thumbnail_data)
 | 
					 | 
				
			||||||
                obj_copy['frame'] = np.copy(current_frame)
 | 
					 | 
				
			||||||
                self.best_objects[object_type] = obj_copy
 | 
					 | 
				
			||||||
                for c in self.callbacks['snapshot']:
 | 
					                for c in self.callbacks['snapshot']:
 | 
				
			||||||
                    c(self.name, self.best_objects[object_type])
 | 
					                    c(self.name, self.best_objects[object_type])
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@ -379,7 +374,8 @@ class CameraState():
 | 
				
			|||||||
        
 | 
					        
 | 
				
			||||||
        # cleanup thumbnail frame cache
 | 
					        # cleanup thumbnail frame cache
 | 
				
			||||||
        current_thumb_frames = set([obj.thumbnail_data['frame_time'] for obj in self.tracked_objects.values() if not obj.false_positive])
 | 
					        current_thumb_frames = set([obj.thumbnail_data['frame_time'] for obj in self.tracked_objects.values() if not obj.false_positive])
 | 
				
			||||||
        thumb_frames_to_delete = [t for t in self.thumbnail_frames.keys() if not t in current_thumb_frames]
 | 
					        current_best_frames = set(obj.thumbnail_data['frame_time'] for obj in self.best_objects.values())
 | 
				
			||||||
 | 
					        thumb_frames_to_delete = [t for t in self.thumbnail_frames.keys() if not t in current_thumb_frames and not t in current_best_frames]
 | 
				
			||||||
        for t in thumb_frames_to_delete:
 | 
					        for t in thumb_frames_to_delete:
 | 
				
			||||||
            del self.thumbnail_frames[t]
 | 
					            del self.thumbnail_frames[t]
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@ -418,7 +414,7 @@ class TrackedObjectProcessor(threading.Thread):
 | 
				
			|||||||
            self.event_queue.put(('end', camera, obj.to_dict()))
 | 
					            self.event_queue.put(('end', camera, obj.to_dict()))
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        def snapshot(camera, obj: TrackedObject):
 | 
					        def snapshot(camera, obj: TrackedObject):
 | 
				
			||||||
            self.client.publish(f"{self.topic_prefix}/{camera}/{obj['label']}/snapshot", obj.snapshot_jpg, retain=True)
 | 
					            self.client.publish(f"{self.topic_prefix}/{camera}/{obj.obj_data['label']}/snapshot", obj.snapshot_jpg, retain=True)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        def object_status(camera, object_name, status):
 | 
					        def object_status(camera, object_name, status):
 | 
				
			||||||
            self.client.publish(f"{self.topic_prefix}/{camera}/{object_name}", status, retain=False)
 | 
					            self.client.publish(f"{self.topic_prefix}/{camera}/{object_name}", status, retain=False)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user