Spaces:
Sleeping
Sleeping
| 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(OUTPUT_IMG_KEY, n_samples, ref_char_ids, version): | |
| opts.n_samples = n_samples | |
| opts.ref_char_ids = ref_char_ids | |
| opts.OUTPUT_IMG_KEY = OUTPUT_IMG_KEY | |
| # 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, OUTPUT_IMG_KEY, 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(OUTPUT_IMG_KEY, 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() | |