save and delete thumbnails directly

This commit is contained in:
Josh Hawkins 2025-07-03 16:26:17 -05:00
parent daccbd9c2b
commit 59358e2598
4 changed files with 44 additions and 43 deletions

View File

@ -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={

View File

@ -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"

View File

@ -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),
},
)

View File

@ -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: