brayden-gg commited on
Commit
f6d8e1b
·
1 Parent(s): 0a8d425

added precomputing for writer interpolation

Browse files
Files changed (1) hide show
  1. app.py +63 -18
app.py CHANGED
@@ -30,12 +30,55 @@ for writer_id in [120, 80]:
30
  all_loaded_data.append(loaded_data)
31
 
32
  default_loaded_data = all_loaded_data[-1]
33
- # for writer interpolation
34
- def interpolate_writers(target_word, weight):
35
- image = convenience.sample_blended_writers([1 - weight, weight], target_word, net, all_loaded_data, device).convert("RGB")
36
- return image
37
 
38
- def choose_blend_writers(writer1, writer2):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  net.clamp_mdn = 0
40
  id1, id2 = int(writer1.split(" ")[1]), int(writer2.split(" ")[1])
41
  all_loaded_data.clear()
@@ -43,7 +86,7 @@ def choose_blend_writers(writer1, writer2):
43
  loaded_data = dl.next_batch(TYPE='TRAIN', uid=writer_id, tids=list(range(num_samples)))
44
  all_loaded_data.append(loaded_data)
45
 
46
- return gr.Slider.update(label=f"{writer1} vs. {writer2}")
47
  '''
48
  def choose_writer(writ, c1, c2, c3, c4, val):
49
  all_loaded_data.clear()
@@ -63,7 +106,7 @@ def choose_blend_chars(c1, c2):
63
  return gr.Slider.update(label=f"'{c1}' vs. '{c2}'")
64
 
65
  # for MDN
66
- def mdn_sample(word, maxs, maxr):
67
  image = convenience.mdn_single_sample(word, maxs, maxr, net, [default_loaded_data], device).convert("RGB")
68
  return image
69
  """
@@ -73,7 +116,9 @@ def char_vid(word):
73
  vid_path = f"/content/drive/MyDrive/Colab Notebooks/Spring22/decoupled-style-descriptors-eb/results/abcdefg_video.mov"
74
  return gr.Video.update(value=vid_path)
75
  """
76
-
 
 
77
  with gr.Blocks() as demo:
78
  with gr.Tabs():
79
  with gr.TabItem("Blend Writers"):
@@ -93,12 +138,12 @@ with gr.Blocks() as demo:
93
  writer_default_image = convenience.sample_blended_writers([0.3, 0.7], "hello world", net, all_loaded_data, device).convert("RGB")
94
  writer_output = gr.Image(writer_default_image)
95
 
96
- writer_submit.click(fn=interpolate_writers, inputs=[target_word, writer_slider], outputs=[writer_output])
97
- writer_slider.change(fn=interpolate_writers, inputs=[target_word, writer_slider], outputs=[writer_output])
98
- target_word.submit(fn=interpolate_writers, inputs=[target_word, writer_slider], outputs=[writer_output])
99
 
100
- writer1.change(fn=choose_blend_writers, inputs=[writer1, writer2], outputs=[writer_slider])
101
- writer2.change(fn=choose_blend_writers, inputs=[writer1, writer2], outputs=[writer_slider])
102
 
103
 
104
  with gr.TabItem("Blend Characters"):
@@ -166,14 +211,14 @@ with gr.Blocks() as demo:
166
  with gr.Column():
167
  scale_rand = gr.Slider(0, 3, value=0.5, label="Scale of Randomness")
168
  with gr.Row():
169
- sample_button = gr.Button(value="Resample!")
170
  with gr.Row():
171
  default_im = convenience.mdn_single_sample("hello world", 0.5, 1, net, [default_loaded_data], device).convert('RGB')
172
  mdn_output = gr.Image(default_im)
173
 
174
- max_rand.change(fn=mdn_sample, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
175
- scale_rand.change(fn=mdn_sample, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
176
- sample_button.click(fn=mdn_sample, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
177
- mdn_word.submit(fn=mdn_sample, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
178
 
179
  demo.launch()
 
30
  all_loaded_data.append(loaded_data)
31
 
32
  default_loaded_data = all_loaded_data[-1]
 
 
 
 
33
 
34
+ # data for writer interpolation
35
+ words = []
36
+ writer_mean_Ws = []
37
+ all_word_writer_Ws = []
38
+ all_word_writer_Cs = []
39
+ weight = 0.7
40
+
41
+ def update_target_word(target_word):
42
+ words.clear()
43
+ for word in target_word.split(" "):
44
+ words.append(word)
45
+
46
+ writer_mean_Ws.clear()
47
+ for loaded_data in all_loaded_data:
48
+ mean_global_W = convenience.get_mean_global_W(net, loaded_data, device)
49
+ writer_mean_Ws.append(mean_global_W)
50
+
51
+ all_word_writer_Ws.clear()
52
+ all_word_writer_Cs.clear()
53
+ for word in words:
54
+ all_writer_Ws, all_writer_Cs = convenience.get_DSD(net, word, writer_mean_Ws, all_loaded_data, device)
55
+ all_word_writer_Ws.append(all_writer_Ws)
56
+ all_word_writer_Cs.append(all_writer_Cs)
57
+
58
+ return update_writer_slider(weight)
59
+
60
+
61
+ # for writer interpolation
62
+ def update_writer_slider(val):
63
+ global weight
64
+ weight = val
65
+ im = Image.fromarray(np.zeros([160, 750]))
66
+ dr = ImageDraw.Draw(im)
67
+ width = 50
68
+
69
+ for word, all_writer_Ws, all_writer_Cs in zip(words, all_word_writer_Ws, all_word_writer_Cs):
70
+ all_W_c = convenience.get_writer_blend_W_c([1 - weight, weight], all_writer_Ws, all_writer_Cs)
71
+ all_commands = convenience.get_commands(net, word, all_W_c)
72
+
73
+ for [x, y, t] in all_commands:
74
+ if t == 0:
75
+ dr.line((px+width, py, x+width, y), 255, 1)
76
+ px, py = x, y
77
+ width += np.max(all_commands[:, 0]) + 25
78
+
79
+ return im.convert("RGB")
80
+
81
+ def update_chosen_writers(writer1, writer2):
82
  net.clamp_mdn = 0
83
  id1, id2 = int(writer1.split(" ")[1]), int(writer2.split(" ")[1])
84
  all_loaded_data.clear()
 
86
  loaded_data = dl.next_batch(TYPE='TRAIN', uid=writer_id, tids=list(range(num_samples)))
87
  all_loaded_data.append(loaded_data)
88
 
89
+ return gr.Slider.update(label=f"{writer1} vs. {writer2}"), update_writer_slider(weight)
90
  '''
91
  def choose_writer(writ, c1, c2, c3, c4, val):
92
  all_loaded_data.clear()
 
106
  return gr.Slider.update(label=f"'{c1}' vs. '{c2}'")
107
 
108
  # for MDN
109
+ def mdn_(word, maxs, maxr):
110
  image = convenience.mdn_single_sample(word, maxs, maxr, net, [default_loaded_data], device).convert("RGB")
111
  return image
112
  """
 
116
  vid_path = f"/content/drive/MyDrive/Colab Notebooks/Spring22/decoupled-style-descriptors-eb/results/abcdefg_video.mov"
117
  return gr.Video.update(value=vid_path)
118
  """
119
+
120
+ update_target_word("hello world")
121
+
122
  with gr.Blocks() as demo:
123
  with gr.Tabs():
124
  with gr.TabItem("Blend Writers"):
 
138
  writer_default_image = convenience.sample_blended_writers([0.3, 0.7], "hello world", net, all_loaded_data, device).convert("RGB")
139
  writer_output = gr.Image(writer_default_image)
140
 
141
+ writer_submit.click(fn=update_writer_slider, inputs=[writer_slider], outputs=[writer_output])
142
+ writer_slider.change(fn=update_writer_slider, inputs=[writer_slider], outputs=[writer_output])
143
+ target_word.submit(fn=update_target_word, inputs=[target_word], outputs=[writer_output])
144
 
145
+ writer1.change(fn=update_chosen_writers, inputs=[writer1, writer2], outputs=[writer_slider, writer_output])
146
+ writer2.change(fn=update_chosen_writers, inputs=[writer1, writer2], outputs=[writer_slider, writer_output])
147
 
148
 
149
  with gr.TabItem("Blend Characters"):
 
211
  with gr.Column():
212
  scale_rand = gr.Slider(0, 3, value=0.5, label="Scale of Randomness")
213
  with gr.Row():
214
+ _button = gr.Button(value="Re!")
215
  with gr.Row():
216
  default_im = convenience.mdn_single_sample("hello world", 0.5, 1, net, [default_loaded_data], device).convert('RGB')
217
  mdn_output = gr.Image(default_im)
218
 
219
+ max_rand.change(fn=mdn_, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
220
+ scale_rand.change(fn=mdn_, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
221
+ _button.click(fn=mdn_, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
222
+ mdn_word.submit(fn=mdn_, inputs=[mdn_word, scale_rand, max_rand], outputs=[mdn_output])
223
 
224
  demo.launch()