four / main.py
hddhdjdi's picture
Create main.py
60f8465 verified
Raw
History Blame Contribute Delete
2.09 kB
import io
import cv2
import numpy as np
import uvicorn
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import StreamingResponse
from gfpgan import GFPGANer
from realesrgan import RealESRGANer
from basicsr.archs.rrdbnet_arch import RRDBNet
app = FastAPI(title="AI Image Enhancer Server")
# 1. إعداد نموذج زيادة الدقة (Real-ESRGAN)
model_realesrgan = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=2)
upsampler = RealESRGANer(
scale=2,
model_path='https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth',
model=model_realesrgan,
tile=0,
tile_pad=10,
pre_pad=0,
half=False # اجعلها True إذا كنت تستخدم GPU
)
# 2. إعداد نموذج تحسين الوجه (GFPGAN)
face_enhancer = GFPGANer(
model_path='https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth',
upscale=2,
arch='clean',
channel_multiplier=2,
bg_upsampler=upsampler # دمج زيادة الدقة مع تحسين الوجه
)
@app.post("/enhance")
async def enhance_image(file: UploadFile = File(...)):
# قراءة الصورة من الطلب
data = await file.read()
nparr = np.frombuffer(data, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
# تنفيذ السحر: تحسين الوجه + زيادة الدقة
# face_enhancer سيقوم بتوضيح الملامح و Real-ESRGAN سيهتم بالخلفية والجودة العامة
_, _, enhanced_img = face_enhancer.enhance(img, has_aligned=False, only_center_face=False, paste_back=True)
# تحويل الصورة الناتجة إلى صيغة يمكن إرسالها عبر المتصفح
_, buffer = cv2.imencode(".png", enhanced_img)
io_buf = io.BytesIO(buffer)
return StreamingResponse(io_buf, media_type="image/png")
@app.get("/")
def home():
return {"message": "سيرفر تحسين الصور يعمل بنجاح!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)