diff --git a/frigate/api/event.py b/frigate/api/event.py index 1debf10dc..d76e5f10b 100644 --- a/frigate/api/event.py +++ b/frigate/api/event.py @@ -1539,9 +1539,19 @@ def create_trigger_embedding( if body.type == "thumbnail": # Save image to the triggers directory - context.save_trigger_thumbnail( - camera, body.data, (base64.b64encode(thumbnail).decode("ASCII")) - ) + try: + os.makedirs(os.path.join(TRIGGER_DIR, camera), exist_ok=True) + with open( + os.path.join(TRIGGER_DIR, camera, f"{body.data}.webp"), "wb" + ) as f: + f.write(thumbnail) + logger.debug( + f"Writing thumbnail for trigger with data {body.data} in {camera}." + ) + except Exception as e: + logger.error( + f"Failed to write thumbnail for trigger with data {body.data} in {camera}: {e}" + ) Trigger.create( camera=camera, @@ -1653,7 +1663,15 @@ def update_trigger_embedding( if trigger: # Update existing trigger if trigger.data != body.data: # Delete old thumbnail only if data changes - context.delete_trigger_thumbnail(camera, trigger.data) + try: + os.remove(os.path.join(TRIGGER_DIR, camera, f"{trigger.data}.webp")) + logger.debug( + f"Deleted thumbnail for trigger with data {trigger.data} in {camera}." + ) + except Exception as e: + logger.error( + f"Failed to delete thumbnail for trigger with data {trigger.data} in {camera}: {e}" + ) Trigger.update( data=body.data, @@ -1679,9 +1697,19 @@ def update_trigger_embedding( if body.type == "thumbnail": # Save image to the triggers directory - context.save_trigger_thumbnail( - camera, body.data, (base64.b64encode(thumbnail).decode("ASCII")) - ) + try: + os.makedirs(os.path.join(TRIGGER_DIR, camera), exist_ok=True) + with open( + os.path.join(TRIGGER_DIR, camera, f"{body.data}.webp"), "wb" + ) as f: + f.write(thumbnail) + logger.debug( + f"Writing thumbnail for trigger with data {body.data} in {camera}." + ) + except Exception as e: + logger.error( + f"Failed to write thumbnail for trigger with data {body.data} in {camera}: {e}" + ) return JSONResponse( content={ @@ -1736,8 +1764,15 @@ def delete_trigger_embedding( status_code=401, ) - context: EmbeddingsContext = request.app.embeddings - context.delete_trigger_thumbnail(camera, trigger.data) + try: + os.remove(os.path.join(TRIGGER_DIR, camera, f"{trigger.data}.webp")) + logger.debug( + f"Deleted thumbnail for trigger with data {trigger.data} in {camera}." + ) + except Exception as e: + logger.error( + f"Failed to delete thumbnail for trigger with data {trigger.data} in {camera}: {e}" + ) return JSONResponse( content={ diff --git a/frigate/comms/embeddings_updater.py b/frigate/comms/embeddings_updater.py index 5e8d0b96b..f97319051 100644 --- a/frigate/comms/embeddings_updater.py +++ b/frigate/comms/embeddings_updater.py @@ -23,8 +23,6 @@ class EmbeddingsRequestEnum(Enum): embed_thumbnail = "embed_thumbnail" generate_search = "generate_search" reindex = "reindex" - write_trigger_thumbnail = "write_trigger_thumbnail" - remove_trigger_thumbnail = "remove_trigger_thumbnail" # LPR reprocess_plate = "reprocess_plate" diff --git a/frigate/embeddings/__init__.py b/frigate/embeddings/__init__.py index 94c971939..f3acbbcf7 100644 --- a/frigate/embeddings/__init__.py +++ b/frigate/embeddings/__init__.py @@ -299,24 +299,3 @@ class EmbeddingsContext: EmbeddingsRequestEnum.embed_thumbnail.value, {"id": str(event_id), "thumbnail": str(thumbnail), "upsert": False}, ) - - def save_trigger_thumbnail( - self, camera: str, event_id: str, thumbnail: bytes - ) -> None: - self.requestor.send_data( - EmbeddingsRequestEnum.write_trigger_thumbnail.value, - { - "camera": str(camera), - "event_id": str(event_id), - "thumbnail": str(thumbnail), - }, - ) - - def delete_trigger_thumbnail(self, camera: str, event_id: str) -> None: - self.requestor.send_data( - EmbeddingsRequestEnum.remove_trigger_thumbnail.value, - { - "camera": str(camera), - "event_id": str(event_id), - }, - ) diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 53935100d..ec8e20a48 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -292,17 +292,6 @@ class EmbeddingMaintainer(threading.Thread): elif topic == EmbeddingsRequestEnum.reindex.value: response = self.embeddings.start_reindex() return "started" if response else "in_progress" - elif topic == EmbeddingsRequestEnum.write_trigger_thumbnail.value: - thumbnail = base64.b64decode(data["thumbnail"]) - self.embeddings.write_trigger_thumbnail( - data["camera"], data["event_id"], thumbnail - ) - return - elif topic == EmbeddingsRequestEnum.remove_trigger_thumbnail.value: - self.embeddings.remove_trigger_thumbnail( - data["camera"], data["event_id"] - ) - return processors = [self.realtime_processors, self.post_processors] for processor_list in processors: