forked from yizhiwang96/deepvecfont-v2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate.py
143 lines (123 loc) · 4.61 KB
/
generate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import fontTools
import os
import shutil
import typing
import PIL
from PIL import Image, ImageDraw, ImageFont
from data_utils.convert_ttf_to_sfd import convert_mp
from data_utils.write_glyph_imgs import write_glyph_imgs_mp
from data_utils.write_data_to_dirs import create_db
from data_utils.relax_rep import relax_rep
from test_few_shot import test_main_model
from options import get_parser_main_model
opts = get_parser_main_model().parse_args()
# Config on opts
# Inference opts
opts.mode = "test"
opts.language = "tha"
opts.char_num = 44
opts.ref_nshot = 8
opts.batch_size = 1 # inference rule
opts.img_size = 64
opts.max_seq_len = 121
opts.name_ckpt = ""
opts.model_path = "./inference_model/950_49452.ckpt"
opts.ref_char_ids = "0,1,2,3,4,5,6,7"
opts.dir_res = "./inference"
opts.data_root = "./inference/vecfont_dataset/"
# Data preprocessing opts
opts.data_path = './inference'
opts.sfd_path = f'{opts.data_path}/font_sfds'
opts.ttf_path = f'{opts.data_path}/font_ttfs'
opts.split = "test"
opts.debug = True # Save Image On write_glyph_imgs_mp
opts.output_path = f'{opts.data_path}/vecfont_dataset/'
opts.phase = 0
opts.FONT_SIZE = 1
opts.streamlit = True
# Glypts ID :
# [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E')]
# [(5, 'F'), (6, 'G'), (7, 'H'), (8, 'I'), (9, 'J')]
# [(10, 'K'), (11, 'L'), (12, 'M'), (13, 'N'), (14, 'O')]
# [(15, 'P'), (16, 'Q'), (17, 'R'), (18, 'S'), (19, 'T')]
# [(20, 'U'), (21, 'V'), (22, 'W'), (23, 'X'), (24, 'Y')]
# [(25, 'Z'), (26, 'a'), (27, 'b'), (28, 'c'), (29, 'd')]
# [(30, 'e'), (31, 'f'), (32, 'g'), (33, 'h'), (34, 'i')]
# [(35, 'j'), (36, 'k'), (37, 'l'), (38, 'm'), (39, 'n')]
# [(40, 'o'), (41, 'p'), (42, 'q'), (43, 'r'), (44, 's')]
# [(45, 't'), (46, 'u'), (47, 'v'), (48, 'w'), (49, 'x')]
# [(50, 'y'), (51, 'z'), (52, 'ก'), (53, 'ข'), (54, 'ฃ')]
# [(55, 'ค'), (56, 'ฅ'), (57, 'ฆ'), (58, 'ง'), (59, 'จ')]
# [(60, 'ฉ'), (61, 'ช'), (62, 'ซ'), (63, 'ฌ'), (64, 'ญ')]
# [(65, 'ฎ'), (66, 'ฏ'), (67, 'ฐ'), (68, 'ฑ'), (69, 'ฒ')]
# [(70, 'ณ'), (71, 'ด'), (72, 'ต'), (73, 'ถ'), (74, 'ท')]
# [(75, 'ธ'), (76, 'น'), (77, 'บ'), (78, 'ป'), (79, 'ผ')]
# [(80, 'ฝ'), (81, 'พ'), (82, 'ฟ'), (83, 'ภ'), (84, 'ม')]
# [(85, 'ย'), (86, 'ร'), (87, 'ล'), (88, 'ว'), (89, 'ศ')]
# [(90, 'ษ'), (91, 'ส'), (92, 'ห'), (93, 'ฬ'), (94, 'อ')]
# [(95, 'ฮ')]
import string
import pythainlp
thai_digits = [*pythainlp.thai_digits]
thai_characters = [*pythainlp.thai_consonants]
eng_characters = [*string.ascii_letters]
thai_floating = [*pythainlp.thai_vowels]
directories = [
"inference",
"inference/char_set",
"inference/font_sfds",
"inference/font_ttfs",
"inference/vecfont_dataset",
"inference/font_ttfs/tha/test",
]
# Data Preprocessing
def preprocessing(ttf_file) -> str:
shutil.rmtree("inference")
for directory in directories:
os.makedirs(directory, exist_ok=True)
# Save File / Copy File
if isinstance(ttf_file, memoryview):
with open(f"{opts.data_path}/font_ttfs/tha/test/0000.ttf", 'wb') as f:
f.write(ttf_file)
elif isinstance(ttf_file, str):
shutil.copy(ttf_file, f"{opts.data_path}/font_ttfs/tha/test/0000.ttf")
glypts = sorted(set(thai_characters))
print("Glypts:",len(glypts))
print("".join(glypts))
f = open("inference/char_set/tha.txt", "w")
f.write("".join(glypts))
f.close()
# Preprocess Pipeline
convert_mp(opts)
write_glyph_imgs_mp(opts)
output_path = os.path.join(opts.output_path, opts.language, opts.split)
log_path = os.path.join(opts.sfd_path, opts.language, 'log')
if not os.path.exists(output_path):
os.makedirs(output_path)
if not os.path.exists(log_path):
os.makedirs(log_path)
create_db(opts, output_path, log_path)
relax_rep(opts)
print("Finished making a data", ttf_file)
print("Saved at", output_path)
return output_path
def inference_model(n_samples, ref_char_ids, version):
opts.n_samples = n_samples
opts.ref_char_ids = ref_char_ids
# Select Model
if version == "TH2TH":
opts.model_path = "./inference_model/950_49452.ckpt"
elif version == "ENG2TH":
opts.model_path = "./inference_model/950_49452.ckpt"
else:
raise NotImplementedError
return test_main_model(opts)
def ttf_to_image(ttf_file, n_samples=10, ref_char_ids="1,2,3,4,5,6,7,8", version="TH2TH"):
preprocessing(ttf_file) # Make Data
merge_svg_img = inference_model(n_samples, ref_char_ids, version) # Inference
return merge_svg_img
def main():
print(opts.mode)
ttf_to_image("font_sample/SaoChingcha-Regular.otf")
if __name__ == "__main__":
main()