masamasa4's picture
Deploy layout-analysis from monorepo
f8835a3 verified
Raw
History Blame Contribute Delete
1.47 kB
import base64
import tempfile
from pathlib import Path
from fastapi import APIRouter, Depends, UploadFile
from controller.schemas import ExtractFiguresResponse, FigureResponse
from dependencies import get_extract_figures_use_case
from domain.errors.extraction_error import FigureExtractionError
from usecase.extract_figures import ExtractFiguresUseCase
router = APIRouter()
@router.post("/extract-figures", response_model=ExtractFiguresResponse)
def extract_figures(
file: UploadFile,
use_case: ExtractFiguresUseCase = Depends(get_extract_figures_use_case),
) -> ExtractFiguresResponse:
with tempfile.NamedTemporaryFile(suffix=".pdf", delete=True) as tmp:
tmp.write(file.file.read())
tmp.flush()
pdf_path = Path(tmp.name)
try:
figures = use_case.execute(pdf_path)
except FigureExtractionError:
raise
except Exception as e:
raise FigureExtractionError(
f"Unexpected error during extraction: {e}"
) from e
return ExtractFiguresResponse(
figures=[
FigureResponse(
image_base64=base64.b64encode(fig.image_bytes).decode(),
caption=fig.caption,
figure_number=fig.figure_number,
page_number=fig.page_number,
)
for fig in figures
]
)
@router.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}