| 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') |
| model_scales = {'2x': 2, '4x': 4, '8x': 8} |
|
|
| |
| models = {scale: RealESRGAN(device, scale=scale) for scale in model_scales.values()} |
|
|
| def inference(images, scale): |
| results = [] |
| |
| if images is None or len(images) == 0: |
| raise gr.Error("No image uploaded. Please upload at least one image.") |
| |
| for image in images: |
| 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() |
| |
| |
| model = models[model_scales[scale]] |
| result = model.predict(image.convert('RGB')) |
| print(f"Image size ({device}): {scale} ... OK") |
| results.append(result) |
| |
| return results |
|
|
| title = "Advanced Real ESRGAN UpScale: 2x 4x 8x" |
| description = ( |
| "This advanced demo for Real-ESRGAN allows you to upscale multiple images " |
| "with different models and resolutions. Choose the scale and upload images for high-resolution enhancement." |
| ) |
| article = ( |
| "<div style='text-align: center;'>Twitter " |
| "<a href='https://twitter.com/DoEvent' target='_blank'>Max Skobeev</a> | " |
| "<a href='https://huggingface.co/sberbank-ai/Real-ESRGAN' target='_blank'>Model card</a></div>" |
| ) |
|
|
| gr.Interface( |
| inference, |
| [ |
| gr.Image(type="pil", label="Upload Image", multiple=True), |
| gr.Radio( |
| list(model_scales.keys()), |
| type="value", |
| value='2x', |
| label='Resolution model', |
| ), |
| ], |
| gr.Image(type="pil", label="Output"), |
| title=title, |
| description=description, |
| article=article, |
| examples=[['groot.jpeg', '2x']], |
| allow_flagging='never', |
| cache_examples=False, |
| ).launch() |
|
|