upscaling-api / api.py
Astridkraft's picture
Update api.py
cb22a04 verified
import cv2
import numpy as np
from fastapi import FastAPI, File, UploadFile, Form, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from PIL import Image
import io
import base64
app = FastAPI(title="Upscaler API", version="2.0")
# KRITISCH: Erlaube Anfragen von deinem UI-Space
# Ersetze 'YOUR-UI-SPACE-URL' mit der URL deines UI-Spaces (z.B. 'https://your-username-upscaler-ui.hf.space')
app.add_middleware(
CORSMiddleware,
allow_origins=["https://astridkraft-upscaling-ui.hf.space"],
allow_credentials=True,
allow_methods=["POST"],
allow_headers=["*"],
)
def simple_upscale(image: np.ndarray, scale: float):
height, width = image.shape[:2]
new_width = int(width * scale)
new_height = int(height * scale)
return cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_CUBIC)
def upscale_image_pil(input_image: Image.Image, scale_factor: str) -> Image.Image:
try:
scale_float = float(scale_factor.replace('x', '').replace(',', '.'))
img_array = np.array(input_image)
if input_image.mode != 'RGB':
input_image = input_image.convert('RGB')
img_array = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR)
output = simple_upscale(img_array, scale_float)
output_rgb = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
return Image.fromarray(output_rgb)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Upscaling error: {str(e)}")
@app.get("/")
def read_root():
return {"message": "Upscaler API is running", "endpoint": "/upscale"}
@app.post("/upscale")
async def api_upscale(file: UploadFile = File(...), scale: str = Form("4x")):
try:
contents = await file.read()
image = Image.open(io.BytesIO(contents))
upscaled = upscale_image_pil(image, scale)
output_buffer = io.BytesIO()
upscaled.save(output_buffer, format="PNG")
output_buffer.seek(0)
base64_image = base64.b64encode(output_buffer.getvalue()).decode('utf-8')
return JSONResponse({
"success": True,
"original_size": {"width": image.width, "height": image.height},
"upscaled_size": {"width": upscaled.width, "height": upscaled.height},
"scale_factor": scale,
"image_base64": f"data:image/png;base64,{base64_image}"
})
except Exception as e:
raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)