File size: 3,871 Bytes
f78da30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import shutil
import torch
from natsort import natsorted
from glob import glob
import cv2
import numpy as np
import gradio as gr
from PIL import Image

os.system("pip install einops")
os.system("git clone https://github.com/swz30/Restormer.git")
os.chdir('Restormer')

# Download pretrained models
os.system("wget https://github.com/swz30/Restormer/releases/download/v1.0/real_denoising.pth -P Denoising/pretrained_models")
os.system("wget https://github.com/swz30/Restormer/releases/download/v1.0/single_image_defocus_deblurring.pth -P Defocus_Deblurring/pretrained_models")
os.system("wget https://github.com/swz30/Restormer/releases/download/v1.0/motion_deblurring.pth -P Motion_Deblurring/pretrained_models")
os.system("wget https://github.com/swz30/Restormer/releases/download/v1.0/deraining.pth -P Deraining/pretrained_models")

# Download sample images
os.system("wget https://github.com/swz30/Restormer/releases/download/v1.0/sample_images.zip -P demo")
shutil.unpack_archive('demo/sample_images.zip', 'demo/')
os.remove('demo/sample_images.zip')


examples = [['demo/sample_images/Real_Denoising/degraded/117355.png', 'Denoising'],
            ['demo/sample_images/Single_Image_Defocus_Deblurring/degraded/engagement.jpg', 'Defocus Deblurring'],
            ['demo/sample_images/Motion_Deblurring/degraded/GoPro-GOPR0854_11_00-000090-input.jpg','Motion Deblurring'],
            ['demo/sample_images/Deraining/degraded/Rain100H-77-input.jpg','Deraining']]


title = "Restormer"
description = """
Gradio demo for Restormer: Efficient Transformer for High-Resolution Image Restoration, CVPR 2022--ORAL. <a href='https://arxiv.org/abs/2111.09881'>[Paper]</a><a href='https://github.com/swz30/Restormer'>[Github Code]</a>\n 
With Restormer, you can perform: (1) Image Denoising, (2) Defocus Deblurring, (3)  Motion Deblurring, and (4) Image Deraining. 
To use it, simply upload your own image, or click one of the examples provided below.
"""
article = "<p style='text-align: center'><a href='https://arxiv.org/abs/2111.09881'>Restormer: Efficient Transformer for High-Resolution Image Restoration </a> | <a href='https://github.com/swz30/Restormer'>Github Repo</a></p>"


def inference(img,task):
    os.system('mkdir temp')
    max_res = 904
    width, height = img.size
    if max(width,height) > max_res:
      scale = min(width,height)/max(width,height)
      if width > max_res:
        width = max_res
        height = int(scale*max_res)
      if height > max_res:
        height = max_res
        width = int(scale*max_res)
      img = img.resize((width,height), Image.ANTIALIAS)
  
    img.save("temp/image.jpg", "JPEG")
  
    if task == 'Motion Deblurring':
      task = 'Motion_Deblurring'
      os.system("python demo.py --task 'Motion_Deblurring' --input_dir './temp/image.jpg' --result_dir './temp/'")
  
    if task == 'Defocus Deblurring':
      task = 'Single_Image_Defocus_Deblurring'
      os.system("python demo.py --task 'Single_Image_Defocus_Deblurring' --input_dir './temp/image.jpg' --result_dir './temp/'")
  
    if task == 'Denoising':
      task = 'Real_Denoising'
      os.system("python demo.py --task 'Real_Denoising' --input_dir './temp/image.jpg' --result_dir './temp/'")
  
    if task == 'Deraining':
      os.system("python demo.py --task 'Deraining' --input_dir './temp/image.jpg' --result_dir './temp/'")
  
    
    restored = f'temp/{task}/image.png'
    return restored
    
gr.Interface(
    inference,
    [
        gr.inputs.Image(type="pil", label="Input"),
        gr.inputs.Radio(["Denoising", "Defocus Deblurring", "Motion Deblurring", "Deraining"], default="Denoising", label='task type')
    ],
    gr.outputs.Image(type="file", label="Output"),
    title=title,
    description=description,
    article=article,
    examples=examples,
    allow_flagging=False,
    ).launch(debug=True,enable_queue=True)