Spaces:
Sleeping
Sleeping
| 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", | |
| ] | |