RAG_HF / router /image_embedding_router.py
tjrlgns09's picture
.
d2100e7
from fastapi import APIRouter, HTTPException, UploadFile, File
from pydantic import BaseModel
from typing import List, Optional, Any
from io import BytesIO
from PIL import Image
# ์ฝ”์–ด ๋ชจ๋“ˆ์—์„œ ๋ชจ๋ธ ๊ฐ€์ ธ์˜ค๊ธฐ (์‹ฑ๊ธ€ํ†ค ๋ณด์žฅ)
from core.dependencies import get_image_embedding_model
router = APIRouter(tags=["Image Embedding"])
# ๋ผ์šฐํ„ฐ ์ง„์ž…์ ์—์„œ ๋ชจ๋ธ์„ ํ™•๋ณด
image_embedding_model = get_image_embedding_model()
class ImageEmbeddingResponse(BaseModel):
success: bool
data: Optional[Any] = None
msg: Optional[str] = None
@router.post("/image_to_embedding", response_model=ImageEmbeddingResponse)
async def image_to_embedding(file: UploadFile = File(...)):
"""
์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์—…๋กœ๋“œ๋ฐ›์•„ EfficientNetV2-S ๋ชจ๋ธ๋กœ ์ž„๋ฒ ๋”ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
"""
try:
# ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ฝ๊ธฐ
contents = await file.read()
image = Image.open(BytesIO(contents)).convert("RGB")
# ์ด๋ฏธ์ง€๋ฅผ ์ž„๋ฒ ๋”ฉ ๋ณ€ํ™˜. 1280 ์ฐจ์›
emb_vector = image_embedding_model.embed_image(image)
return {"success": True, "data": {"embedding": emb_vector}, "msg": ""}
except Exception as e:
return {"success": False, "data": None, "msg": str(e)}