RealESRGAN / app.py
Hev832's picture
Update app.py
04433a5 verified
import torch
from PIL import Image
from RealESRGAN import RealESRGAN
import gradio as gr
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
def load_model(scale):
model = RealESRGAN(device, scale=scale)
model.load_weights(f'weights/RealESRGAN_x{scale}.pth', download=True)
return model
def inference(image, size):
if image is None:
raise gr.Error("Image not uploaded")
width, height = image.size
if width >= 5000 or height >= 5000:
raise gr.Error("The image is too large.")
if torch.cuda.is_available():
torch.cuda.empty_cache()
scale = int(size[0])
model = load_model(scale)
try:
result = model.predict(image.convert('RGB'))
except torch.cuda.OutOfMemoryError as e:
print(e)
model = load_model(scale)
result = model.predict(image.convert('RGB'))
print(f"Image size ({device}): {size} ... OK")
return result
title = "RealESRGAN UpScale Model: 2x 4x 8x"
description = "This model running on CPU so it takes a bit of time, please be patient :)"
gr.Interface(
inference,
[gr.Image(type="pil"), gr.Radio(['2x', '4x', '8x'], type="value", value='2x', label='Resolution model')],
gr.Image(type="pil", label="Output"),
title=title,
description=description,
allow_flagging='never',
cache_examples=False,
).queue(api_open=False).launch(show_error=True, show_api=False)