Added ram-capture method
This commit is contained in:
parent
cdac9d0ac3
commit
397f6ef19f
2 changed files with 58 additions and 0 deletions
|
|
@ -15,6 +15,11 @@ _actions = {
|
||||||
"view_class": camera.CaptureAPI,
|
"view_class": camera.CaptureAPI,
|
||||||
"conditions": True,
|
"conditions": True,
|
||||||
},
|
},
|
||||||
|
"ramCapture": {
|
||||||
|
"rule": "/camera/ram-capture/",
|
||||||
|
"view_class": camera.RAMCaptureAPI,
|
||||||
|
"conditions": True,
|
||||||
|
},
|
||||||
"previewStart": {
|
"previewStart": {
|
||||||
"rule": "/camera/preview/start",
|
"rule": "/camera/preview/start",
|
||||||
"view_class": camera.GPUPreviewStartAPI,
|
"view_class": camera.GPUPreviewStartAPI,
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ from openflexure_microscope.utilities import filter_dict
|
||||||
from openflexure_microscope.api.v2.views.captures import capture_schema
|
from openflexure_microscope.api.v2.views.captures import capture_schema
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import io
|
||||||
from flask import jsonify, request, abort, url_for, redirect, send_file
|
from flask import jsonify, request, abort, url_for, redirect, send_file
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -85,6 +86,58 @@ class CaptureAPI(View):
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
@ThingAction
|
||||||
|
class RAMCaptureAPI(View):
|
||||||
|
"""
|
||||||
|
Create a non-persistant image capture.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@use_args(
|
||||||
|
{
|
||||||
|
"use_video_port": fields.Boolean(missing=False),
|
||||||
|
"bayer": fields.Boolean(
|
||||||
|
missing=False, description="Return with raw bayer data"
|
||||||
|
),
|
||||||
|
"resize": fields.Dict(
|
||||||
|
missing=None, example={"width": 640, "height": 480}
|
||||||
|
), # TODO: Validate keys
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@doc_response(200, mimetype="image/jpeg")
|
||||||
|
def post(self, args):
|
||||||
|
"""
|
||||||
|
Create a non-persistant image capture.
|
||||||
|
"""
|
||||||
|
microscope = find_component("org.openflexure.microscope")
|
||||||
|
|
||||||
|
resize = args.get("resize", None)
|
||||||
|
if resize:
|
||||||
|
if ("width" in resize) and ("height" in resize):
|
||||||
|
resize = (
|
||||||
|
int(resize["width"]),
|
||||||
|
int(resize["height"]),
|
||||||
|
) # Convert dict to tuple
|
||||||
|
else:
|
||||||
|
abort(404)
|
||||||
|
|
||||||
|
# Open a BytesIO stream to be destroyed once request has returned
|
||||||
|
with microscope.camera.lock, io.BytesIO() as stream:
|
||||||
|
|
||||||
|
microscope.camera.capture(
|
||||||
|
stream,
|
||||||
|
use_video_port=args.get("use_video_port"),
|
||||||
|
resize=resize,
|
||||||
|
bayer=args.get("bayer"),
|
||||||
|
)
|
||||||
|
|
||||||
|
stream.seek(0)
|
||||||
|
|
||||||
|
return send_file(
|
||||||
|
io.BytesIO(stream.getbuffer()),
|
||||||
|
mimetype="image/jpeg"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@ThingAction
|
@ThingAction
|
||||||
class GPUPreviewStartAPI(View):
|
class GPUPreviewStartAPI(View):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue