mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-01-21 00:06:44 +01:00
Fix dynamic api ordering (#14022)
* Fix dynamic api ordering * Formatting
This commit is contained in:
parent
50e9c67609
commit
cab497e81e
@ -757,39 +757,6 @@ def event_snapshot(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{camera_name}/{label}/snapshot.jpg")
|
|
||||||
def label_snapshot(request: Request, camera_name: str, label: str):
|
|
||||||
"""Returns the snapshot image from the latest event for the given camera and label combo"""
|
|
||||||
label = unquote(label)
|
|
||||||
if label == "any":
|
|
||||||
event_query = (
|
|
||||||
Event.select(Event.id)
|
|
||||||
.where(Event.camera == camera_name)
|
|
||||||
.where(Event.has_snapshot == True)
|
|
||||||
.order_by(Event.start_time.desc())
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
event_query = (
|
|
||||||
Event.select(Event.id)
|
|
||||||
.where(Event.camera == camera_name)
|
|
||||||
.where(Event.label == label)
|
|
||||||
.where(Event.has_snapshot == True)
|
|
||||||
.order_by(Event.start_time.desc())
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
event = event_query.get()
|
|
||||||
return event_snapshot(request, event.id)
|
|
||||||
except DoesNotExist:
|
|
||||||
frame = np.zeros((720, 1280, 3), np.uint8)
|
|
||||||
ret, jpg = cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY), 70])
|
|
||||||
|
|
||||||
return Response(
|
|
||||||
jpg.tobytes,
|
|
||||||
media_type="image/jpeg",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/events/{event_id}/thumbnail.jpg")
|
@router.get("/events/{event_id}/thumbnail.jpg")
|
||||||
def event_thumbnail(
|
def event_thumbnail(
|
||||||
request: Request,
|
request: Request,
|
||||||
@ -855,48 +822,6 @@ def event_thumbnail(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{camera_name}/{label}/best.jpg")
|
|
||||||
@router.get("/{camera_name}/{label}/thumbnail.jpg")
|
|
||||||
def label_thumbnail(request: Request, camera_name: str, label: str):
|
|
||||||
label = unquote(label)
|
|
||||||
event_query = Event.select(fn.MAX(Event.id)).where(Event.camera == camera_name)
|
|
||||||
if label != "any":
|
|
||||||
event_query = event_query.where(Event.label == label)
|
|
||||||
|
|
||||||
try:
|
|
||||||
event_id = event_query.scalar()
|
|
||||||
|
|
||||||
return event_thumbnail(request, event_id, 60)
|
|
||||||
except DoesNotExist:
|
|
||||||
frame = np.zeros((175, 175, 3), np.uint8)
|
|
||||||
ret, jpg = cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY), 70])
|
|
||||||
|
|
||||||
return Response(
|
|
||||||
jpg.tobytes,
|
|
||||||
media_type="image/jpeg",
|
|
||||||
headers={"Cache-Control": "no-store"},
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{camera_name}/{label}/clip.mp4")
|
|
||||||
def label_clip(request: Request, camera_name: str, label: str):
|
|
||||||
label = unquote(label)
|
|
||||||
event_query = Event.select(fn.MAX(Event.id)).where(
|
|
||||||
Event.camera == camera_name, Event.has_clip == True
|
|
||||||
)
|
|
||||||
if label != "any":
|
|
||||||
event_query = event_query.where(Event.label == label)
|
|
||||||
|
|
||||||
try:
|
|
||||||
event = event_query.get()
|
|
||||||
|
|
||||||
return event_clip(request, event.id)
|
|
||||||
except DoesNotExist:
|
|
||||||
return JSONResponse(
|
|
||||||
content={"success": False, "message": "Event not found"}, status_code=404
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{camera_name}/grid.jpg")
|
@router.get("/{camera_name}/grid.jpg")
|
||||||
def grid_snapshot(
|
def grid_snapshot(
|
||||||
request: Request, camera_name: str, color: str = "green", font_scale: float = 0.5
|
request: Request, camera_name: str, color: str = "green", font_scale: float = 0.5
|
||||||
@ -1553,3 +1478,81 @@ def preview_thumbnail(file_name: str):
|
|||||||
"Cache-Control": "private, max-age=31536000",
|
"Cache-Control": "private, max-age=31536000",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
####################### dynamic routes ###########################
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{camera_name}/{label}/best.jpg")
|
||||||
|
@router.get("/{camera_name}/{label}/thumbnail.jpg")
|
||||||
|
def label_thumbnail(request: Request, camera_name: str, label: str):
|
||||||
|
label = unquote(label)
|
||||||
|
event_query = Event.select(fn.MAX(Event.id)).where(Event.camera == camera_name)
|
||||||
|
if label != "any":
|
||||||
|
event_query = event_query.where(Event.label == label)
|
||||||
|
|
||||||
|
try:
|
||||||
|
event_id = event_query.scalar()
|
||||||
|
|
||||||
|
return event_thumbnail(request, event_id, 60)
|
||||||
|
except DoesNotExist:
|
||||||
|
frame = np.zeros((175, 175, 3), np.uint8)
|
||||||
|
ret, jpg = cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY), 70])
|
||||||
|
|
||||||
|
return Response(
|
||||||
|
jpg.tobytes,
|
||||||
|
media_type="image/jpeg",
|
||||||
|
headers={"Cache-Control": "no-store"},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{camera_name}/{label}/clip.mp4")
|
||||||
|
def label_clip(request: Request, camera_name: str, label: str):
|
||||||
|
label = unquote(label)
|
||||||
|
event_query = Event.select(fn.MAX(Event.id)).where(
|
||||||
|
Event.camera == camera_name, Event.has_clip == True
|
||||||
|
)
|
||||||
|
if label != "any":
|
||||||
|
event_query = event_query.where(Event.label == label)
|
||||||
|
|
||||||
|
try:
|
||||||
|
event = event_query.get()
|
||||||
|
|
||||||
|
return event_clip(request, event.id)
|
||||||
|
except DoesNotExist:
|
||||||
|
return JSONResponse(
|
||||||
|
content={"success": False, "message": "Event not found"}, status_code=404
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{camera_name}/{label}/snapshot.jpg")
|
||||||
|
def label_snapshot(request: Request, camera_name: str, label: str):
|
||||||
|
"""Returns the snapshot image from the latest event for the given camera and label combo"""
|
||||||
|
label = unquote(label)
|
||||||
|
if label == "any":
|
||||||
|
event_query = (
|
||||||
|
Event.select(Event.id)
|
||||||
|
.where(Event.camera == camera_name)
|
||||||
|
.where(Event.has_snapshot == True)
|
||||||
|
.order_by(Event.start_time.desc())
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
event_query = (
|
||||||
|
Event.select(Event.id)
|
||||||
|
.where(Event.camera == camera_name)
|
||||||
|
.where(Event.label == label)
|
||||||
|
.where(Event.has_snapshot == True)
|
||||||
|
.order_by(Event.start_time.desc())
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
event = event_query.get()
|
||||||
|
return event_snapshot(request, event.id)
|
||||||
|
except DoesNotExist:
|
||||||
|
frame = np.zeros((720, 1280, 3), np.uint8)
|
||||||
|
ret, jpg = cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY), 70])
|
||||||
|
|
||||||
|
return Response(
|
||||||
|
jpg.tobytes,
|
||||||
|
media_type="image/jpeg",
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user