File size: 5,119 Bytes
b762e56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8244cac
 
 
 
 
 
eccc0c5
b762e56
 
60fc8e6
 
b762e56
60fc8e6
b762e56
 
 
 
 
 
 
 
 
 
 
 
 
eccc0c5
 
b762e56
8244cac
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
145
146
147
148
149
150
151
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()