MatchAnything / imcui /api /__init__.py
XingyiHe's picture
init commit
3040ac4
import base64
import io
from typing import List
import numpy as np
from fastapi.exceptions import HTTPException
from PIL import Image
from pydantic import BaseModel
from ..hloc import logger
from .core import ImageMatchingAPI
class ImagesInput(BaseModel):
data: List[str] = []
max_keypoints: List[int] = []
timestamps: List[str] = []
grayscale: bool = False
image_hw: List[List[int]] = [[], []]
feature_type: int = 0
rotates: List[float] = []
scales: List[float] = []
reference_points: List[List[float]] = []
binarize: bool = False
def decode_base64_to_image(encoding):
if encoding.startswith("data:image/"):
encoding = encoding.split(";")[1].split(",")[1]
try:
image = Image.open(io.BytesIO(base64.b64decode(encoding)))
return image
except Exception as e:
logger.warning(f"API cannot decode image: {e}")
raise HTTPException(status_code=500, detail="Invalid encoded image") from e
def to_base64_nparray(encoding: str) -> np.ndarray:
return np.array(decode_base64_to_image(encoding)).astype("uint8")
__all__ = [
"ImageMatchingAPI",
"ImagesInput",
"decode_base64_to_image",
"to_base64_nparray",
]