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, 'ฮ')] ON_PRODUCTION = True if ON_PRODUCTION: start_path = os.getcwd() opts.data_path = os.path.join(start_path, "inference") else: start_path = "" import string thai_digits = [*'๐๑๒๓๔๕๖๗๘๙'] thai_characters = [*'กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ'] eng_characters = [*string.ascii_letters] thai_floating = [*'ฤฦะัาำิีึืุูเแโใไๅํ็'] 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: if os.path.exists(opts.data_path): shutil.rmtree(opts.data_path) # Remove Inference Folder for directory in directories: os.makedirs(os.path.join(start_path, 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()