Spaces:
Running
on
Zero
Running
on
Zero
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", | |
] | |