media_enhancer / app.py
d0tpy's picture
Update app.py
2b04957 verified
raw
history blame
1.6 kB
from fastapi import FastAPI, File, UploadFile, HTTPException
from fastapi.responses import StreamingResponse
from ./image_enhancer import EnhancementMethod, Enhancer
from pydantic import BaseModel
from PIL import Image
from io import BytesIO
import base64
import numpy as np
class EnhancementRequest(BaseModel):
method: EnhancementMethod = EnhancementMethod.gfpgan
background_enhancement: bool = True
upscale: int = 2
class _EnhanceBase(BaseModel):
encoded_base_img: List[str]
app = FastAPI()
@app.get("/")
def greet_json():
return {"Initializing GlamApp Enhancer"}
@app.post("/enhance")
async def enhance_image(
file: UploadFile = File(...),
request: EnhancementRequest = EnhancementRequest()
):
try:
if not file.content_type.startswith('image/'):
raise HTTPException(status_code=400, detail="Invalid file type")
contents = await file.read()
base64_encoded_image = base64.b64encode(contents).decode('utf-8')
data = _EnhanceBase(encoded_base_img=[base64_encoded_image])
enhancer = Enhancer(request.method, request.background_enhancement, request.upscale)
enhanced_img, original_resolution, enhanced_resolution = await enhancer.enhance(data)
enhanced_image = Image.fromarray(enhanced_img)
img_byte_arr = BytesIO()
enhanced_image.save(img_byte_arr, format='PNG')
img_byte_arr.seek(0)
return StreamingResponse(img_byte_arr, media_type="image/png")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))