Spaces:
Build error
Build error
solitarycodefinement
commited on
Commit
·
b70e6b4
1
Parent(s):
11a1ad9
christmas models
Browse files
app.py
CHANGED
@@ -157,10 +157,9 @@ class ImageEditor(object):
|
|
157 |
|
158 |
def get_target_latent(self, source_latent, alter, generators):
|
159 |
np_source_latent = source_latent.squeeze(0).cpu().detach().numpy()
|
160 |
-
|
161 |
-
if not edit:
|
162 |
return [source_latent.squeeze(0), ] * max((len(generators) - 1), 1)
|
163 |
-
|
164 |
projected_code_np = project_code_by_edit_name(np_source_latent, edit[0], edit[1])
|
165 |
return torch.from_numpy(projected_code_np).float().to(self.device)
|
166 |
|
@@ -168,16 +167,10 @@ class ImageEditor(object):
|
|
168 |
def edit_image(self, input, output_styles, edit_choices):
|
169 |
return self.predict(input, output_styles, edit_choices=edit_choices)
|
170 |
|
171 |
-
@_pack_edits
|
172 |
-
def edit_video(self, input, output_styles, loop_styles, edit_choices):
|
173 |
-
return self.predict(input, output_styles, generate_video=True, loop_styles=loop_styles,
|
174 |
-
edit_choices=edit_choices)
|
175 |
-
|
176 |
def predict(
|
177 |
self,
|
178 |
input, # Input image path
|
179 |
output_styles, # Style checkbox options.
|
180 |
-
generate_video=False, # Generate a video instead of an output image
|
181 |
loop_styles=False, # Loop back to the initial style
|
182 |
edit_choices=None, # Optional dictionary with edit choice arguments
|
183 |
):
|
@@ -205,20 +198,6 @@ class ImageEditor(object):
|
|
205 |
|
206 |
return output_paths
|
207 |
|
208 |
-
def generate_vid(self, generators, source_latent, target_latents, out_dir):
|
209 |
-
|
210 |
-
fps = 24
|
211 |
-
|
212 |
-
with tempfile.TemporaryDirectory() as dirpath:
|
213 |
-
generate_frames(source_latent, target_latents, generators, dirpath)
|
214 |
-
video_from_interpolations(fps, dirpath)
|
215 |
-
|
216 |
-
gen_path = os.path.join(dirpath, "out.mp4")
|
217 |
-
out_path = os.path.join(out_dir, "out.mp4")
|
218 |
-
|
219 |
-
shutil.copy2(gen_path, out_path)
|
220 |
-
|
221 |
-
return out_path
|
222 |
|
223 |
def run_alignment(self, image_path):
|
224 |
aligned_image = align_face(filepath=image_path, predictor=self.shape_predictor)
|
@@ -243,7 +222,7 @@ with blocks:
|
|
243 |
)
|
244 |
gr.Markdown(
|
245 |
"<h4 style='font-size: 110%;margin-top:.5em'>Usage</h4><div>Upload an image of your face, pick your desired output styles, and apply StyleGAN-based editing.</div>"
|
246 |
-
"<div>Choose the edit image tab to create static images in all chosen styles
|
247 |
)
|
248 |
with gr.Row():
|
249 |
with gr.Column():
|
@@ -252,23 +231,14 @@ with blocks:
|
|
252 |
with gr.Column():
|
253 |
style_choice = gr.inputs.CheckboxGroup(choices=editor.get_style_list(), type="value",
|
254 |
label="Choose your styles!")
|
|
|
|
|
|
|
|
|
255 |
|
256 |
with gr.Row():
|
257 |
-
with gr.Column():
|
258 |
-
img_button = gr.Button("Edit Image")
|
259 |
img_output = gr.Gallery(label="Output Images")
|
260 |
|
261 |
-
with gr.Column():
|
262 |
-
gr.Markdown(
|
263 |
-
"Move the sliders to make the chosen attribute stronger (e.g. the person older) or leave at 0 to disable editing.")
|
264 |
-
gr.Markdown(
|
265 |
-
"If multiple options are provided, they will be used randomly between images (or sequentially for a video), <u>not</u> together.")
|
266 |
-
gr.Markdown(
|
267 |
-
"Please note that some directions may be entangled. For example, hair length adjustments are likely to also modify the perceived gender.")
|
268 |
-
|
269 |
-
alter = gr.Dropdown(
|
270 |
-
choices=["None", "Masculine", "Feminine", "Smiling", "Frowning", "Young", "Old", "Short Hair",
|
271 |
-
"Long Hair"], value="None")
|
272 |
|
273 |
img_button.click(fn=editor.edit_image, inputs=[alter, input_img, style_choice], outputs=img_output)
|
274 |
|
|
|
157 |
|
158 |
def get_target_latent(self, source_latent, alter, generators):
|
159 |
np_source_latent = source_latent.squeeze(0).cpu().detach().numpy()
|
160 |
+
if alter == "None":
|
|
|
161 |
return [source_latent.squeeze(0), ] * max((len(generators) - 1), 1)
|
162 |
+
edit = interface_gan_map[alter]
|
163 |
projected_code_np = project_code_by_edit_name(np_source_latent, edit[0], edit[1])
|
164 |
return torch.from_numpy(projected_code_np).float().to(self.device)
|
165 |
|
|
|
167 |
def edit_image(self, input, output_styles, edit_choices):
|
168 |
return self.predict(input, output_styles, edit_choices=edit_choices)
|
169 |
|
|
|
|
|
|
|
|
|
|
|
170 |
def predict(
|
171 |
self,
|
172 |
input, # Input image path
|
173 |
output_styles, # Style checkbox options.
|
|
|
174 |
loop_styles=False, # Loop back to the initial style
|
175 |
edit_choices=None, # Optional dictionary with edit choice arguments
|
176 |
):
|
|
|
198 |
|
199 |
return output_paths
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
|
202 |
def run_alignment(self, image_path):
|
203 |
aligned_image = align_face(filepath=image_path, predictor=self.shape_predictor)
|
|
|
222 |
)
|
223 |
gr.Markdown(
|
224 |
"<h4 style='font-size: 110%;margin-top:.5em'>Usage</h4><div>Upload an image of your face, pick your desired output styles, and apply StyleGAN-based editing.</div>"
|
225 |
+
"<div>Choose the edit image tab to create static images in all chosen styles.</div>"
|
226 |
)
|
227 |
with gr.Row():
|
228 |
with gr.Column():
|
|
|
231 |
with gr.Column():
|
232 |
style_choice = gr.inputs.CheckboxGroup(choices=editor.get_style_list(), type="value",
|
233 |
label="Choose your styles!")
|
234 |
+
alter = gr.Dropdown(
|
235 |
+
choices=["None", "Masculine", "Feminine", "Smiling", "Frowning", "Young", "Old", "Short Hair",
|
236 |
+
"Long Hair"], value="None")
|
237 |
+
img_button = gr.Button("Edit Image")
|
238 |
|
239 |
with gr.Row():
|
|
|
|
|
240 |
img_output = gr.Gallery(label="Output Images")
|
241 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
242 |
|
243 |
img_button.click(fn=editor.edit_image, inputs=[alter, input_img, style_choice], outputs=img_output)
|
244 |
|