Spaces:
Runtime error
Runtime error
| 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, img.size[0] - (img.size[0] % 8), img.size[1] - (img.size[1] % 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 = "<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 frames due to computational complexity.<br>Hence, the model <b>will not take advantage</b> of temporal LR and Ref frames.</p><p style='text-align: center'>Moreover, the model is trained <b>with the proposed 2-stage training strategy</b>, but due to the memory and computational complexity, we downsampled sample frames to have the 480x270 resolution.</p><p style='text-align: center'>For user given frames, the size will be adjusted for the longer side of the frames to have 480 pixels.</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_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 = "<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 frames due to computational complexity.<br>Hence, the model <b>will not take advantage</b> of temporal LR and Ref frames.</p><p style='text-align: center'>Moreover, the model is trained <b>only with the proposed pre-training strategy</b> to cope with downsampled sample frames, which are in the 480x270 resolution.</p><p style='text-align: center'>For user given frames, the size will be adjusted for the longer side of the frames to have 480 pixels.</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 | |
| 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) | |