Spaces:
Runtime error
Runtime error
Changed blocks format to tabs
Browse files
app.py
CHANGED
@@ -128,18 +128,7 @@ class ImageEditor(object):
|
|
128 |
|
129 |
return style_list
|
130 |
|
131 |
-
def
|
132 |
-
self,
|
133 |
-
input, # Input image path
|
134 |
-
output_styles, # Which output style do you want to use?
|
135 |
-
generate_video, # Generate a video instead of an output image
|
136 |
-
with_editing, # Apply latent space editing to the generated video
|
137 |
-
video_format # Choose gif to display in browser, mp4 for higher-quality downloadable video
|
138 |
-
):
|
139 |
-
|
140 |
-
styles = output_styles
|
141 |
-
|
142 |
-
# @title Align image
|
143 |
input_image = self.run_alignment(str(input))
|
144 |
|
145 |
input_image = input_image.resize(self.resize_dims)
|
@@ -152,10 +141,32 @@ class ImageEditor(object):
|
|
152 |
result_image, latent = images[0], latents[0]
|
153 |
|
154 |
inverted_latent = latent.unsqueeze(0).unsqueeze(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
out_dir = Path(tempfile.mkdtemp())
|
156 |
out_path = out_dir / "out.jpg"
|
157 |
|
158 |
-
|
|
|
159 |
|
160 |
if not generate_video:
|
161 |
with torch.no_grad():
|
@@ -232,54 +243,22 @@ with blocks:
|
|
232 |
"For more information about the paper and code for training your own models (with examples OR text), see below."
|
233 |
)
|
234 |
|
235 |
-
with gr.Row():
|
236 |
-
|
237 |
-
with gr.Column():
|
238 |
-
input_img = gr.inputs.Image(type="filepath", label="Input image")
|
239 |
-
style_choice = gr.inputs.CheckboxGroup(choices=editor.get_style_list(), type="value", label="Choose your styles!")
|
240 |
-
|
241 |
-
video_choice = gr.inputs.Checkbox(default=False, label="Generate Video?", optional=False)
|
242 |
-
|
243 |
-
video_options_group = gr.Group()
|
244 |
-
|
245 |
-
with video_options_group:
|
246 |
-
edit_choice = gr.inputs.Checkbox(default=False, label="With Editing?", optional=False)
|
247 |
-
vid_format_choice = gr.inputs.Radio(choices=["gif", "mp4"], type="value", default='mp4', label="Video Format")
|
248 |
-
|
249 |
-
# img_button = gr.Button("Edit Image")
|
250 |
-
# vid_button = gr.Button("Generate Video")
|
251 |
-
img_button = gr.Button("Edit Image")
|
252 |
-
vid_button = gr.Button("Generate Video")
|
253 |
-
|
254 |
-
with gr.Column():
|
255 |
-
img_output = gr.outputs.Image(type="file")
|
256 |
-
vid_output = gr.outputs.Video()
|
257 |
-
|
258 |
-
# visibility_fn = change_component_visibility(component_types=[gr.Checkbox, gr.Radio, gr.Video, gr.Button, gr.Image, gr.Button],
|
259 |
-
# invert_choices=[False, False, False, False, True, True])
|
260 |
-
|
261 |
-
# video_choice.change(fn=visibility_fn, inputs=video_choice, outputs=[edit_choice, vid_format_choice, vid_output, vid_button, img_output, img_button])
|
262 |
-
video_choice.change(fn=group_visibility, inputs=video_choice, outputs=video_options_group)
|
263 |
-
img_button.click(fn=editor.predict, inputs=[input_img, style_choice, video_choice, edit_choice, vid_format_choice], outputs=img_output)
|
264 |
-
vid_button.click(fn=editor.predict, inputs=[input_img, style_choice, video_choice, edit_choice, vid_format_choice], outputs=vid_output)
|
265 |
-
|
266 |
-
# input_img = gr.inputs.Image(type="filepath", label="Input image")
|
267 |
-
# style_choice = gr.inputs.CheckboxGroup(choices=editor.get_style_list(), type="value", label="Choose your styles!")
|
268 |
-
|
269 |
-
|
270 |
|
271 |
-
#
|
272 |
-
#
|
273 |
-
#
|
274 |
-
# with gr.Column():
|
275 |
-
|
276 |
-
|
277 |
|
278 |
# video_choice = gr.inputs.Checkbox(default=False, label="Generate Video?", optional=False)
|
279 |
|
280 |
-
#
|
281 |
-
|
|
|
|
|
|
|
282 |
|
|
|
|
|
283 |
# img_button = gr.Button("Edit Image")
|
284 |
# vid_button = gr.Button("Generate Video")
|
285 |
|
@@ -287,13 +266,36 @@ with blocks:
|
|
287 |
# img_output = gr.outputs.Image(type="file")
|
288 |
# vid_output = gr.outputs.Video()
|
289 |
|
290 |
-
# visibility_fn = change_component_visibility(component_types=[gr.Checkbox, gr.Radio, gr.Video, gr.Button, gr.Image, gr.Button],
|
291 |
-
# invert_choices=[False, False, False, False, True, True])
|
292 |
-
|
293 |
-
# video_choice.change(fn=visibility_fn, inputs=video_choice, outputs=[edit_choice, vid_format_choice, vid_output, vid_button, img_output, img_button])
|
294 |
|
|
|
|
|
295 |
# img_button.click(fn=editor.predict, inputs=[input_img, style_choice, video_choice, edit_choice, vid_format_choice], outputs=img_output)
|
296 |
# vid_button.click(fn=editor.predict, inputs=[input_img, style_choice, video_choice, edit_choice, vid_format_choice], outputs=vid_output)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
article = "<p style='text-align: center'><a href='https://arxiv.org/abs/2108.00946' target='_blank'>StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators</a> | <a href='https://stylegan-nada.github.io/' target='_blank'>Project Page</a> | <a href='https://github.com/rinongal/StyleGAN-nada' target='_blank'>Code</a></p> <center><img src='https://visitor-badge.glitch.me/badge?page_id=rinong_sgnada' alt='visitor badge'></center>"
|
299 |
gr.Markdown(article)
|
|
|
128 |
|
129 |
return style_list
|
130 |
|
131 |
+
def invert_image(self, input_image):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
input_image = self.run_alignment(str(input))
|
133 |
|
134 |
input_image = input_image.resize(self.resize_dims)
|
|
|
141 |
result_image, latent = images[0], latents[0]
|
142 |
|
143 |
inverted_latent = latent.unsqueeze(0).unsqueeze(1)
|
144 |
+
|
145 |
+
return inverted_latent
|
146 |
+
|
147 |
+
def get_generators_for_styles(self, output_styles):
|
148 |
+
return [self.generators[style] for style in output_styles]
|
149 |
+
|
150 |
+
def edit_image(self, input, output_styles):
|
151 |
+
return self.predict(input, output_styles, False, False, None)
|
152 |
+
|
153 |
+
def edit_video(self, input, output_styles, with_editing, video_format):
|
154 |
+
return self.predict(input, output_styles, True, with_editing, video_format)
|
155 |
+
|
156 |
+
def predict(
|
157 |
+
self,
|
158 |
+
input, # Input image path
|
159 |
+
output_styles, # Which output style do you want to use?
|
160 |
+
generate_video, # Generate a video instead of an output image
|
161 |
+
with_editing, # Apply latent space editing to the generated video
|
162 |
+
video_format # Choose gif to display in browser, mp4 for higher-quality downloadable video
|
163 |
+
):
|
164 |
+
# @title Align image
|
165 |
out_dir = Path(tempfile.mkdtemp())
|
166 |
out_path = out_dir / "out.jpg"
|
167 |
|
168 |
+
inverted_latent = self.invert_image(input)
|
169 |
+
generators = self.get_generators_for_styles(output_styles)
|
170 |
|
171 |
if not generate_video:
|
172 |
with torch.no_grad():
|
|
|
243 |
"For more information about the paper and code for training your own models (with examples OR text), see below."
|
244 |
)
|
245 |
|
246 |
+
# with gr.Row():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247 |
|
248 |
+
# with gr.Column():
|
249 |
+
# input_img = gr.inputs.Image(type="filepath", label="Input image")
|
250 |
+
# style_choice = gr.inputs.CheckboxGroup(choices=editor.get_style_list(), type="value", label="Choose your styles!")
|
|
|
|
|
|
|
251 |
|
252 |
# video_choice = gr.inputs.Checkbox(default=False, label="Generate Video?", optional=False)
|
253 |
|
254 |
+
# video_options_group = gr.Group()
|
255 |
+
|
256 |
+
# with video_options_group:
|
257 |
+
# edit_choice = gr.inputs.Checkbox(default=False, label="With Editing?", optional=False)
|
258 |
+
# vid_format_choice = gr.inputs.Radio(choices=["gif", "mp4"], type="value", default='mp4', label="Video Format")
|
259 |
|
260 |
+
# # img_button = gr.Button("Edit Image")
|
261 |
+
# # vid_button = gr.Button("Generate Video")
|
262 |
# img_button = gr.Button("Edit Image")
|
263 |
# vid_button = gr.Button("Generate Video")
|
264 |
|
|
|
266 |
# img_output = gr.outputs.Image(type="file")
|
267 |
# vid_output = gr.outputs.Video()
|
268 |
|
269 |
+
# # visibility_fn = change_component_visibility(component_types=[gr.Checkbox, gr.Radio, gr.Video, gr.Button, gr.Image, gr.Button],
|
270 |
+
# # invert_choices=[False, False, False, False, True, True])
|
|
|
|
|
271 |
|
272 |
+
# # video_choice.change(fn=visibility_fn, inputs=video_choice, outputs=[edit_choice, vid_format_choice, vid_output, vid_button, img_output, img_button])
|
273 |
+
# video_choice.change(fn=group_visibility, inputs=video_choice, outputs=video_options_group)
|
274 |
# img_button.click(fn=editor.predict, inputs=[input_img, style_choice, video_choice, edit_choice, vid_format_choice], outputs=img_output)
|
275 |
# vid_button.click(fn=editor.predict, inputs=[input_img, style_choice, video_choice, edit_choice, vid_format_choice], outputs=vid_output)
|
276 |
+
|
277 |
+
input_img = gr.inputs.Image(type="filepath", label="Input image")
|
278 |
+
|
279 |
+
with gr.Row():
|
280 |
+
style_choice = gr.inputs.CheckboxGroup(choices=editor.get_style_list(), type="value", label="Choose your styles!")
|
281 |
+
|
282 |
+
with gr.Tabs():
|
283 |
+
with gr.TabItem("Edit Images"):
|
284 |
+
with gr.Row():
|
285 |
+
img_button = gr.Button("Edit Image")
|
286 |
+
img_output = gr.outputs.Image(type="file")
|
287 |
+
|
288 |
+
with gr.TabItem("Create Video"):
|
289 |
+
with gr.Row():
|
290 |
+
edit_choice = gr.inputs.Checkbox(default=False, label="With latent space editing?", optional=False)
|
291 |
+
vid_format_choice = gr.inputs.Radio(choices=["gif", "mp4"], type="value", default='mp4', label="Video Format")
|
292 |
+
|
293 |
+
with gr.Row():
|
294 |
+
vid_button = gr.Button("Generate Video")
|
295 |
+
vid_output = gr.outputs.Video()
|
296 |
+
|
297 |
+
img_button.click(fn=editor.edit_image, inputs=[input_img, style_choice], outputs=img_output)
|
298 |
+
vid_button.click(fn=editor.edit_video, inputs=[input_img, style_choice, edit_choice, vid_format_choice], outputs=vid_output)
|
299 |
|
300 |
article = "<p style='text-align: center'><a href='https://arxiv.org/abs/2108.00946' target='_blank'>StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators</a> | <a href='https://stylegan-nada.github.io/' target='_blank'>Project Page</a> | <a href='https://github.com/rinongal/StyleGAN-nada' target='_blank'>Code</a></p> <center><img src='https://visitor-badge.glitch.me/badge?page_id=rinong_sgnada' alt='visitor badge'></center>"
|
301 |
gr.Markdown(article)
|