mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-01 02:57:41 +03:00
save and delete thumbnails directly
This commit is contained in:
parent
daccbd9c2b
commit
59358e2598
@ -1539,9 +1539,19 @@ def create_trigger_embedding(
|
|||||||
|
|
||||||
if body.type == "thumbnail":
|
if body.type == "thumbnail":
|
||||||
# Save image to the triggers directory
|
# Save image to the triggers directory
|
||||||
context.save_trigger_thumbnail(
|
try:
|
||||||
camera, body.data, (base64.b64encode(thumbnail).decode("ASCII"))
|
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(
|
Trigger.create(
|
||||||
camera=camera,
|
camera=camera,
|
||||||
@ -1653,7 +1663,15 @@ def update_trigger_embedding(
|
|||||||
if trigger:
|
if trigger:
|
||||||
# Update existing trigger
|
# Update existing trigger
|
||||||
if trigger.data != body.data: # Delete old thumbnail only if data changes
|
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(
|
Trigger.update(
|
||||||
data=body.data,
|
data=body.data,
|
||||||
@ -1679,9 +1697,19 @@ def update_trigger_embedding(
|
|||||||
|
|
||||||
if body.type == "thumbnail":
|
if body.type == "thumbnail":
|
||||||
# Save image to the triggers directory
|
# Save image to the triggers directory
|
||||||
context.save_trigger_thumbnail(
|
try:
|
||||||
camera, body.data, (base64.b64encode(thumbnail).decode("ASCII"))
|
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(
|
return JSONResponse(
|
||||||
content={
|
content={
|
||||||
@ -1736,8 +1764,15 @@ def delete_trigger_embedding(
|
|||||||
status_code=401,
|
status_code=401,
|
||||||
)
|
)
|
||||||
|
|
||||||
context: EmbeddingsContext = request.app.embeddings
|
try:
|
||||||
context.delete_trigger_thumbnail(camera, trigger.data)
|
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(
|
return JSONResponse(
|
||||||
content={
|
content={
|
||||||
|
|||||||
@ -23,8 +23,6 @@ class EmbeddingsRequestEnum(Enum):
|
|||||||
embed_thumbnail = "embed_thumbnail"
|
embed_thumbnail = "embed_thumbnail"
|
||||||
generate_search = "generate_search"
|
generate_search = "generate_search"
|
||||||
reindex = "reindex"
|
reindex = "reindex"
|
||||||
write_trigger_thumbnail = "write_trigger_thumbnail"
|
|
||||||
remove_trigger_thumbnail = "remove_trigger_thumbnail"
|
|
||||||
# LPR
|
# LPR
|
||||||
reprocess_plate = "reprocess_plate"
|
reprocess_plate = "reprocess_plate"
|
||||||
|
|
||||||
|
|||||||
@ -299,24 +299,3 @@ class EmbeddingsContext:
|
|||||||
EmbeddingsRequestEnum.embed_thumbnail.value,
|
EmbeddingsRequestEnum.embed_thumbnail.value,
|
||||||
{"id": str(event_id), "thumbnail": str(thumbnail), "upsert": False},
|
{"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),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|||||||
@ -292,17 +292,6 @@ class EmbeddingMaintainer(threading.Thread):
|
|||||||
elif topic == EmbeddingsRequestEnum.reindex.value:
|
elif topic == EmbeddingsRequestEnum.reindex.value:
|
||||||
response = self.embeddings.start_reindex()
|
response = self.embeddings.start_reindex()
|
||||||
return "started" if response else "in_progress"
|
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]
|
processors = [self.realtime_processors, self.post_processors]
|
||||||
for processor_list in processors:
|
for processor_list in processors:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user