Use api path to determine type (#12031)

* Use api path to determine type

* Use in both cases

* Fix extension parsing
This commit is contained in:
Nicolas Mowen 2024-06-17 14:53:35 -06:00 committed by GitHub
parent 5b60785cca
commit 4635e64b2e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 8 additions and 7 deletions

View File

@ -105,6 +105,7 @@ def latest_frame(camera_name):
"regions": request.args.get("regions", type=int), "regions": request.args.get("regions", type=int),
} }
resize_quality = request.args.get("quality", default=70, type=int) resize_quality = request.args.get("quality", default=70, type=int)
extension = os.path.splitext(request.path)[1][1:]
if camera_name in current_app.frigate_config.cameras: if camera_name in current_app.frigate_config.cameras:
frame = current_app.detected_frames_processor.get_current_frame( frame = current_app.detected_frames_processor.get_current_frame(
@ -147,10 +148,10 @@ def latest_frame(camera_name):
frame = cv2.resize(frame, dsize=(width, height), interpolation=cv2.INTER_AREA) frame = cv2.resize(frame, dsize=(width, height), interpolation=cv2.INTER_AREA)
ret, img = cv2.imencode( ret, img = cv2.imencode(
".webp", frame, [int(cv2.IMWRITE_WEBP_QUALITY), resize_quality] f".{extension}", frame, [int(cv2.IMWRITE_WEBP_QUALITY), resize_quality]
) )
response = make_response(img.tobytes()) response = make_response(img.tobytes())
response.headers["Content-Type"] = "image/webp" response.headers["Content-Type"] = f"image/{extension}"
response.headers["Cache-Control"] = "no-store" response.headers["Cache-Control"] = "no-store"
return response return response
elif camera_name == "birdseye" and current_app.frigate_config.birdseye.restream: elif camera_name == "birdseye" and current_app.frigate_config.birdseye.restream:
@ -165,10 +166,10 @@ def latest_frame(camera_name):
frame = cv2.resize(frame, dsize=(width, height), interpolation=cv2.INTER_AREA) frame = cv2.resize(frame, dsize=(width, height), interpolation=cv2.INTER_AREA)
ret, img = cv2.imencode( ret, img = cv2.imencode(
".webp", frame, [int(cv2.IMWRITE_WEBP_QUALITY), resize_quality] f".{extension}", frame, [int(cv2.IMWRITE_WEBP_QUALITY), resize_quality]
) )
response = make_response(img.tobytes()) response = make_response(img.tobytes())
response.headers["Content-Type"] = "image/webp" response.headers["Content-Type"] = f"image/{extension}"
response.headers["Cache-Control"] = "no-store" response.headers["Cache-Control"] = "no-store"
return response return response
else: else:

View File

@ -47,7 +47,7 @@ export default function CameraImage({
return; return;
} }
imgRef.current.src = `${apiHost}api/${name}/latest.jpg?h=${requestHeight}${ imgRef.current.src = `${apiHost}api/${name}/latest.webp?h=${requestHeight}${
searchParams ? `&${searchParams}` : "" searchParams ? `&${searchParams}` : ""
}`; }`;
}, [apiHost, name, imgRef, searchParams, requestHeight, config]); }, [apiHost, name, imgRef, searchParams, requestHeight, config]);

View File

@ -89,7 +89,7 @@ export default function CameraImage({
if (!config || scaledHeight === 0 || !canvasRef.current) { if (!config || scaledHeight === 0 || !canvasRef.current) {
return; return;
} }
img.src = `${apiHost}api/${name}/latest.jpg?h=${scaledHeight}${ img.src = `${apiHost}api/${name}/latest.webp?h=${scaledHeight}${
searchParams ? `&${searchParams}` : "" searchParams ? `&${searchParams}` : ""
}`; }`;
}, [apiHost, canvasRef, name, img, searchParams, scaledHeight, config]); }, [apiHost, canvasRef, name, img, searchParams, scaledHeight, config]);

View File

@ -39,7 +39,7 @@ export function PolygonCanvas({
const element = new window.Image(); const element = new window.Image();
element.width = width; element.width = width;
element.height = height; element.height = height;
element.src = `${apiHost}api/${camera}/latest.jpg`; element.src = `${apiHost}api/${camera}/latest.webp`;
return element; return element;
} }
}, [camera, width, height, apiHost]); }, [camera, width, height, apiHost]);