Aiconvert commited on
Commit
7b80802
1 Parent(s): 22ca4ab

Upload app (25).py

Browse files
Files changed (1) hide show
  1. app (25).py +172 -0
app (25).py ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import cv2
3
+ import gradio as gr
4
+ import torch
5
+ from basicsr.archs.srvgg_arch import SRVGGNetCompact
6
+ from gfpgan.utils import GFPGANer
7
+ from realesrgan.utils import RealESRGANer
8
+ from zeroscratches import EraseScratches
9
+
10
+ os.system("pip freeze")
11
+
12
+ os.system("pip freeze")
13
+ # download weights
14
+ if not os.path.exists('realesr-general-x4v3.pth'):
15
+ os.system("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth -P .")
16
+ if not os.path.exists('GFPGANv1.2.pth'):
17
+ os.system("wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.2.pth -P .")
18
+ if not os.path.exists('GFPGANv1.3.pth'):
19
+ os.system("wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth -P .")
20
+ if not os.path.exists('GFPGANv1.4.pth'):
21
+ os.system("wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth -P .")
22
+
23
+
24
+ torch.hub.download_url_to_file(
25
+ 'https://thumbs.dreamstime.com/b/tower-bridge-traditional-red-bus-black-white-colors-view-to-tower-bridge-london-black-white-colors-108478942.jpg',
26
+ 'a1.jpg')
27
+ torch.hub.download_url_to_file(
28
+ 'https://media.istockphoto.com/id/523514029/photo/london-skyline-b-w.jpg?s=612x612&w=0&k=20&c=kJS1BAtfqYeUDaORupj0sBPc1hpzJhBUUqEFfRnHzZ0=',
29
+ 'a2.jpg')
30
+ torch.hub.download_url_to_file(
31
+ 'https://i.guim.co.uk/img/media/06f614065ed82ca0e917b149a32493c791619854/0_0_3648_2789/master/3648.jpg?width=700&quality=85&auto=format&fit=max&s=05764b507c18a38590090d987c8b6202',
32
+ 'a3.jpg')
33
+ torch.hub.download_url_to_file(
34
+ 'https://i.pinimg.com/736x/46/96/9e/46969eb94aec2437323464804d27706d--victorian-london-victorian-era.jpg',
35
+ 'a4.jpg')
36
+
37
+ # background enhancer with RealESRGAN
38
+ model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=32, upscale=4, act_type='prelu')
39
+ model_path = 'realesr-general-x4v3.pth'
40
+ half = True if torch.cuda.is_available() else False
41
+ upsampler = RealESRGANer(scale=4, model_path=model_path, model=model, tile=0, tile_pad=10, pre_pad=0, half=half)
42
+
43
+ os.makedirs('output', exist_ok=True)
44
+
45
+
46
+ # def inference(img, version, scale, weight):
47
+ def enhance_image(img, version, scale):
48
+ # weight /= 100
49
+ print(img, version, scale)
50
+ try:
51
+ extension = os.path.splitext(os.path.basename(str(img)))[1]
52
+ img = cv2.imread(img, cv2.IMREAD_UNCHANGED)
53
+ if len(img.shape) == 3 and img.shape[2] == 4:
54
+ img_mode = 'RGBA'
55
+ elif len(img.shape) == 2: # for gray inputs
56
+ img_mode = None
57
+ img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
58
+ else:
59
+ img_mode = None
60
+
61
+ h, w = img.shape[0:2]
62
+ if h < 300:
63
+ img = cv2.resize(img, (w * 2, h * 2), interpolation=cv2.INTER_LANCZOS4)
64
+
65
+ if version == 'M1':
66
+ face_enhancer = GFPGANer(
67
+ model_path='GFPGANv1.2.pth', upscale=2, arch='clean', channel_multiplier=2, bg_upsampler=upsampler)
68
+ elif version == 'M2':
69
+ face_enhancer = GFPGANer(
70
+ model_path='GFPGANv1.3.pth', upscale=2, arch='clean', channel_multiplier=2, bg_upsampler=upsampler)
71
+ elif version == 'M3':
72
+ face_enhancer = GFPGANer(
73
+ model_path='GFPGANv1.4.pth', upscale=2, arch='clean', channel_multiplier=2, bg_upsampler=upsampler)
74
+ elif version == 'RestoreFormer':
75
+ face_enhancer = GFPGANer(
76
+ model_path='RestoreFormer.pth', upscale=2, arch='RestoreFormer', channel_multiplier=2, bg_upsampler=upsampler)
77
+ elif version == 'CodeFormer':
78
+ face_enhancer = GFPGANer(
79
+ model_path='CodeFormer.pth', upscale=2, arch='CodeFormer', channel_multiplier=2, bg_upsampler=upsampler)
80
+ elif version == 'RealESR-General-x4v3':
81
+ face_enhancer = GFPGANer(
82
+ model_path='realesr-general-x4v3.pth', upscale=2, arch='realesr-general', channel_multiplier=2, bg_upsampler=upsampler)
83
+
84
+ try:
85
+ # _, _, output = face_enhancer.enhance(img, has_aligned=False, only_center_face=False, paste_back=True, weight=weight)
86
+ _, _, output = face_enhancer.enhance(img, has_aligned=False, only_center_face=False, paste_back=True)
87
+ except RuntimeError as error:
88
+ print('Error', error)
89
+
90
+ try:
91
+ if scale != 2:
92
+ interpolation = cv2.INTER_AREA if scale < 2 else cv2.INTER_LANCZOS4
93
+ h, w = img.shape[0:2]
94
+ output = cv2.resize(output, (int(w * scale / 2), int(h * scale / 2)), interpolation=interpolation)
95
+ except Exception as error:
96
+ print('wrong scale input.', error)
97
+ if img_mode == 'RGBA': # RGBA images should be saved in png format
98
+ extension = 'png'
99
+ else:
100
+ extension = 'jpg'
101
+ save_path = f'output/out.{extension}'
102
+ cv2.imwrite(save_path, output)
103
+
104
+ output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
105
+ return output, save_path
106
+ except Exception as error:
107
+ print('global exception', error)
108
+ return None, None
109
+
110
+ # Function to remove scratches from an image
111
+ def remove_scratches(img):
112
+ scratch_remover = EraseScratches()
113
+ img_without_scratches = scratch_remover.erase(img)
114
+ return img_without_scratches
115
+
116
+
117
+
118
+ import tempfile
119
+
120
+ # Function for performing operations sequentially
121
+ def process_image(img):
122
+ try:
123
+ # Create a unique temporary directory for each request
124
+ temp_dir = tempfile.mkdtemp()
125
+
126
+ # Generate a unique filename for the temporary file
127
+ unique_filename = 'temp_image.jpg'
128
+ temp_file_path = os.path.join(temp_dir, unique_filename)
129
+
130
+ # Remove scratches from the input image
131
+ img_without_scratches = remove_scratches(img)
132
+
133
+ # Save the image without scratches to the temporary file
134
+ cv2.imwrite(temp_file_path, cv2.cvtColor(img_without_scratches, cv2.COLOR_BGR2RGB))
135
+
136
+ # Enhance the image using the saved file path
137
+ enhanced_img, save_path = enhance_image(temp_file_path, version='M2', scale=2)
138
+
139
+ # Convert the enhanced image to RGB format
140
+ enhanced_img_rgb = cv2.cvtColor(enhanced_img, cv2.COLOR_BGR2RGB)
141
+
142
+ # Delete the temporary file and directory
143
+ os.remove(temp_file_path)
144
+ os.rmdir(temp_dir)
145
+
146
+ # Return the enhanced image in RGB format and the path where it's saved
147
+ return enhanced_img, save_path
148
+ except Exception as e:
149
+ print('Error processing image:', e)
150
+ return None, None
151
+
152
+ # Gradio interface
153
+ title = "<span style='color: crimson;'>Aiconvert.online</span>"
154
+ description = r"""
155
+ """
156
+ article = r"""
157
+
158
+ """
159
+ demo = gr.Interface(
160
+ process_image, [
161
+ gr.Image(type="pil", label="Input"),
162
+ ], [
163
+ gr.Image(type="numpy", label="Result Image"),
164
+ gr.File(label="Download the output image")
165
+ ],
166
+ title=title,
167
+ description=description,
168
+ article=article)
169
+
170
+ demo.queue().launch()
171
+
172
+