image-upscaler / app.py
VampXD's picture
app.py
37e67d6 verified
import gradio as gr
import torch
import os
import requests
from basicsr.archs.rrdbnet_arch import RRDBNet
from realesrgan import RealESRGANer
from PIL import Image
import numpy as np
# Ensure model weights exist
MODEL_URL = 'https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth'
MODEL_PATH = 'weights/RealESRGAN_x4plus.pth'
os.makedirs('weights', exist_ok=True)
if not os.path.exists(MODEL_PATH):
print('Downloading model...')
response = requests.get(MODEL_URL, stream=True)
with open(MODEL_PATH, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
# Load Real-ESRGAN model
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
upscaler = RealESRGANer(scale=4, model_path=MODEL_PATH, model=model, tile=400, tile_pad=10, pre_pad=0, half=True)
# Image upscale function
def upscale_image(image):
img = np.array(image)
output, _ = upscaler.enhance(img, outscale=4)
return image, Image.fromarray(output)
# Gradio UI
iface = gr.Interface(
fn=upscale_image,
inputs=gr.Image(type='pil'),
outputs=[gr.Image(type='pil', label='Original Image'), gr.Image(type='pil', label='Upscaled Image')],
title='Image Upscaler',
description='Upload an image to see the before and after upscaling using Real-ESRGAN.'
)
if __name__ == '__main__':
iface.launch()