Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, Form, Request | |
from fastapi.responses import HTMLResponse, RedirectResponse | |
from fastapi.templating import Jinja2Templates | |
from utility import load_image, interpolate_batch, interpolate_single | |
from io import BytesIO | |
from PIL import Image | |
import base64 | |
import numpy as np | |
app = FastAPI() | |
# Setup Jinja2 templates | |
templates = Jinja2Templates(directory="templates") | |
def convert_frames_to_base64(frames): | |
"""Converts numpy image arrays to base64 strings for displaying in HTML.""" | |
base64_frames = [] | |
for frame in frames: | |
img = Image.fromarray((frame * 255).astype(np.uint8)) | |
buffered = BytesIO() | |
img.save(buffered, format="PNG") | |
base64_str = base64.b64encode(buffered.getvalue()).decode("utf-8") | |
base64_frames.append(base64_str) | |
return base64_frames | |
async def index(request: Request): | |
return templates.TemplateResponse("index.html", {"request": request}) | |
async def generate_frames(request: Request, img1_url: str = Form(...), img2_url: str = Form(...)): | |
if not img1_url or not img2_url: | |
return RedirectResponse(url="/", status_code=303) | |
frames = interpolate_single(img1_url, img2_url) | |
if frames is not None: | |
base64_frames = convert_frames_to_base64(frames) | |
return templates.TemplateResponse("result.html", {"request": request, "frames": base64_frames}) | |
else: | |
return HTMLResponse("Error processing images.", status_code=500) | |