mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-26 19:06: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