File size: 7,273 Bytes
ded9852
 
 
 
 
 
 
 
 
37ae4f3
0e0ccfd
 
0b8ccd5
0e0ccfd
97c70fe
0e0ccfd
 
5dcb962
ded9852
 
0e0ccfd
8aa2992
 
 
8eeae86
aca3a01
8eeae86
137fd43
 
b157748
9974be3
 
 
e7e1eaf
687282d
 
db18a37
 
 
687282d
0e0ccfd
5086b19
d84731a
d4740d1
 
bf86791
 
 
 
6aea108
ded9852
0e0ccfd
 
ded9852
0e0ccfd
687282d
 
0e0ccfd
 
709fd3c
 
 
8aa2992
 
 
0e0ccfd
 
ded9852
edeeb36
0e0ccfd
ded9852
edeeb36
ded9852
 
 
 
0e0ccfd
e7e1eaf
ded9852
db18a37
edeeb36
ded9852
db18a37
ded9852
0e0ccfd
f8aa4fe
 
d84731a
0e0ccfd
62744f4
ded9852
0e0ccfd
db18a37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import os
import sys
import gradio as gr
from PIL import Image

## environment settup
os.system("git clone https://github.com/codeslake/RefVSR.git")
os.chdir("RefVSR")
os.system("./install/install_cudnn113.sh")
os.mkdir("ckpt")
os.system("wget https://huggingface.co/spaces/codeslake/RefVSR/resolve/main/SPyNet.pytorch -O ckpt/SPyNet.pytorch")

os.system("wget https://huggingface.co/spaces/codeslake/RefVSR/resolve/main/RefVSR_MFID_8K.pytorch -O ckpt/RefVSR_MFID_8K.pytorch")
os.system("wget https://huggingface.co/spaces/codeslake/RefVSR/resolve/main/RefVSR_small_MFID_8K.pytorch -O ckpt/RefVSR_small_MFID_8K.pytorch")

os.system("wget https://huggingface.co/spaces/codeslake/RefVSR/resolve/main/RefVSR_MFID.pytorch -O ckpt/RefVSR_MFID.pytorch")
os.system("wget https://huggingface.co/spaces/codeslake/RefVSR/resolve/main/RefVSR_small_MFID_8K.pytorch -O ckpt/RefVSR_small_MFID.pytorch")

sys.path.append("RefVSR")

## Input setup (creates folders and places inputs corresponding to the original RefVSR code)
HR_LR_path = "test/RealMCVSR/test/HR/UW/0000"
HR_Ref_path = "test/RealMCVSR/test/HR/W/0000"
HR_Ref_path_T = "test/RealMCVSR/test/HR/T/0000"
LR_path = "test/RealMCVSR/test/LRx4/UW/0000"
Ref_path = "test/RealMCVSR/test/LRx4/W/0000"
Ref_path_T = "test/RealMCVSR/test/LRx4/T/0000"
os.makedirs(LR_path)
os.makedirs(Ref_path)
os.makedirs(Ref_path_T)
os.makedirs(HR_LR_path)
os.makedirs(HR_Ref_path)
os.makedirs(HR_Ref_path_T)
os.makedirs('result')
os.system("wget https://www.dropbox.com/s/vqekqdz80d85gi4/UW.png -O LR.png")
os.system("wget https://www.dropbox.com/s/lsopmquhpm87v83/W.png -O Ref.png")
os.system("wget https://www.dropbox.com/s/xv6inxwy0so4ni0/LR.png -O HR_LR.png")
os.system("wget https://www.dropbox.com/s/abydd1oczs1163l/Ref.png -O HR_Ref.png")


## resize if necessary (not used)
def resize(img):
    max_side = 512
    w = img.size[0]
    h = img.size[1]
    if max(h, w) > max_side:
        scale_ratio = max_side / max(h, w)
        wsize=int(w*scale_ratio)
        hsize=int(h*scale_ratio)
        img = img.resize((wsize,hsize), Image.ANTIALIAS)
    return img

## inference  
def inference(LR, Ref):
    ## resize for user selected input (not used)
    #LR = resize(LR)
    #Ref = resize(Ref)
    
    ## Input setup (creates folders and places inputs corresponding to the original RefVSR code)
    LR.save(os.path.join(LR_path, '0000.png'))
    Ref.save(os.path.join(Ref_path, '0000.png'))
    Ref.save(os.path.join(Ref_path_T, '0000.png'))
    LR.save(os.path.join(HR_LR_path, '0000.png'))
    Ref.save(os.path.join(HR_Ref_path, '0000.png'))
    Ref.save(os.path.join(HR_Ref_path_T, '0000.png'))
    
    ## Run RefVSR model
    os.system("python -B run.py \
                --mode amp_RefVSR_small_MFID \
                --config config_RefVSR_small_MFID \
                --data RealMCVSR \
                --ckpt_abs_name ckpt/RefVSR_small_MFID.pytorch \
                --data_offset ./test \
                --output_offset ./result \
                --qualitative_only \
                --cpu \
                --is_gradio")               
    return "result/0000.png"

title="RefVSR | Fast inference with a low-res (430x270) frame"
description="Demo application for Reference-based Video Super-Resolution (RefVSR). Upload a low-resolution frame and a reference frame to 'LR' and 'Ref' input windows, respectively. The demo runs on CPUs and takes about 120s."

article = "<p style='text-align: center'><b>To check the full capability of the module, we recommend to clone Github repository and run RefVSR models on videos using GPUs.</b></p><p style='text-align: center'>This demo runs on CPUs and only supports RefVSR for a single LR and Ref frame due to computational complexity. Hence, the model will not take advantage of temporal LR and Ref frames.</p><p style='text-align: center'>The model is trained by the proposed pre-training strategy only. The sample frames are in 430x270 resolution and saved in the PNG format. </p><p style='text-align: center'><a href='https://junyonglee.me/projects/RefVSR' target='_blank'>Project</a> | <a href='https://arxiv.org/abs/2203.14537' target='_blank'>arXiv</a> | <a href='https://github.com/codeslake/RefVSR' target='_blank'>Github</a></p>"

## resize for sample (not used)
#LR = resize(Image.open('LR.png')).save('LR.png')
#Ref = resize(Image.open('Ref.png')).save('Ref.png')

## input
examples=[['LR.png', 'Ref.png']]

## interface
gr.Interface(inference,[gr.inputs.Image(type="pil"), gr.inputs.Image(type="pil")],gr.outputs.Image(type="file"),title=title,description=description,article=article,theme ="peach",examples=examples).launch(enable_queue=True)

#################### 8K ##################
## inference  
def inference_8K(LR, Ref):
    ## resize for user selected input (not used)
    #LR = resize(LR)
    #Ref = resize(Ref)
    
    ## Input setup (creates folders and places inputs corresponding to the original RefVSR code)
    LR.save(os.path.join(LR_path, '0000.png'))
    Ref.save(os.path.join(Ref_path, '0000.png'))
    Ref.save(os.path.join(Ref_path_T, '0000.png'))
    LR.save(os.path.join(HR_LR_path, '0000.png'))
    Ref.save(os.path.join(HR_Ref_path, '0000.png'))
    Ref.save(os.path.join(HR_Ref_path_T, '0000.png'))
    
    ## Run RefVSR model
    os.system("python -B run.py \
                --mode amp_RefVSR_small_MFID_8K \
                --config config_RefVSR_small_MFID_8K \
                --data RealMCVSR \
                --ckpt_abs_name ckpt/RefVSR_small_MFID_8K.pytorch \
                --data_offset ./test \
                --output_offset ./result \
                --qualitative_only \
                --cpu \
                --is_gradio")               
    return "result/0000.png"
    
title="RefVSR | Slow inference with a real-world HD (1920x1080) frame"
description="Demo application for Reference-based Video Super-Resolution (RefVSR). Upload a low-resolution frame and a reference frame to 'LR' and 'Ref' input windows, respectively. The demo runs on CPUs and takes about 120s."

article = "<p style='text-align: center'><b>To check the full capability of the module, we recommend to clone Github repository and run RefVSR models on videos using GPUs.</b></p><p style='text-align: center'>This demo runs on CPUs and only supports RefVSR for a single LR and Ref frame due to computational complexity. Hence, the model will not take advantage of temporal LR and Ref frames.</p><p style='text-align: center'>The model is trained by the proposed two-stage training strategy. The sample frames are in HD resolution (1920x1080) and saved in the PNG format. </p><p style='text-align: center'><a href='https://junyonglee.me/projects/RefVSR' target='_blank'>Project</a> | <a href='https://arxiv.org/abs/2203.14537' target='_blank'>arXiv</a> | <a href='https://github.com/codeslake/RefVSR' target='_blank'>Github</a></p>"

## resize for sample (not used)
#LR = resize(Image.open('LR.png')).save('LR.png')
#Ref = resize(Image.open('Ref.png')).save('Ref.png')

## input
examples=[['HR_LR.png', 'HR_Ref.png']]

## interface
gr.Interface(inference_8K,[gr.inputs.Image(type="pil"), gr.inputs.Image(type="pil")],gr.outputs.Image(type="file"),title=title,description=description,article=article,theme ="peach",examples=examples).launch(enable_queue=True)