from fastapi import FastAPI, UploadFile, File, Request from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from PIL import Image import io from app.infer import predict app = FastAPI(title="Captcha OCR") app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") @app.get("/", response_class=HTMLResponse) async def home(request: Request): return templates.TemplateResponse("index.html", {"request": request}) @app.post("/predict") async def predict_captcha(file: UploadFile = File(...)): image_bytes = await file.read() pil_image = Image.open(io.BytesIO(image_bytes)).convert("RGB") text, confidence = predict(pil_image) return { "text": text, "confidence": confidence }