Spaces:
Sleeping
Sleeping
File size: 4,724 Bytes
b762e56 |
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 144 |
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()
|