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") ## I/O setup (creates folders and places inputs corresponding to the original RefVSR code) # HD input 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" os.makedirs(HR_LR_path) os.makedirs(HR_Ref_path) os.makedirs(HR_Ref_path_T) os.system("wget https://www.dropbox.com/s/x33ka2jlzwsde7r/LR.png -O HR_LR1.png") os.system("wget https://www.dropbox.com/s/pp903wlz3syf68w/Ref.png -O HR_Ref1.png") os.system("wget https://www.dropbox.com/s/zl0h83x0le6ejfw/LR.png -O HR_LR2.png") os.system("wget https://www.dropbox.com/s/9hzupmc3clt0f0e/Ref.png -O HR_Ref2.png") os.system("wget https://www.dropbox.com/s/2u6lcfdhvcylklg/LR.png -O HR_LR3.png") os.system("wget https://www.dropbox.com/s/a7bwfy3gl26tvbq/Ref.png -O HR_Ref3.png") # 4x downsampled input 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.system("wget https://www.dropbox.com/s/hkvdwm3grshjt0k/LR.png -O LR.png") os.system("wget https://www.dropbox.com/s/4sv34su3kg1ifkp/Ref.png -O Ref.png") # output directory os.makedirs('result') ## resize if necessary (not used) def resize(img): max_side = 480 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) w = img.size[0] h = img.size[1] img = img.crop((0, 0, w-w%8, h-h%8)) return img #################### 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 RefVSR_MFID_8K \ --config config_RefVSR_MFID_8K \ --data RealMCVSR \ --ckpt_abs_name ckpt/RefVSR_MFID_8K.pytorch \ --data_offset ./test \ --output_offset ./result \ --qualitative_only \ --cpu \ --is_gradio") return "result/0000.png" title="RefVSR" 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 30s." article = "

To check the full capability of the module, we recommend to clone Github repository and run RefVSR models on videos using GPUs.

This demo runs on CPUs and only supports RefVSR for a single LR and Ref frames due to computational complexity.
Hence, the model will not take advantage of temporal LR and Ref frames.

Moreover, the model is trained with the proposed 2-stage training strategy, but due to the memory and computational complexity, we downsampled sample frames to have the 480x270 resolution.

For user given frames, the size will be adjusted for the longer side of the frames to have 480 pixels.

Project | arXiv | Github

" ## 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_LR1.png', 'HR_Ref1.png'], ['HR_LR2.png', 'HR_Ref2.png'], ['HR_LR3.png', 'HR_Ref3.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) #################### low res ################## ## inference def inference(LR, Ref): ## resize for user selected input 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 RefVSR_MFID \ --config config_RefVSR_MFID \ --data RealMCVSR \ --ckpt_abs_name ckpt/RefVSR_MFID.pytorch \ --data_offset ./test \ --output_offset ./result \ --qualitative_only \ --cpu \ --is_gradio") return "result/0000.png" title="Demo for RefVSR (CVPR 2022)" description="The demo applies 4xVSR on a video frame. It runs on CPUs and takes about 150s. For the demo, upload a low-resolution frame and a reference frame to 'LR' and 'Ref' input windows, respectively. It is recommended for the reference frame to have a 2x larger zoom factor than that of the low-resolution frame." article = "

To check the full capability of the module, we recommend to clone Github repository and run RefVSR models on videos using GPUs.

This demo runs on CPUs and only supports RefVSR for a single LR and Ref frames due to computational complexity.
Hence, the model will not take advantage of temporal LR and Ref frames.

Moreover, the model is trained only with the proposed pre-training strategy to cope with downsampled sample frames, which are in the 480x270 resolution.

For user given frames, the size will be adjusted for the longer side of the frames to have 480 pixels.

Project | arXiv | Github

" ## resize for sample 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)