IMGEN / app.py
aamsko's picture
Update app.py
4c97d0f verified
import os
import cv2
import torch
import gradio as gr
import numpy as np
from PIL import Image
from gfpgan import GFPGANer
from basicsr.archs.srvgg_arch import SRVGGNetCompact
from realesrgan.utils import RealESRGANer
# Download GFPGAN model if not already present
GFPGAN_MODEL = "GFPGANv1.4.pth"
GFPGAN_URL = "https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth"
if not os.path.exists(GFPGAN_MODEL):
import requests
r = requests.get(GFPGAN_URL, allow_redirects=True)
open(GFPGAN_MODEL, 'wb').write(r.content)
# Download RealESRGAN model
ESRGAN_MODEL = "realesr-general-x4v3.pth"
ESRGAN_URL = "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth"
if not os.path.exists(ESRGAN_MODEL):
import requests
r = requests.get(ESRGAN_URL, allow_redirects=True)
open(ESRGAN_MODEL, 'wb').write(r.content)
# Initialize Real-ESRGAN as background upsampler
esr_model = SRVGGNetCompact(
num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=32,
upscale=4, act_type='prelu'
)
bg_upsampler = RealESRGANer(
scale=4,
model_path=ESRGAN_MODEL,
model=esr_model,
tile=0,
tile_pad=10,
pre_pad=0,
half=torch.cuda.is_available()
)
# Initialize GFPGAN with Real-ESRGAN as background upsampler
restorer = GFPGANer(
model_path=GFPGAN_MODEL,
upscale=2,
arch='clean',
channel_multiplier=2,
bg_upsampler=bg_upsampler
)
# Enhancement function
def enhance(image):
img = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
_, _, restored_img = restorer.enhance(
img,
has_aligned=False,
only_center_face=False,
paste_back=True
)
restored_pil = Image.fromarray(cv2.cvtColor(restored_img, cv2.COLOR_BGR2RGB))
return restored_pil
# Gradio UI
iface = gr.Interface(
fn=enhance,
inputs=gr.Image(type="pil"),
outputs=gr.Image(type="pil"),
title="IMGEN - AI Photo Enhancer (Face + Outfit)",
description="Upload your photo (ID, CV, profile) and enhance both the face and outfit with AI using GFPGAN + RealESRGAN."
)
if __name__ == "__main__":
iface.launch()