archstyle55-backend / app /api /segment.py
kkkaredaw's picture
deploy: backend bundle
a9db693 verified
from __future__ import annotations
from fastapi import APIRouter, File, HTTPException, Response, UploadFile
from ..ml.segment import segment_image
from ..utils.images import load_pil
router = APIRouter()
@router.post("")
async def segment_ep(file: UploadFile = File(...), output: str = "json"):
try:
data = await file.read()
img = load_pil(data)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc))
res = segment_image(img)
if output == "overlay":
return Response(content=res.overlay_png, media_type="image/png")
if output == "mask":
return Response(content=res.mask_png, media_type="image/png")
return {
"attributes": res.attributes,
"shape": list(res.mask.shape),
"categories": [
"wall", "window", "door", "roof", "balcony",
"column", "sky", "vegetation", "ground", "other",
],
}
@router.post("/color")
async def palette_ep(file: UploadFile = File(...)):
from ..ml.color import palette
try:
data = await file.read()
img = load_pil(data)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc))
items = palette(img, k=5)
return [{"hex": e.rgb_hex, "rgb": list(e.rgb), "share": e.share} for e in items]