File size: 3,027 Bytes
e40c95c
8b4fce0
e40c95c
 
 
 
 
 
 
011c077
e40c95c
37e0de7
 
d408b90
e40c95c
 
 
 
 
 
 
2683afa
37e0de7
 
 
e40c95c
37e0de7
e40c95c
37e0de7
 
 
 
e40c95c
37e0de7
 
 
 
 
 
 
 
e40c95c
 
 
e66d8a6
37e0de7
 
 
 
f1d72e1
37e0de7
f1d72e1
37e0de7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d408b90
78eae8c
cf58652
78eae8c
e40c95c
37e0de7
 
 
 
 
 
 
e40c95c
 
 
 
78eae8c
37e0de7
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import os
os.system("pip install gradio==2.9b23")
import random
import gradio as gr
from PIL import Image
import torch
from random import randint
import sys
from subprocess import call
import psutil

# Remove the torch.hub download and instead ensure 'bear.jpg' is in your directory
# Place bear.jpg and anime.png in your project directory manually

def run_cmd(command):
    try:
        print(command)
        call(command, shell=True)
    except KeyboardInterrupt:
        print("Process interrupted")
        sys.exit(1)

# Download model weights if they don't exist
if not os.path.exists("RealESRGAN_x4plus.pth"):
    run_cmd("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P .")

run_cmd("pip install basicsr")

if not os.path.exists("RealESRGAN_x4plus_anime_6B.pth"):
    os.system("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P .")

def inference(img, mode):
    _id = randint(1, 10000)
    INPUT_DIR = f"/tmp/input_image{_id}/"
    OUTPUT_DIR = f"/tmp/output_image{_id}/"
    
    # Create directories safely
    os.makedirs(INPUT_DIR, exist_ok=True)
    os.makedirs(OUTPUT_DIR, exist_ok=True)
    
    # Resize image
    basewidth = 256
    wpercent = (basewidth/float(img.size[0]))
    hsize = int((float(img.size[1])*float(wpercent)))
    img = img.resize((basewidth,hsize), Image.LANCZOS)
    
    input_path = os.path.join(INPUT_DIR, "1.jpg")
    img.save(input_path, "JPEG")
    
    if mode == "base":
        model_name = "RealESRGAN_x4plus"
    else:
        model_name = "RealESRGAN_x4plus_anime_6B"
    
    command = f"python inference_realesrgan.py -n {model_name} -i {INPUT_DIR} -o {OUTPUT_DIR}"
    run_cmd(command)
    
    output_path = os.path.join(OUTPUT_DIR, "1_out.jpg")
    
    # Cleanup temporary directories
    try:
        if os.path.exists(INPUT_DIR):
            os.system(f"rm -rf {INPUT_DIR}")
        if os.path.exists(OUTPUT_DIR):
            os.system(f"rm -rf {OUTPUT_DIR}")
    except Exception as e:
        print(f"Cleanup error: {e}")
    
    return output_path

title = "Real-ESRGAN"
description = "Gradio demo for Real-ESRGAN. To use it, simply upload your image, or click one of the examples to load them. Read more at the links below. Please click submit only once"
article = "<p style='text-align: center'><a href='https://arxiv.org/abs/2107.10833'>Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data</a> | <a href='https://github.com/xinntao/Real-ESRGAN'>Github Repo</a></p>"

# Create interface
interface = gr.Interface(
    inference,
    [
        gr.inputs.Image(type="pil", label="Input"),
        gr.inputs.Radio(["base", "anime"], type="value", default="base", label="model type")
    ],
    gr.outputs.Image(type="file", label="Output"),
    title=title,
    description=description,
    article=article,
    examples=[
        ['bear.jpg', 'base'],
        ['anime.png', 'anime']
    ]
)

# Launch the interface
interface.launch()