havas79 commited on
Commit
0b20aba
1 Parent(s): 182f30f

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -53
app.py CHANGED
@@ -63,7 +63,7 @@ def realesrgan(img, model_name, denoise_strength, face_enhance, outscale):
63
 
64
  # Restorer Class
65
  upsampler = RealESRGANer(
66
- scale=netscale,
67
  model_path=model_path,
68
  dni_weight=dni_weight,
69
  model=model,
@@ -103,7 +103,7 @@ def realesrgan(img, model_name, denoise_strength, face_enhance, outscale):
103
  extension = 'png'
104
  else:
105
  extension = 'jpg'
106
-
107
  out_filename = f"output_{rnd_string(8)}.{extension}"
108
  cv2.imwrite(out_filename, output)
109
  global last_file
@@ -111,18 +111,18 @@ def realesrgan(img, model_name, denoise_strength, face_enhance, outscale):
111
  return out_filename
112
 
113
 
114
- def rnd_string(number):
115
- """Returns a string of 'number' random characters
116
  """
117
  characters = "abcdefghijklmnopqrstuvwxyz_0123456789"
118
- result = "".join((random.choice(characters)) for x in range(number))
119
  return result
120
 
121
 
122
  def reset():
123
- """Resets the Image components of the Gradio interface and deletes
124
  the last processed image
125
- """
126
  global last_file
127
  if last_file:
128
  print(f"Deleting {last_file} ...")
@@ -132,12 +132,12 @@ def reset():
132
 
133
 
134
  def has_transparency(img):
135
- """This function works by first checking to see if a "transparency" property is defined
136
  in the image's info -- if so, we return "True". Then, if the image is using indexed colors
137
- (such as in GIFs), it gets the index of the transparent color in the palette
138
- (img.info.get("transparency", -1)) and checks if it's used anywhere in the canvas
139
- (img.getcolors()). If the image is in RGBA mode, then presumably it has transparency in
140
- it, but it double-checks by getting the minimum and maximum values of every color channel
141
  (img.getextrema()), and checks if the alpha channel's smallest value falls below 255.
142
  https://stackoverflow.com/questions/43864101/python-pil-check-if-image-is-transparent
143
  """
@@ -169,46 +169,58 @@ def image_properties(img):
169
  return properties
170
 
171
 
172
- # Gradio Interface
173
- with gr.Blocks(title="Real-ESRGAN Gradio Demo") as demo:
174
-
175
- gr.Markdown(
176
- """# <div align="center"> Real-ESRGAN Demo for Image Restoration and Upscaling </div>
177
- <div align="center"><img width="200" height="74" src="https://github.com/xinntao/Real-ESRGAN/raw/master/assets/realesrgan_logo.png"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
 
179
- This Gradio Demo was built as my Final Project for **CS50's Introduction to Programming with Python**.
180
- Please visit the [Real-ESRGAN GitHub page](https://github.com/xinntao/Real-ESRGAN) for detailed information about the project.
181
- """
182
- )
183
-
184
- with gr.Accordion("Options/Parameters"):
185
  with gr.Row():
186
- model_name = gr.Dropdown(label="Real-ESRGAN model to be used",
187
- choices=["RealESRGAN_x4plus", "RealESRNet_x4plus", "RealESRGAN_x4plus_anime_6B",
188
- "RealESRGAN_x2plus", "realesr-general-x4v3"],
189
- value="realesr-general-x4v3", show_label=True)
190
- denoise_strength = gr.Slider(label="Denoise Strength (Used only with the realesr-general-x4v3 model)",
191
- minimum=0, maximum=1, step=0.1, value=0.5)
192
- outscale = gr.Slider(label="Image Upscaling Factor",
193
- minimum=1, maximum=10, step=1, value=2, show_label=True)
194
- face_enhance = gr.Checkbox(label="Face Enhancement using GFPGAN (Doesn't work for anime images)",
195
- value=False, show_label=True)
196
-
197
- with gr.Row():
198
- with gr.Group():
199
- input_image = gr.Image(label="Source Image", type="pil", image_mode="RGBA")
200
- input_image_properties = gr.Textbox(label="Image Properties", max_lines=1)
201
- output_image = gr.Image(label="Restored Image", image_mode="RGBA")
202
- with gr.Row():
203
- restore_btn = gr.Button("Restore Image")
204
- reset_btn = gr.Button("Reset")
205
-
206
- # Event listeners:
207
- input_image.change(fn=image_properties, inputs=input_image, outputs=input_image_properties)
208
- restore_btn.click(fn=realesrgan,
209
- inputs=[input_image, model_name, denoise_strength, face_enhance, outscale], outputs=output_image)
210
- reset_btn.click(fn=reset, inputs=[], outputs=[output_image, input_image])
211
- # reset_btn.click(None, inputs=[], outputs=[input_image], _js="() => (null)\n")
212
- # Undocumented method to clear a component's value using Javascript
213
-
214
- demo.launch()
 
63
 
64
  # Restorer Class
65
  upsampler = RealESRGANer(
66
+ scale=netscale,
67
  model_path=model_path,
68
  dni_weight=dni_weight,
69
  model=model,
 
103
  extension = 'png'
104
  else:
105
  extension = 'jpg'
106
+
107
  out_filename = f"output_{rnd_string(8)}.{extension}"
108
  cv2.imwrite(out_filename, output)
109
  global last_file
 
111
  return out_filename
112
 
113
 
114
+ def rnd_string(x):
115
+ """Returns a string of 'x' random characters
116
  """
117
  characters = "abcdefghijklmnopqrstuvwxyz_0123456789"
118
+ result = "".join((random.choice(characters)) for i in range(x))
119
  return result
120
 
121
 
122
  def reset():
123
+ """Resets the Image components of the Gradio interface and deletes
124
  the last processed image
125
+ """
126
  global last_file
127
  if last_file:
128
  print(f"Deleting {last_file} ...")
 
132
 
133
 
134
  def has_transparency(img):
135
+ """This function works by first checking to see if a "transparency" property is defined
136
  in the image's info -- if so, we return "True". Then, if the image is using indexed colors
137
+ (such as in GIFs), it gets the index of the transparent color in the palette
138
+ (img.info.get("transparency", -1)) and checks if it's used anywhere in the canvas
139
+ (img.getcolors()). If the image is in RGBA mode, then presumably it has transparency in
140
+ it, but it double-checks by getting the minimum and maximum values of every color channel
141
  (img.getextrema()), and checks if the alpha channel's smallest value falls below 255.
142
  https://stackoverflow.com/questions/43864101/python-pil-check-if-image-is-transparent
143
  """
 
169
  return properties
170
 
171
 
172
+ def main():
173
+ # Gradio Interface
174
+ with gr.Blocks(title="Real-ESRGAN Gradio Demo") as demo:
175
+
176
+ gr.Markdown(
177
+ """# <div align="center"> Real-ESRGAN Demo for Image Restoration and Upscaling </div>
178
+ <div align="center"><img width="200" height="74" src="https://github.com/xinntao/Real-ESRGAN/raw/master/assets/realesrgan_logo.png"></div>
179
+
180
+ This Gradio Demo was built as my Final Project for **CS50's Introduction to Programming with Python**.
181
+ Please visit the [Real-ESRGAN GitHub page](https://github.com/xinntao/Real-ESRGAN) for detailed information about the project.
182
+ """
183
+ )
184
+
185
+ with gr.Accordion("Options/Parameters"):
186
+ with gr.Row():
187
+ model_name = gr.Dropdown(label="Real-ESRGAN inference model to be used",
188
+ choices=["RealESRGAN_x4plus", "RealESRNet_x4plus", "RealESRGAN_x4plus_anime_6B",
189
+ "RealESRGAN_x2plus", "realesr-general-x4v3"],
190
+ value="realesr-general-x4v3", show_label=True)
191
+ denoise_strength = gr.Slider(label="Denoise Strength (Used only with the realesr-general-x4v3 model)",
192
+ minimum=0, maximum=1, step=0.1, value=0.5)
193
+ outscale = gr.Slider(label="Image Upscaling Factor",
194
+ minimum=1, maximum=10, step=1, value=2, show_label=True)
195
+ face_enhance = gr.Checkbox(label="Face Enhancement using GFPGAN (Doesn't work for anime images)",
196
+ value=False, show_label=True)
197
 
 
 
 
 
 
 
198
  with gr.Row():
199
+ with gr.Group():
200
+ input_image = gr.Image(label="Source Image", type="pil", image_mode="RGBA")
201
+ input_image_properties = gr.Textbox(label="Image Properties", max_lines=1)
202
+ output_image = gr.Image(label="Restored Image", image_mode="RGBA")
203
+ with gr.Row():
204
+ restore_btn = gr.Button("Restore Image")
205
+ reset_btn = gr.Button("Reset")
206
+
207
+ # Event listeners:
208
+ input_image.change(fn=image_properties, inputs=input_image, outputs=input_image_properties)
209
+ restore_btn.click(fn=realesrgan,
210
+ inputs=[input_image, model_name, denoise_strength, face_enhance, outscale],
211
+ outputs=output_image)
212
+ reset_btn.click(fn=reset, inputs=[], outputs=[output_image, input_image])
213
+ # reset_btn.click(None, inputs=[], outputs=[input_image], _js="() => (null)\n")
214
+ # Undocumented method to clear a component's value using Javascript
215
+
216
+ gr.Markdown(
217
+ """*Please note that support for animated GIFs is not yet implemented. Should an animated GIF is chosen for restoration,
218
+ the demo will output only the first frame saved in PNG format (to preserve probable transparency).*
219
+ """
220
+ )
221
+
222
+ demo.launch()
223
+
224
+
225
+ if __name__ == "__main__":
226
+ main()