Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI, File, UploadFile, Form | |
| from fastapi.responses import HTMLResponse, FileResponse | |
| from fastapi.staticfiles import StaticFiles | |
| from fastapi.templating import Jinja2Templates | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.requests import Request | |
| from helper import * | |
| from PIL import Image | |
| import numpy as np | |
| import io | |
| import cv2 | |
| import base64 | |
| app = FastAPI() | |
| # CORS for JS frontend | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"] | |
| ) | |
| app.mount("/static", StaticFiles(directory="static"), name="static") | |
| templates = Jinja2Templates(directory="templates") | |
| def root(request: Request): | |
| return templates.TemplateResponse("index.html", {"request": request}) | |
| async def convert_image(file: UploadFile = File(...), conversion: str = Form(...)): | |
| contents = await file.read() | |
| image = Image.open(io.BytesIO(contents)).convert("RGB") | |
| image_np = np.array(image) | |
| faces = extract_faces_opencv(image_np) | |
| if not faces: | |
| return {"error": "No face detected"} | |
| face = cv2.resize(faces[0], (256, 256)) # process only 1 face for now | |
| if conversion == "young_to_old": | |
| result = generate_Y2O(face) | |
| elif conversion == "old_to_young": | |
| result = generate_O2Y(face) | |
| else: | |
| return {"error": "Invalid conversion type"} | |
| # Convert to base64 | |
| result_img = (result * 255).astype(np.uint8) | |
| _, buffer = cv2.imencode(".png", result_img[:, :, ::-1]) # BGR to RGB | |
| base64_img = base64.b64encode(buffer).decode("utf-8") | |
| return {"image": base64_img} | |