Provide an API endpoint for camera snapshots rather than relying on legacy.
This commit is contained in:
parent
9b12d5ca52
commit
4d5fd0b698
2 changed files with 23 additions and 5 deletions
|
|
@ -1,4 +1,4 @@
|
|||
"""Provide endpoints that mimic the v2 API for OpenFlexure Connect discoverability."""
|
||||
"""Provide endpoints that mimic the v2 API for legacy discoverability."""
|
||||
|
||||
from socket import gethostname
|
||||
|
||||
|
|
@ -22,12 +22,14 @@ class JPEGResponse(Response):
|
|||
|
||||
|
||||
def add_v2_endpoints(thing_server: lt.ThingServer) -> None:
|
||||
"""Add the v2 API endpoints for OpenFlexure Connect discoverability."""
|
||||
"""Add the v2 API endpoints for legacy discoverability.
|
||||
|
||||
Old versions of OpenFlexure Connect use the v2 endpoints to check for microscopes.
|
||||
This provides these routes so the microscope can be discovered by old versions of
|
||||
connect.
|
||||
"""
|
||||
app = thing_server.app
|
||||
|
||||
# The endpoints below fool OpenFlexure Connect into thinking we are a
|
||||
# v2 microscope, so we show up correctly.
|
||||
# This is necessary until Connect is rebuilt. See #557.
|
||||
@app.get("/routes")
|
||||
def routes_stub() -> dict[str, dict]:
|
||||
"""Return a stub list of routes.
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ from typing import Any, Literal, Mapping, Optional, Self
|
|||
|
||||
import numpy as np
|
||||
import piexif
|
||||
from fastapi import Response
|
||||
from PIL import Image
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
|
@ -259,6 +260,21 @@ class BaseCamera(OFMThing, ABC):
|
|||
"""Close hardware connection when the Thing context manager is closed."""
|
||||
pass
|
||||
|
||||
@lt.endpoint(
|
||||
"get",
|
||||
"snapshot",
|
||||
responses={
|
||||
200: {
|
||||
"description": "A snapshot of the microscope stream",
|
||||
"content": {"image/jpeg": {}},
|
||||
},
|
||||
},
|
||||
)
|
||||
async def snapshot(self) -> Response:
|
||||
"""Return a snapshot from the microscope."""
|
||||
jpeg_data = await self.lores_mjpeg_stream.grab_frame()
|
||||
return Response(content=jpeg_data, media_type="image/jpeg")
|
||||
|
||||
@property
|
||||
def focus_fom(self) -> int:
|
||||
"""Return the focus figure of merit.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue