Charlie Li commited on
Commit
112fcdf
β€’
1 Parent(s): 9604304
app.py CHANGED
@@ -13,10 +13,38 @@ print("Downloaded and unzipped the file.")
13
 
14
  diagram = get_svg_content("derendering_supp/derender_diagram.svg")
15
  org = get_svg_content("org/cor.svg")
16
-
17
- org_content = f"""
18
- {org}
19
- """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
 
22
  def demo(Dataset, Model, Output_Format):
@@ -97,17 +125,28 @@ def demo(Dataset, Model, Output_Format):
97
  with gr.Blocks() as app:
98
  gr.HTML(org_content)
99
  gr.Markdown(
100
- f"""
101
- # InkSight: Offline-to-Online Handwriting Conversion by Learning to Read and Write<br>
102
- <div>{diagram}</div>
103
- πŸ”” This demo showcases the outputs of <b>Small-i</b>, <b>Small-p</b>, and <b>Large-i</b> on three public datasets (100 samples each).<br>
104
- ℹ️ Choose a model variant and dataset, then click 'Sample' to see an input with its corresponding outputs for all three inference types.<br>
105
- πŸ“ Choose the output format: Image or Image+Video. While showing only images are faster, videos can demonstrate the writing process of the inks.<br>
 
 
 
 
 
 
 
 
 
 
 
106
  """
107
  )
108
  with gr.Row():
109
  dataset = gr.Dropdown(
110
- ["IMGUR5K", "IAM", "HierText"], label="Dataset", value="HierText"
111
  )
112
  model = gr.Dropdown(
113
  ["Small-i", "Large-i", "Small-p"],
@@ -156,4 +195,41 @@ with gr.Blocks() as app:
156
  ],
157
  )
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  app.launch()
 
13
 
14
  diagram = get_svg_content("derendering_supp/derender_diagram.svg")
15
  org = get_svg_content("org/cor.svg")
16
+ org_content = f"{org}"
17
+
18
+ gif_filenames = [
19
+ "christians.gif",
20
+ "good.gif",
21
+ "october.gif",
22
+ "welcome.gif",
23
+ "you.gif",
24
+ "letter.gif",
25
+ ]
26
+ captions = [
27
+ "CHRISTIANS",
28
+ "Good",
29
+ "October",
30
+ "WELOME",
31
+ "you",
32
+ "letter",
33
+ ]
34
+ gif_base64_strings = {
35
+ caption: get_base64_encoded_gif(f"gifs/{name}")
36
+ for caption, name in zip(captions, gif_filenames)
37
+ }
38
+
39
+ sketches = [
40
+ "bird.gif",
41
+ "cat.gif",
42
+ "coffee.gif",
43
+ "penguin.gif",
44
+ ]
45
+ sketches_base64_strings = {
46
+ name: get_base64_encoded_gif(f"sketches/{name}") for name in sketches
47
+ }
48
 
49
 
50
  def demo(Dataset, Model, Output_Format):
 
125
  with gr.Blocks() as app:
126
  gr.HTML(org_content)
127
  gr.Markdown(
128
+ "# InkSight: Offline-to-Online Handwriting Conversion by Learning to Read and Write"
129
+ )
130
+ gr.HTML(
131
+ """
132
+ <div style="display: flex; align-items: center; margin-bottom: 20px;">
133
+ <a href="https://arxiv.org/abs/2402.05804" target="_blank" style="font-size: 16px; background-color: #4CAF50; color: white; padding: 5px 7px; text-decoration: none; border-radius: 2px;">
134
+ πŸ“„ Read the Paper
135
+ </a>
136
+ </div>
137
+ """
138
+ )
139
+ gr.HTML(f"<div style='margin: 20px 0;'>{diagram}</div>")
140
+ gr.Markdown(
141
+ """
142
+ πŸ”” This demo showcases the outputs of **Small-i**, **Small-p**, and **Large-i** on three public datasets (word-level, 100 samples each).<br>
143
+ ℹ️ Choose a model variant and dataset (IAM, IMGUR5K, HierText), then click 'Sample' to see an input with its corresponding outputs for all three inference types.<br>
144
+ πŸ“ Output format: Image or Image+Video. While showing only images are faster, videos can demonstrate the writing process of the inks.<br>
145
  """
146
  )
147
  with gr.Row():
148
  dataset = gr.Dropdown(
149
+ ["IAM", "IMGUR5K", "HierText"], label="Dataset", value="IAM"
150
  )
151
  model = gr.Dropdown(
152
  ["Small-i", "Large-i", "Small-p"],
 
195
  ],
196
  )
197
 
198
+ gr.Markdown("## Additional Word-level Samples")
199
+
200
+ html_content = """
201
+ <div style="display: flex; justify-content: space-around; flex-wrap: wrap; gap: 0px;">
202
+ """
203
+
204
+ for caption, base64_string in gif_base64_strings.items():
205
+ title = caption
206
+ html_content += f"""
207
+ <div>
208
+ <img src="data:image/gif;base64,{base64_string}" alt="{title}" style="width: 100%; max-width: 200px;">
209
+ <p style="text-align: center;">{title}</p>
210
+ </div>
211
+ """
212
+
213
+ html_content += "</div>"
214
+
215
+ gr.HTML(html_content)
216
+
217
+ # Sketches
218
+ gr.Markdown("## Additional Sketch Samples")
219
+
220
+ html_content = """
221
+ <div style="display: flex; justify-content: space-around; flex-wrap: wrap; gap: 0px;">
222
+ """
223
+
224
+ for _, base64_string in sketches_base64_strings.items():
225
+ html_content += f"""
226
+ <div>
227
+ <img src="data:image/gif;base64,{base64_string}" style="width: 100%; max-width: 200px;">
228
+ </div>
229
+ """
230
+
231
+ html_content += "</div>"
232
+
233
+ gr.HTML(html_content)
234
+
235
  app.launch()
gifs/christians.gif ADDED
gifs/good.gif ADDED
gifs/letter.gif ADDED
gifs/october.gif ADDED
gifs/welcome.gif ADDED
gifs/you.gif ADDED
sketches/bird.gif ADDED
sketches/cat.gif ADDED
sketches/coffee.gif ADDED
sketches/penguin.gif ADDED
utils.py CHANGED
@@ -20,6 +20,7 @@ from io import BytesIO
20
  from matplotlib.animation import FuncAnimation, FFMpegWriter, PillowWriter
21
  import requests
22
  import zipfile
 
23
 
24
 
25
  warnings.filterwarnings("ignore")
@@ -41,6 +42,11 @@ def unzip_file(filename, extract_to="."):
41
  zip_ref.extractall(extract_to)
42
 
43
 
 
 
 
 
 
44
  def load_and_pad_img_dir(file_dir):
45
  image_path = os.path.join(file_dir)
46
  image = Image.open(image_path)
 
20
  from matplotlib.animation import FuncAnimation, FFMpegWriter, PillowWriter
21
  import requests
22
  import zipfile
23
+ import base64
24
 
25
 
26
  warnings.filterwarnings("ignore")
 
42
  zip_ref.extractall(extract_to)
43
 
44
 
45
+ def get_base64_encoded_gif(gif_path):
46
+ with open(gif_path, "rb") as gif_file:
47
+ return base64.b64encode(gif_file.read()).decode("utf-8")
48
+
49
+
50
  def load_and_pad_img_dir(file_dir):
51
  image_path = os.path.join(file_dir)
52
  image = Image.open(image_path)