From 265b9fa69815994815007b2557d1bc0701e783ac Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Thu, 27 Mar 2025 09:29:05 -0500 Subject: [PATCH] reindex with api endpoint and zmq --- frigate/api/classification.py | 26 ++++++++++++++++++++++++++ frigate/comms/embeddings_updater.py | 1 + frigate/embeddings/__init__.py | 3 +++ frigate/embeddings/maintainer.py | 3 +++ 4 files changed, 33 insertions(+) diff --git a/frigate/api/classification.py b/frigate/api/classification.py index 975a41c9d..cdeb31df7 100644 --- a/frigate/api/classification.py +++ b/frigate/api/classification.py @@ -298,3 +298,29 @@ def reprocess_license_plate(request: Request, event_id: str): content=response, status_code=200, ) + + +@router.put("/reindex") +def reindex_embeddings(request: Request): + if not request.app.frigate_config.semantic_search.enabled: + message = ( + "Cannot reindex tracked object embeddings, Semantic Search is not enabled." + ) + logger.error(message) + return JSONResponse( + content=( + { + "success": False, + "message": message, + } + ), + status_code=400, + ) + + context: EmbeddingsContext = request.app.embeddings + response = context.reindex_embeddings() + + return JSONResponse( + content=response, + status_code=200, + ) diff --git a/frigate/comms/embeddings_updater.py b/frigate/comms/embeddings_updater.py index fc35c4665..6c26af3d1 100644 --- a/frigate/comms/embeddings_updater.py +++ b/frigate/comms/embeddings_updater.py @@ -17,6 +17,7 @@ class EmbeddingsRequestEnum(Enum): register_face = "register_face" reprocess_face = "reprocess_face" reprocess_plate = "reprocess_plate" + reindex = "reindex" class EmbeddingsResponder: diff --git a/frigate/embeddings/__init__.py b/frigate/embeddings/__init__.py index e0673565b..c60465845 100644 --- a/frigate/embeddings/__init__.py +++ b/frigate/embeddings/__init__.py @@ -250,3 +250,6 @@ class EmbeddingsContext: return self.requestor.send_data( EmbeddingsRequestEnum.reprocess_plate.value, {"event": event} ) + + def reindex_embeddings(self) -> dict[str, any]: + return self.requestor.send_data(EmbeddingsRequestEnum.reindex.value, {}) diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 9b90f6f2c..6bd065ce3 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -206,6 +206,9 @@ class EmbeddingMaintainer(threading.Thread): self.embeddings.embed_description("", data, upsert=False), pack=False, ) + elif topic == EmbeddingsRequestEnum.reindex.value: + self.embeddings.reindex() + return "Embeddings reindex in progress" processors = [self.realtime_processors, self.post_processors] for processor_list in processors: