diff --git a/README.md b/README.md index 407a9d360b2d09b0a804cbe0b953dd421db20ac3..432a8bf356ee3ffd278688fdc72d4ad574f3d5e7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,13 @@ license: mit ## Font Image Generation ```bash -python -m kana.write.image generate-images --font-path /path/to/font.ttf +python image.py generate ``` -- [Model Source](https://storage.openvinotoolkit.org/repositories/open_model_zoo/2023.0/models_bin/1/handwritten-japanese-recognition-0001/FP16-INT8) +## Font Source + +- [Google Font - Kiwi Maru](https://fonts.google.com/specimen/Kiwi+Maru) + +## Model Source + +- [OpenVINO Open Model Zoo - Handwritten Japanese Recognition FP16-INT8](https://storage.openvinotoolkit.org/repositories/open_model_zoo/2023.0/models_bin/1/handwritten-japanese-recognition-0001/FP16-INT8) diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..ffde78abbad4f8e389a75633b5f7db8ab71f639d --- /dev/null +++ b/app.py @@ -0,0 +1,199 @@ +import random +from copy import deepcopy +from pathlib import Path + +import gradio as gr +import numpy as np + +from utils import KanaData, Recognizer + + +class App: + def __init__( + self, + kana_data_path="data/kana-data.json", + kana_char_dir="data/images/kana-chars", + bg_image_path="data/images/bg.png", + model_xml_path="model/model.xml", + model_char_path="model/chars.txt", + default_kana="あ", + font_name="Kiwi Maru", + brush_color="#111", + brush_size=15, + ): + self.brush_color = brush_color + self.brush_size = brush_size + self.bg_image_path = bg_image_path + self.recognizer = Recognizer(model_xml_path, model_char_path) + + self.kana_data = KanaData.load(kana_data_path) + self.kana_set = {kana for kana in self.kana_data.spell if len(kana) == 1} + + self.kana_char_dir = Path(kana_char_dir) + self.kana_images = [str(p) for p in self.kana_char_dir.rglob("*")] + + self.font_name = font_name + + self.default_kana = default_kana + self.default_kana_image = str(self.kana_char_dir / f"{self.default_kana}.png") + roma = self.conv_kana_to_roma(self.default_kana) + self.default_roma = f"{self.default_kana} ({roma})" + + self.init_app() + + def init_app(self): + with self.init_blocks() as self.app: + self.init_states() + self.init_layout() + self.init_events() + self.init_storage() + + def init_blocks(self): + return gr.Blocks(title="假名手寫練習") + + def init_layout(self): + with gr.Sidebar("練習設定"): + self.init_setting_tab() + with gr.Tab("寫字練習"): + self.init_practice_tab() + + def init_states(self): + self.curr_kana = gr.State(self.default_kana) + self.curr_kana_list = gr.State(list()) + self.curr_kana_image = gr.State(self.default_kana_image) + + def init_practice_tab(self): + self.sketchpad = gr.Sketchpad( + self.default_kana_image, + type="numpy", + image_mode="RGB", + brush=gr.Brush(self.brush_size, self.brush_color), + eraser=False, + layers=False, + label="寫字板", + ) + + with gr.Row(): + self.target_txt = gr.Textbox(self.default_roma, label="練習目標") + self.result_txt = gr.Textbox(label="辨識結果") + + with gr.Row(): + self.next_btn = gr.Button("下一個字") + self.recog_btn = gr.Button("手寫辨識") + + def init_setting_tab(self): + with gr.Row(): + self.use_assist_chk = gr.Checkbox(True, label="顯示輔助字") + self.use_kana_hint_chk = gr.Checkbox(True, label="提示假名") + + def init_events(self): + recog_kwargs = gr_kwargs(self.do_recog, self.sketchpad, self.result_txt) + + next_inputs = [self.use_assist_chk, self.use_kana_hint_chk, self.curr_kana_list] + next_outputs = [self.curr_kana, self.sketchpad, self.curr_kana_image] + next_outputs += [self.target_txt, self.result_txt, self.curr_kana_list] + next_kwargs = gr_kwargs(self.get_rand_kana, next_inputs, next_outputs) + + clear_kwargs = gr_kwargs(self.clear, self.curr_kana_image, self.sketchpad) + + update_inputs = [self.curr_kana, self.use_assist_chk] + update_inputs += [self.use_kana_hint_chk, self.curr_kana_list] + update_outputs = [self.curr_kana, self.sketchpad, self.curr_kana_image] + update_outputs += [self.target_txt, self.curr_kana_list] + update_kwargs = gr_kwargs(self.update, update_inputs, update_outputs) + + self.recog_btn.click(**recog_kwargs) + self.next_btn.click(**next_kwargs) + self.sketchpad.clear(**clear_kwargs) + self.use_assist_chk.change(**update_kwargs) + self.use_kana_hint_chk.change(**update_kwargs) + + def init_storage(self): + components = [self.use_assist_chk, self.use_kana_hint_chk] + triggers = [component.change for component in components] + + default_value = [component.value for component in components] + browser_state = gr.BrowserState( + default_value, + storage_key="storage-key", + secret="secret", + ) + + self.app.load(inputs=browser_state, outputs=components)(lambda data: data) + gr.on(triggers, inputs=components, outputs=browser_state)(lambda *data: data) + + def launch_app(self): + font = gr.themes.GoogleFont(self.font_name) + text_size = gr.themes.sizes.text_lg + theme = gr.themes.Ocean(font=font, text_size=text_size) + self.app.launch(theme=theme) + + def conv_kana_to_roma(self, kana): + return self.kana_data.spell[kana][0] + + def init_kana_list(self): + curr_kana_list = deepcopy(self.kana_images) + random.shuffle(curr_kana_list) + return curr_kana_list + + def get_kana(self, kana: str, use_assist: bool, use_kana_hint: bool, kana_list: list): + kana_list = kana_list if kana_list else self.init_kana_list() + kana_image = self.kana_char_dir / f"{kana}.png" if kana else kana_list.pop() + kana = Path(kana_image).stem + + kana_image = kana_image if use_assist else self.bg_image_path + + roma = self.conv_kana_to_roma(kana) + roma = f"{kana} ({roma})" if use_kana_hint else f"{roma}" + + return kana, str(kana_image), roma, kana_list + + def parse_item(self, item): + prob = item["prob"] + char = item["char"] + return f"{char} ({self.conv_kana_to_roma(char)}): {prob:.2%}" + + def is_valid_item(self, item): + if item["prob"] < 1e-2: + return False + if item["char"] not in self.kana_set: + return False + return True + + def do_recog(self, image: dict[str, np.ndarray]): + image = image["layers"][0] + image[image == 0] = 255 + image[image != 255] = 0 + _, nbest = self.recognizer(image) + return ", ".join( + self.parse_item(item) + for items in nbest + for item in items + if self.is_valid_item(item) + ) + + def get_rand_kana(self, assist, kana, chars): + char, img, roma, chars = self.get_kana(None, assist, kana, chars) + return char, img, img, roma, None, chars + + def clear(self, curr_kana_image): + return curr_kana_image + + def update(self, kana, use_assist, use_hint, kana_list): + kana_info = self.get_kana(kana, use_assist, use_hint, kana_list) + kana, image, roma, kana_list = kana_info + return kana, image, image, roma, kana_list + + +def gr_kwargs(fn, inputs=None, outputs=None, show_progress="hidden", **kwargs): + return dict( + fn=fn, + inputs=inputs, + outputs=outputs, + show_progress=show_progress, + **kwargs, + ) + + +if __name__ == "__main__": + App().launch_app() diff --git a/data/KiwiMaru-Regular.ttf b/data/KiwiMaru-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3be109f1e5f4f1d6ec2b029a484c0e604ca8c652 --- /dev/null +++ b/data/KiwiMaru-Regular.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7f221e14182abb1d624ffd4c91bfb63cadee13c29d7d03d2e430897d3779111 +size 5037676 diff --git a/data/images/bg.png b/data/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a31d147bbe39714ca5459055f5ab596300b7ec8a Binary files /dev/null and b/data/images/bg.png differ diff --git "a/data/images/kana-chars/\343\201\202.png" "b/data/images/kana-chars/\343\201\202.png" new file mode 100644 index 0000000000000000000000000000000000000000..9948f19c581b17f4f040cd1ee163b246bbd113c5 Binary files /dev/null and "b/data/images/kana-chars/\343\201\202.png" differ diff --git "a/data/images/kana-chars/\343\201\204.png" "b/data/images/kana-chars/\343\201\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..1f0afae529773372913e19ebd3d68caec9f38c33 Binary files /dev/null and "b/data/images/kana-chars/\343\201\204.png" differ diff --git "a/data/images/kana-chars/\343\201\206.png" "b/data/images/kana-chars/\343\201\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..d27c20ad8519d52d7991cef948ab57c04b6aa773 Binary files /dev/null and "b/data/images/kana-chars/\343\201\206.png" differ diff --git "a/data/images/kana-chars/\343\201\210.png" "b/data/images/kana-chars/\343\201\210.png" new file mode 100644 index 0000000000000000000000000000000000000000..dfd994d2ea50ee6ef1bb5e8661991b6f085c9fb1 Binary files /dev/null and "b/data/images/kana-chars/\343\201\210.png" differ diff --git "a/data/images/kana-chars/\343\201\212.png" "b/data/images/kana-chars/\343\201\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..8a6bf523fff722ffc22175972577a692913e949d Binary files /dev/null and "b/data/images/kana-chars/\343\201\212.png" differ diff --git "a/data/images/kana-chars/\343\201\213.png" "b/data/images/kana-chars/\343\201\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..4293245e6ac0d466d2a20cb928e658bd9fe729d2 Binary files /dev/null and "b/data/images/kana-chars/\343\201\213.png" differ diff --git "a/data/images/kana-chars/\343\201\214.png" "b/data/images/kana-chars/\343\201\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..38dc06f87478d487875ad9157c4225f645e80ab8 Binary files /dev/null and "b/data/images/kana-chars/\343\201\214.png" differ diff --git "a/data/images/kana-chars/\343\201\215.png" "b/data/images/kana-chars/\343\201\215.png" new file mode 100644 index 0000000000000000000000000000000000000000..90e52939cc770b8b3b044aa88aca7b749621b88f Binary files /dev/null and "b/data/images/kana-chars/\343\201\215.png" differ diff --git "a/data/images/kana-chars/\343\201\216.png" "b/data/images/kana-chars/\343\201\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..ec716171b6c443f613bd9320a59933a8fe196021 Binary files /dev/null and "b/data/images/kana-chars/\343\201\216.png" differ diff --git "a/data/images/kana-chars/\343\201\217.png" "b/data/images/kana-chars/\343\201\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..4936533a8b548f58677bd7be1be50c3c34420e5c Binary files /dev/null and "b/data/images/kana-chars/\343\201\217.png" differ diff --git "a/data/images/kana-chars/\343\201\220.png" "b/data/images/kana-chars/\343\201\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..d4a4c22c93afc4cee2741263f51b485128482203 Binary files /dev/null and "b/data/images/kana-chars/\343\201\220.png" differ diff --git "a/data/images/kana-chars/\343\201\221.png" "b/data/images/kana-chars/\343\201\221.png" new file mode 100644 index 0000000000000000000000000000000000000000..b431d949af3a7d3d599d19636996b164a48836a5 Binary files /dev/null and "b/data/images/kana-chars/\343\201\221.png" differ diff --git "a/data/images/kana-chars/\343\201\222.png" "b/data/images/kana-chars/\343\201\222.png" new file mode 100644 index 0000000000000000000000000000000000000000..22f405a598965c187b4caaccdb3dbc1c2d6bde20 Binary files /dev/null and "b/data/images/kana-chars/\343\201\222.png" differ diff --git "a/data/images/kana-chars/\343\201\223.png" "b/data/images/kana-chars/\343\201\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..179a752747d87afb07de771482cbbec0d6ae4c8d Binary files /dev/null and "b/data/images/kana-chars/\343\201\223.png" differ diff --git "a/data/images/kana-chars/\343\201\224.png" "b/data/images/kana-chars/\343\201\224.png" new file mode 100644 index 0000000000000000000000000000000000000000..20a6c6ad4aeef15010533ca732654dc78930a199 Binary files /dev/null and "b/data/images/kana-chars/\343\201\224.png" differ diff --git "a/data/images/kana-chars/\343\201\225.png" "b/data/images/kana-chars/\343\201\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..d89e72385d3a6ea3eb4ff281655085cc00f330e7 Binary files /dev/null and "b/data/images/kana-chars/\343\201\225.png" differ diff --git "a/data/images/kana-chars/\343\201\226.png" "b/data/images/kana-chars/\343\201\226.png" new file mode 100644 index 0000000000000000000000000000000000000000..84e94a4351b8c80431eeadae1c6f7922948921b1 Binary files /dev/null and "b/data/images/kana-chars/\343\201\226.png" differ diff --git "a/data/images/kana-chars/\343\201\227.png" "b/data/images/kana-chars/\343\201\227.png" new file mode 100644 index 0000000000000000000000000000000000000000..039c130a64cb07f1802c9af4483935799e68d34b Binary files /dev/null and "b/data/images/kana-chars/\343\201\227.png" differ diff --git "a/data/images/kana-chars/\343\201\230.png" "b/data/images/kana-chars/\343\201\230.png" new file mode 100644 index 0000000000000000000000000000000000000000..28c86ad240b7f2743d86797bed0923892a6e2399 Binary files /dev/null and "b/data/images/kana-chars/\343\201\230.png" differ diff --git "a/data/images/kana-chars/\343\201\231.png" "b/data/images/kana-chars/\343\201\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..a3ab60ac886e29beffd936da1bde7acddc93c1ab Binary files /dev/null and "b/data/images/kana-chars/\343\201\231.png" differ diff --git "a/data/images/kana-chars/\343\201\232.png" "b/data/images/kana-chars/\343\201\232.png" new file mode 100644 index 0000000000000000000000000000000000000000..b777516887964f91ed32d4dfa57283ed92e7834c Binary files /dev/null and "b/data/images/kana-chars/\343\201\232.png" differ diff --git "a/data/images/kana-chars/\343\201\233.png" "b/data/images/kana-chars/\343\201\233.png" new file mode 100644 index 0000000000000000000000000000000000000000..999815b3f038ee4ce7063fa7ffc5813fd638fff2 Binary files /dev/null and "b/data/images/kana-chars/\343\201\233.png" differ diff --git "a/data/images/kana-chars/\343\201\234.png" "b/data/images/kana-chars/\343\201\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..63d48afbd74ac71981b3fbe23e803a9e59762cc1 Binary files /dev/null and "b/data/images/kana-chars/\343\201\234.png" differ diff --git "a/data/images/kana-chars/\343\201\235.png" "b/data/images/kana-chars/\343\201\235.png" new file mode 100644 index 0000000000000000000000000000000000000000..903129319a7b8f1f674047176ce758f3654990d3 Binary files /dev/null and "b/data/images/kana-chars/\343\201\235.png" differ diff --git "a/data/images/kana-chars/\343\201\236.png" "b/data/images/kana-chars/\343\201\236.png" new file mode 100644 index 0000000000000000000000000000000000000000..a366a2c17bb852a0ae5ffb073bfb533108646efb Binary files /dev/null and "b/data/images/kana-chars/\343\201\236.png" differ diff --git "a/data/images/kana-chars/\343\201\237.png" "b/data/images/kana-chars/\343\201\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..5fc3b9dc9e9ec2adac6243ca6c8a241a1558513e Binary files /dev/null and "b/data/images/kana-chars/\343\201\237.png" differ diff --git "a/data/images/kana-chars/\343\201\240.png" "b/data/images/kana-chars/\343\201\240.png" new file mode 100644 index 0000000000000000000000000000000000000000..288a48e8d6224983512381bf330cda1285c2585c Binary files /dev/null and "b/data/images/kana-chars/\343\201\240.png" differ diff --git "a/data/images/kana-chars/\343\201\241.png" "b/data/images/kana-chars/\343\201\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..5cdf2a0ac9feacf46bc540ff9fbc1f7b24911a22 Binary files /dev/null and "b/data/images/kana-chars/\343\201\241.png" differ diff --git "a/data/images/kana-chars/\343\201\242.png" "b/data/images/kana-chars/\343\201\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..b918e8504be39c686760122c9438afc0a03d28a8 Binary files /dev/null and "b/data/images/kana-chars/\343\201\242.png" differ diff --git "a/data/images/kana-chars/\343\201\244.png" "b/data/images/kana-chars/\343\201\244.png" new file mode 100644 index 0000000000000000000000000000000000000000..0d1530de9e543fca7e37b0d973cb946ef5d321dd Binary files /dev/null and "b/data/images/kana-chars/\343\201\244.png" differ diff --git "a/data/images/kana-chars/\343\201\245.png" "b/data/images/kana-chars/\343\201\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d00dfca7a53bffff1265daff86ef6ab262f2d06 Binary files /dev/null and "b/data/images/kana-chars/\343\201\245.png" differ diff --git "a/data/images/kana-chars/\343\201\246.png" "b/data/images/kana-chars/\343\201\246.png" new file mode 100644 index 0000000000000000000000000000000000000000..29f7f0d17542720520617059eef51920eeb01b2b Binary files /dev/null and "b/data/images/kana-chars/\343\201\246.png" differ diff --git "a/data/images/kana-chars/\343\201\247.png" "b/data/images/kana-chars/\343\201\247.png" new file mode 100644 index 0000000000000000000000000000000000000000..84f210c7f13e39bcc31209100cca8c5ecbae2c30 Binary files /dev/null and "b/data/images/kana-chars/\343\201\247.png" differ diff --git "a/data/images/kana-chars/\343\201\250.png" "b/data/images/kana-chars/\343\201\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..69e9a4a7a39b8b8193c4a4120b43603c7abc5a10 Binary files /dev/null and "b/data/images/kana-chars/\343\201\250.png" differ diff --git "a/data/images/kana-chars/\343\201\251.png" "b/data/images/kana-chars/\343\201\251.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab3c6485c2d36baebfda66274c7ae8617374dfa7 Binary files /dev/null and "b/data/images/kana-chars/\343\201\251.png" differ diff --git "a/data/images/kana-chars/\343\201\252.png" "b/data/images/kana-chars/\343\201\252.png" new file mode 100644 index 0000000000000000000000000000000000000000..f010b528bd34657ce6decf9ea581691de1a5ab04 Binary files /dev/null and "b/data/images/kana-chars/\343\201\252.png" differ diff --git "a/data/images/kana-chars/\343\201\253.png" "b/data/images/kana-chars/\343\201\253.png" new file mode 100644 index 0000000000000000000000000000000000000000..52b6c23990d9255c3135592ce25a0957760933f0 Binary files /dev/null and "b/data/images/kana-chars/\343\201\253.png" differ diff --git "a/data/images/kana-chars/\343\201\254.png" "b/data/images/kana-chars/\343\201\254.png" new file mode 100644 index 0000000000000000000000000000000000000000..b30c0df1631fbf699dab6ef4d0d7fe0e426ce1d3 Binary files /dev/null and "b/data/images/kana-chars/\343\201\254.png" differ diff --git "a/data/images/kana-chars/\343\201\255.png" "b/data/images/kana-chars/\343\201\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..a84c099ca7209f12c89dd4d4f73d0986cb3b261b Binary files /dev/null and "b/data/images/kana-chars/\343\201\255.png" differ diff --git "a/data/images/kana-chars/\343\201\256.png" "b/data/images/kana-chars/\343\201\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..f56cb0b63f6ee100daaff22368f0ed7ec0a6eba7 Binary files /dev/null and "b/data/images/kana-chars/\343\201\256.png" differ diff --git "a/data/images/kana-chars/\343\201\257.png" "b/data/images/kana-chars/\343\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..996164f58a8fcbbd6a646c2870a0fa30e4d26664 Binary files /dev/null and "b/data/images/kana-chars/\343\201\257.png" differ diff --git "a/data/images/kana-chars/\343\201\260.png" "b/data/images/kana-chars/\343\201\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..2ec0d32849338a3d4a87ea0f00cb5fca5c6e4f7f Binary files /dev/null and "b/data/images/kana-chars/\343\201\260.png" differ diff --git "a/data/images/kana-chars/\343\201\261.png" "b/data/images/kana-chars/\343\201\261.png" new file mode 100644 index 0000000000000000000000000000000000000000..d4c9566343f7de428db9b5d5627d437f32cc98a6 Binary files /dev/null and "b/data/images/kana-chars/\343\201\261.png" differ diff --git "a/data/images/kana-chars/\343\201\262.png" "b/data/images/kana-chars/\343\201\262.png" new file mode 100644 index 0000000000000000000000000000000000000000..5498c90c2c619976ac5c7a014097eebce8aa1dfd Binary files /dev/null and "b/data/images/kana-chars/\343\201\262.png" differ diff --git "a/data/images/kana-chars/\343\201\263.png" "b/data/images/kana-chars/\343\201\263.png" new file mode 100644 index 0000000000000000000000000000000000000000..30c6a5cddf2a81bcb082e7c80edd185f770bb958 Binary files /dev/null and "b/data/images/kana-chars/\343\201\263.png" differ diff --git "a/data/images/kana-chars/\343\201\264.png" "b/data/images/kana-chars/\343\201\264.png" new file mode 100644 index 0000000000000000000000000000000000000000..b1cabc6b411137d1de424c7a35d43d4b85505abd Binary files /dev/null and "b/data/images/kana-chars/\343\201\264.png" differ diff --git "a/data/images/kana-chars/\343\201\265.png" "b/data/images/kana-chars/\343\201\265.png" new file mode 100644 index 0000000000000000000000000000000000000000..604018d23e70d2034ab07e923f34ba7bb0da9722 Binary files /dev/null and "b/data/images/kana-chars/\343\201\265.png" differ diff --git "a/data/images/kana-chars/\343\201\266.png" "b/data/images/kana-chars/\343\201\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..6bc7107e9bae82acb8a68d634293f512dddd043f Binary files /dev/null and "b/data/images/kana-chars/\343\201\266.png" differ diff --git "a/data/images/kana-chars/\343\201\267.png" "b/data/images/kana-chars/\343\201\267.png" new file mode 100644 index 0000000000000000000000000000000000000000..cd9c6c0143082055792b32e60b5bdbf79755ac19 Binary files /dev/null and "b/data/images/kana-chars/\343\201\267.png" differ diff --git "a/data/images/kana-chars/\343\201\270.png" "b/data/images/kana-chars/\343\201\270.png" new file mode 100644 index 0000000000000000000000000000000000000000..298deb3424d03216f150940c8fb9d06423a2c783 Binary files /dev/null and "b/data/images/kana-chars/\343\201\270.png" differ diff --git "a/data/images/kana-chars/\343\201\271.png" "b/data/images/kana-chars/\343\201\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..9c87853b6fb752a5785b8248adb627abd8902e0f Binary files /dev/null and "b/data/images/kana-chars/\343\201\271.png" differ diff --git "a/data/images/kana-chars/\343\201\272.png" "b/data/images/kana-chars/\343\201\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..01e0c4cabd1ed901f1a2398369de788ed5580346 Binary files /dev/null and "b/data/images/kana-chars/\343\201\272.png" differ diff --git "a/data/images/kana-chars/\343\201\273.png" "b/data/images/kana-chars/\343\201\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..2f23836e4a4d7f6835317d14e0c944f090f81aa5 Binary files /dev/null and "b/data/images/kana-chars/\343\201\273.png" differ diff --git "a/data/images/kana-chars/\343\201\274.png" "b/data/images/kana-chars/\343\201\274.png" new file mode 100644 index 0000000000000000000000000000000000000000..3b7bd1039c6415983c1f9a77f05ed63d8d06414e Binary files /dev/null and "b/data/images/kana-chars/\343\201\274.png" differ diff --git "a/data/images/kana-chars/\343\201\275.png" "b/data/images/kana-chars/\343\201\275.png" new file mode 100644 index 0000000000000000000000000000000000000000..42043bf25bfd38274d0531494dc8ca19e37cb366 Binary files /dev/null and "b/data/images/kana-chars/\343\201\275.png" differ diff --git "a/data/images/kana-chars/\343\201\276.png" "b/data/images/kana-chars/\343\201\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..7b689dafe19b1959b13f6c24ac19473c40b74c83 Binary files /dev/null and "b/data/images/kana-chars/\343\201\276.png" differ diff --git "a/data/images/kana-chars/\343\201\277.png" "b/data/images/kana-chars/\343\201\277.png" new file mode 100644 index 0000000000000000000000000000000000000000..7d09cd2e60af950d217fcceb14dac5d7f7bf7186 Binary files /dev/null and "b/data/images/kana-chars/\343\201\277.png" differ diff --git "a/data/images/kana-chars/\343\202\200.png" "b/data/images/kana-chars/\343\202\200.png" new file mode 100644 index 0000000000000000000000000000000000000000..ffd77ec6c7bb1dd8d2d4322d2bdaba404632810b Binary files /dev/null and "b/data/images/kana-chars/\343\202\200.png" differ diff --git "a/data/images/kana-chars/\343\202\201.png" "b/data/images/kana-chars/\343\202\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..d6be927c6854d2a205cb487b5f43124b0a7fff8c Binary files /dev/null and "b/data/images/kana-chars/\343\202\201.png" differ diff --git "a/data/images/kana-chars/\343\202\202.png" "b/data/images/kana-chars/\343\202\202.png" new file mode 100644 index 0000000000000000000000000000000000000000..e7bfd1a6f0cd7ba4deaf578fd7ecfc7613a17d49 Binary files /dev/null and "b/data/images/kana-chars/\343\202\202.png" differ diff --git "a/data/images/kana-chars/\343\202\204.png" "b/data/images/kana-chars/\343\202\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..cbac84e6f4b685182409dde574b143cbbf2be2e2 Binary files /dev/null and "b/data/images/kana-chars/\343\202\204.png" differ diff --git "a/data/images/kana-chars/\343\202\206.png" "b/data/images/kana-chars/\343\202\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..bd072c6cb17fc12510b237a3ab277c9a4abdfaaa Binary files /dev/null and "b/data/images/kana-chars/\343\202\206.png" differ diff --git "a/data/images/kana-chars/\343\202\210.png" "b/data/images/kana-chars/\343\202\210.png" new file mode 100644 index 0000000000000000000000000000000000000000..6228b407a2bcb47db7a2ae81c1dd497274d77daf Binary files /dev/null and "b/data/images/kana-chars/\343\202\210.png" differ diff --git "a/data/images/kana-chars/\343\202\211.png" "b/data/images/kana-chars/\343\202\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..f8550b65b8c7761544063a4a4b46a1906042f207 Binary files /dev/null and "b/data/images/kana-chars/\343\202\211.png" differ diff --git "a/data/images/kana-chars/\343\202\212.png" "b/data/images/kana-chars/\343\202\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..4d7c18d743ebaef1da8acf28c7722b7fb3d7274e Binary files /dev/null and "b/data/images/kana-chars/\343\202\212.png" differ diff --git "a/data/images/kana-chars/\343\202\213.png" "b/data/images/kana-chars/\343\202\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..cd51d66c1d810cacfef6cfcacc2a2e30f95a1735 Binary files /dev/null and "b/data/images/kana-chars/\343\202\213.png" differ diff --git "a/data/images/kana-chars/\343\202\214.png" "b/data/images/kana-chars/\343\202\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..9d28857bc4859be794c3c96008c636b87f965620 Binary files /dev/null and "b/data/images/kana-chars/\343\202\214.png" differ diff --git "a/data/images/kana-chars/\343\202\215.png" "b/data/images/kana-chars/\343\202\215.png" new file mode 100644 index 0000000000000000000000000000000000000000..f041fd132db16d8cf54513fcad9b1cff4cdb0cee Binary files /dev/null and "b/data/images/kana-chars/\343\202\215.png" differ diff --git "a/data/images/kana-chars/\343\202\217.png" "b/data/images/kana-chars/\343\202\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..20091113e902d118456a86f03326bc59bd98333c Binary files /dev/null and "b/data/images/kana-chars/\343\202\217.png" differ diff --git "a/data/images/kana-chars/\343\202\222.png" "b/data/images/kana-chars/\343\202\222.png" new file mode 100644 index 0000000000000000000000000000000000000000..ef60cb0317563fe08d9cd393894d7668af6cf114 Binary files /dev/null and "b/data/images/kana-chars/\343\202\222.png" differ diff --git "a/data/images/kana-chars/\343\202\223.png" "b/data/images/kana-chars/\343\202\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..3ca2902d434d5e3cd92f6d21ecc6e2e3fa4e8946 Binary files /dev/null and "b/data/images/kana-chars/\343\202\223.png" differ diff --git "a/data/images/kana-chars/\343\202\242.png" "b/data/images/kana-chars/\343\202\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..f7c54ce90b5c2ef1ddd80c96545c4efc5cdbfddb Binary files /dev/null and "b/data/images/kana-chars/\343\202\242.png" differ diff --git "a/data/images/kana-chars/\343\202\244.png" "b/data/images/kana-chars/\343\202\244.png" new file mode 100644 index 0000000000000000000000000000000000000000..1b04c58f8f07bb9e5a7520c6096c00496ffb5dde Binary files /dev/null and "b/data/images/kana-chars/\343\202\244.png" differ diff --git "a/data/images/kana-chars/\343\202\246.png" "b/data/images/kana-chars/\343\202\246.png" new file mode 100644 index 0000000000000000000000000000000000000000..cf1efe7f60fb3daa0479825abf88f04d02f005ef Binary files /dev/null and "b/data/images/kana-chars/\343\202\246.png" differ diff --git "a/data/images/kana-chars/\343\202\250.png" "b/data/images/kana-chars/\343\202\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..7658ee9658acd237623a8ca1c30f86db9d6c7d9e Binary files /dev/null and "b/data/images/kana-chars/\343\202\250.png" differ diff --git "a/data/images/kana-chars/\343\202\252.png" "b/data/images/kana-chars/\343\202\252.png" new file mode 100644 index 0000000000000000000000000000000000000000..60096683a59b4793c49f4e726d63e5db2f01ebe2 Binary files /dev/null and "b/data/images/kana-chars/\343\202\252.png" differ diff --git "a/data/images/kana-chars/\343\202\253.png" "b/data/images/kana-chars/\343\202\253.png" new file mode 100644 index 0000000000000000000000000000000000000000..71c0e2138c26051034c7c57964e8221e523b1266 Binary files /dev/null and "b/data/images/kana-chars/\343\202\253.png" differ diff --git "a/data/images/kana-chars/\343\202\254.png" "b/data/images/kana-chars/\343\202\254.png" new file mode 100644 index 0000000000000000000000000000000000000000..4d24730aaf382d09138cef3974ccaa818cbd7926 Binary files /dev/null and "b/data/images/kana-chars/\343\202\254.png" differ diff --git "a/data/images/kana-chars/\343\202\255.png" "b/data/images/kana-chars/\343\202\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..2ca5f9ac0b9dd97c30bc134d3260843d3367e390 Binary files /dev/null and "b/data/images/kana-chars/\343\202\255.png" differ diff --git "a/data/images/kana-chars/\343\202\256.png" "b/data/images/kana-chars/\343\202\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..4137d6c61fd39b5d1b97c14da8221335a2929557 Binary files /dev/null and "b/data/images/kana-chars/\343\202\256.png" differ diff --git "a/data/images/kana-chars/\343\202\257.png" "b/data/images/kana-chars/\343\202\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..f29adfc4ba0b6fe4a462b62f10e9c79ae3a09d02 Binary files /dev/null and "b/data/images/kana-chars/\343\202\257.png" differ diff --git "a/data/images/kana-chars/\343\202\260.png" "b/data/images/kana-chars/\343\202\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..cd35d9c0116d136684a4566bca25be287007482d Binary files /dev/null and "b/data/images/kana-chars/\343\202\260.png" differ diff --git "a/data/images/kana-chars/\343\202\261.png" "b/data/images/kana-chars/\343\202\261.png" new file mode 100644 index 0000000000000000000000000000000000000000..b781c0fdffb45c4e7cb0d5990f21c15fff2dd347 Binary files /dev/null and "b/data/images/kana-chars/\343\202\261.png" differ diff --git "a/data/images/kana-chars/\343\202\262.png" "b/data/images/kana-chars/\343\202\262.png" new file mode 100644 index 0000000000000000000000000000000000000000..5587b07b5c4ef54dd3ac5d823e68f37399279e94 Binary files /dev/null and "b/data/images/kana-chars/\343\202\262.png" differ diff --git "a/data/images/kana-chars/\343\202\263.png" "b/data/images/kana-chars/\343\202\263.png" new file mode 100644 index 0000000000000000000000000000000000000000..a33cb7eb1a25ad3f0d5364d8a548c836202a8a03 Binary files /dev/null and "b/data/images/kana-chars/\343\202\263.png" differ diff --git "a/data/images/kana-chars/\343\202\264.png" "b/data/images/kana-chars/\343\202\264.png" new file mode 100644 index 0000000000000000000000000000000000000000..d35a9e2e476e77700c9a6843437fc3e15ce18762 Binary files /dev/null and "b/data/images/kana-chars/\343\202\264.png" differ diff --git "a/data/images/kana-chars/\343\202\265.png" "b/data/images/kana-chars/\343\202\265.png" new file mode 100644 index 0000000000000000000000000000000000000000..d128f2f87138ef19f12930fcf8e72f552e22dcfa Binary files /dev/null and "b/data/images/kana-chars/\343\202\265.png" differ diff --git "a/data/images/kana-chars/\343\202\266.png" "b/data/images/kana-chars/\343\202\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..558c567b3aa55ef024250a1035316c2ddd28b044 Binary files /dev/null and "b/data/images/kana-chars/\343\202\266.png" differ diff --git "a/data/images/kana-chars/\343\202\267.png" "b/data/images/kana-chars/\343\202\267.png" new file mode 100644 index 0000000000000000000000000000000000000000..1848072e75a7712d61fbd9a44bf3f1973b1f759b Binary files /dev/null and "b/data/images/kana-chars/\343\202\267.png" differ diff --git "a/data/images/kana-chars/\343\202\270.png" "b/data/images/kana-chars/\343\202\270.png" new file mode 100644 index 0000000000000000000000000000000000000000..737ebbbc51277d41a718ffbab52df13177d6fdd2 Binary files /dev/null and "b/data/images/kana-chars/\343\202\270.png" differ diff --git "a/data/images/kana-chars/\343\202\271.png" "b/data/images/kana-chars/\343\202\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..f417f548ec33cf78070d0bd6b30a2f71fefb108f Binary files /dev/null and "b/data/images/kana-chars/\343\202\271.png" differ diff --git "a/data/images/kana-chars/\343\202\272.png" "b/data/images/kana-chars/\343\202\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..0d119521f49ebba8577c9892065616ced75d79cc Binary files /dev/null and "b/data/images/kana-chars/\343\202\272.png" differ diff --git "a/data/images/kana-chars/\343\202\273.png" "b/data/images/kana-chars/\343\202\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab6814111344f99c756476f5eebda775ca31760f Binary files /dev/null and "b/data/images/kana-chars/\343\202\273.png" differ diff --git "a/data/images/kana-chars/\343\202\274.png" "b/data/images/kana-chars/\343\202\274.png" new file mode 100644 index 0000000000000000000000000000000000000000..a9b60193626b08b75b6835c6c69ae954bc2522aa Binary files /dev/null and "b/data/images/kana-chars/\343\202\274.png" differ diff --git "a/data/images/kana-chars/\343\202\275.png" "b/data/images/kana-chars/\343\202\275.png" new file mode 100644 index 0000000000000000000000000000000000000000..857ae40732f5de6e713872f2f1a4a60f09f37a34 Binary files /dev/null and "b/data/images/kana-chars/\343\202\275.png" differ diff --git "a/data/images/kana-chars/\343\202\276.png" "b/data/images/kana-chars/\343\202\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..1647982a9be0e95acbfad421ca1fcc4d4acb4a49 Binary files /dev/null and "b/data/images/kana-chars/\343\202\276.png" differ diff --git "a/data/images/kana-chars/\343\202\277.png" "b/data/images/kana-chars/\343\202\277.png" new file mode 100644 index 0000000000000000000000000000000000000000..05081a82b502752a0e45e687678fdb787a719434 Binary files /dev/null and "b/data/images/kana-chars/\343\202\277.png" differ diff --git "a/data/images/kana-chars/\343\203\200.png" "b/data/images/kana-chars/\343\203\200.png" new file mode 100644 index 0000000000000000000000000000000000000000..eabcca0d083e571a210e1f9e6f9f717fab6774a4 Binary files /dev/null and "b/data/images/kana-chars/\343\203\200.png" differ diff --git "a/data/images/kana-chars/\343\203\201.png" "b/data/images/kana-chars/\343\203\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..91a8089ace5ace1a066a8c596d3ed58d205f4851 Binary files /dev/null and "b/data/images/kana-chars/\343\203\201.png" differ diff --git "a/data/images/kana-chars/\343\203\202.png" "b/data/images/kana-chars/\343\203\202.png" new file mode 100644 index 0000000000000000000000000000000000000000..c849d89c5fda5fc5e1d7b2c8f501b3901e67cf8a Binary files /dev/null and "b/data/images/kana-chars/\343\203\202.png" differ diff --git "a/data/images/kana-chars/\343\203\204.png" "b/data/images/kana-chars/\343\203\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..252e8da9074fa4a0e31069790944db1063fbba74 Binary files /dev/null and "b/data/images/kana-chars/\343\203\204.png" differ diff --git "a/data/images/kana-chars/\343\203\205.png" "b/data/images/kana-chars/\343\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..5792571477fe3b5fdb7fdd0bdaec12444cfa2bc4 Binary files /dev/null and "b/data/images/kana-chars/\343\203\205.png" differ diff --git "a/data/images/kana-chars/\343\203\206.png" "b/data/images/kana-chars/\343\203\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..d2e44c47315af68bce0ed02aaa2d051710a9b3d9 Binary files /dev/null and "b/data/images/kana-chars/\343\203\206.png" differ diff --git "a/data/images/kana-chars/\343\203\207.png" "b/data/images/kana-chars/\343\203\207.png" new file mode 100644 index 0000000000000000000000000000000000000000..cc157a8e487fab2709251457d169c226008b642c Binary files /dev/null and "b/data/images/kana-chars/\343\203\207.png" differ diff --git "a/data/images/kana-chars/\343\203\210.png" "b/data/images/kana-chars/\343\203\210.png" new file mode 100644 index 0000000000000000000000000000000000000000..084cebb51f465f6adbda84861da560241ff27807 Binary files /dev/null and "b/data/images/kana-chars/\343\203\210.png" differ diff --git "a/data/images/kana-chars/\343\203\211.png" "b/data/images/kana-chars/\343\203\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..4adb960be4c0b74215e5c73f3287710539c56848 Binary files /dev/null and "b/data/images/kana-chars/\343\203\211.png" differ diff --git "a/data/images/kana-chars/\343\203\212.png" "b/data/images/kana-chars/\343\203\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..a2574884af6765555981475e579dbc055034a6e8 Binary files /dev/null and "b/data/images/kana-chars/\343\203\212.png" differ diff --git "a/data/images/kana-chars/\343\203\213.png" "b/data/images/kana-chars/\343\203\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..a0fdfc0e2950de3d4593351b42d4fea13f7bb740 Binary files /dev/null and "b/data/images/kana-chars/\343\203\213.png" differ diff --git "a/data/images/kana-chars/\343\203\214.png" "b/data/images/kana-chars/\343\203\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..3d04feba9cafdd675c892e3e7cb7c8dca8f34569 Binary files /dev/null and "b/data/images/kana-chars/\343\203\214.png" differ diff --git "a/data/images/kana-chars/\343\203\215.png" "b/data/images/kana-chars/\343\203\215.png" new file mode 100644 index 0000000000000000000000000000000000000000..484826d20e4ef5e9bbadbe2df18a65b732d439b5 Binary files /dev/null and "b/data/images/kana-chars/\343\203\215.png" differ diff --git "a/data/images/kana-chars/\343\203\216.png" "b/data/images/kana-chars/\343\203\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..90e297ddda42937c483b4e191c700362d630f155 Binary files /dev/null and "b/data/images/kana-chars/\343\203\216.png" differ diff --git "a/data/images/kana-chars/\343\203\217.png" "b/data/images/kana-chars/\343\203\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..5850a3e108bb8b4eecda039445fbb47c7c6bd8c3 Binary files /dev/null and "b/data/images/kana-chars/\343\203\217.png" differ diff --git "a/data/images/kana-chars/\343\203\220.png" "b/data/images/kana-chars/\343\203\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..ae57e409ca5d9bd1edfc4fe011e6187a4ee5cc30 Binary files /dev/null and "b/data/images/kana-chars/\343\203\220.png" differ diff --git "a/data/images/kana-chars/\343\203\221.png" "b/data/images/kana-chars/\343\203\221.png" new file mode 100644 index 0000000000000000000000000000000000000000..02bda98d26c30739e48d685f2ae0e5a84ca70680 Binary files /dev/null and "b/data/images/kana-chars/\343\203\221.png" differ diff --git "a/data/images/kana-chars/\343\203\222.png" "b/data/images/kana-chars/\343\203\222.png" new file mode 100644 index 0000000000000000000000000000000000000000..d9e46f6e0ddca91c1825d4825f6df01984ce0388 Binary files /dev/null and "b/data/images/kana-chars/\343\203\222.png" differ diff --git "a/data/images/kana-chars/\343\203\223.png" "b/data/images/kana-chars/\343\203\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..be8e83b402a0e084a0252af0c53d8600e31beb75 Binary files /dev/null and "b/data/images/kana-chars/\343\203\223.png" differ diff --git "a/data/images/kana-chars/\343\203\224.png" "b/data/images/kana-chars/\343\203\224.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c585846a3fe357f7f6dff5fb85263f4904c4963 Binary files /dev/null and "b/data/images/kana-chars/\343\203\224.png" differ diff --git "a/data/images/kana-chars/\343\203\225.png" "b/data/images/kana-chars/\343\203\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..4e51a237a02e39544a89f4d37f9bc23f4790e0a8 Binary files /dev/null and "b/data/images/kana-chars/\343\203\225.png" differ diff --git "a/data/images/kana-chars/\343\203\226.png" "b/data/images/kana-chars/\343\203\226.png" new file mode 100644 index 0000000000000000000000000000000000000000..47d6d9ada6b9cc882124d2358618edd07f70e5e7 Binary files /dev/null and "b/data/images/kana-chars/\343\203\226.png" differ diff --git "a/data/images/kana-chars/\343\203\227.png" "b/data/images/kana-chars/\343\203\227.png" new file mode 100644 index 0000000000000000000000000000000000000000..06f9db953fa778e3736f60b204f53e85b8933122 Binary files /dev/null and "b/data/images/kana-chars/\343\203\227.png" differ diff --git "a/data/images/kana-chars/\343\203\230.png" "b/data/images/kana-chars/\343\203\230.png" new file mode 100644 index 0000000000000000000000000000000000000000..05de5e9b77647ec698e8763794b05f81713cacdb Binary files /dev/null and "b/data/images/kana-chars/\343\203\230.png" differ diff --git "a/data/images/kana-chars/\343\203\231.png" "b/data/images/kana-chars/\343\203\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..ee273e2ee4cc93da04b413481b051a854c95f107 Binary files /dev/null and "b/data/images/kana-chars/\343\203\231.png" differ diff --git "a/data/images/kana-chars/\343\203\232.png" "b/data/images/kana-chars/\343\203\232.png" new file mode 100644 index 0000000000000000000000000000000000000000..df003e62da9e24622fcbf31dee562b65c7154618 Binary files /dev/null and "b/data/images/kana-chars/\343\203\232.png" differ diff --git "a/data/images/kana-chars/\343\203\233.png" "b/data/images/kana-chars/\343\203\233.png" new file mode 100644 index 0000000000000000000000000000000000000000..e0ff9862184b2b724fc46cd4599b94b51227403c Binary files /dev/null and "b/data/images/kana-chars/\343\203\233.png" differ diff --git "a/data/images/kana-chars/\343\203\234.png" "b/data/images/kana-chars/\343\203\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..3a59566690c6d8a01d293197104a637efdfe31ff Binary files /dev/null and "b/data/images/kana-chars/\343\203\234.png" differ diff --git "a/data/images/kana-chars/\343\203\235.png" "b/data/images/kana-chars/\343\203\235.png" new file mode 100644 index 0000000000000000000000000000000000000000..d1328be27061fbc146fe3f02336167c275c0392c Binary files /dev/null and "b/data/images/kana-chars/\343\203\235.png" differ diff --git "a/data/images/kana-chars/\343\203\236.png" "b/data/images/kana-chars/\343\203\236.png" new file mode 100644 index 0000000000000000000000000000000000000000..32b20a42cd46bd5b2f2d69c555750150b97e9e63 Binary files /dev/null and "b/data/images/kana-chars/\343\203\236.png" differ diff --git "a/data/images/kana-chars/\343\203\237.png" "b/data/images/kana-chars/\343\203\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..3d41ef2083a3dcd81dbf3131d582f6dae5a64056 Binary files /dev/null and "b/data/images/kana-chars/\343\203\237.png" differ diff --git "a/data/images/kana-chars/\343\203\240.png" "b/data/images/kana-chars/\343\203\240.png" new file mode 100644 index 0000000000000000000000000000000000000000..acf0e7f47e4b3543856e96cde3a3d70446787b3d Binary files /dev/null and "b/data/images/kana-chars/\343\203\240.png" differ diff --git "a/data/images/kana-chars/\343\203\241.png" "b/data/images/kana-chars/\343\203\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..6bea5d28bb1ab6fd03d2776ab801f8e1adf59a6a Binary files /dev/null and "b/data/images/kana-chars/\343\203\241.png" differ diff --git "a/data/images/kana-chars/\343\203\242.png" "b/data/images/kana-chars/\343\203\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..d89814f0f2a1c070df1bdf8728cab5256a8609e7 Binary files /dev/null and "b/data/images/kana-chars/\343\203\242.png" differ diff --git "a/data/images/kana-chars/\343\203\244.png" "b/data/images/kana-chars/\343\203\244.png" new file mode 100644 index 0000000000000000000000000000000000000000..851f555d6fb8adc81f614c1a30b9b2b7dfdbabea Binary files /dev/null and "b/data/images/kana-chars/\343\203\244.png" differ diff --git "a/data/images/kana-chars/\343\203\246.png" "b/data/images/kana-chars/\343\203\246.png" new file mode 100644 index 0000000000000000000000000000000000000000..a48234c245da653eb43d7291740c1c6777fb756d Binary files /dev/null and "b/data/images/kana-chars/\343\203\246.png" differ diff --git "a/data/images/kana-chars/\343\203\250.png" "b/data/images/kana-chars/\343\203\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..ea36e454a7a0f144e45a54542bfdbf281f57be65 Binary files /dev/null and "b/data/images/kana-chars/\343\203\250.png" differ diff --git "a/data/images/kana-chars/\343\203\251.png" "b/data/images/kana-chars/\343\203\251.png" new file mode 100644 index 0000000000000000000000000000000000000000..72affa40080936221a35b8f49ba945c0060f6807 Binary files /dev/null and "b/data/images/kana-chars/\343\203\251.png" differ diff --git "a/data/images/kana-chars/\343\203\252.png" "b/data/images/kana-chars/\343\203\252.png" new file mode 100644 index 0000000000000000000000000000000000000000..fb4e8091192d322f0ce69127383717e910117857 Binary files /dev/null and "b/data/images/kana-chars/\343\203\252.png" differ diff --git "a/data/images/kana-chars/\343\203\253.png" "b/data/images/kana-chars/\343\203\253.png" new file mode 100644 index 0000000000000000000000000000000000000000..d33701523c5a89e3f3f02acac51177e03ba0ef0c Binary files /dev/null and "b/data/images/kana-chars/\343\203\253.png" differ diff --git "a/data/images/kana-chars/\343\203\254.png" "b/data/images/kana-chars/\343\203\254.png" new file mode 100644 index 0000000000000000000000000000000000000000..dfa406bbaffe66d3ee90e5acd2c15d40e3402a26 Binary files /dev/null and "b/data/images/kana-chars/\343\203\254.png" differ diff --git "a/data/images/kana-chars/\343\203\255.png" "b/data/images/kana-chars/\343\203\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..6eb7bc089381327d456ddf8797e88da3e4d9f0c2 Binary files /dev/null and "b/data/images/kana-chars/\343\203\255.png" differ diff --git "a/data/images/kana-chars/\343\203\257.png" "b/data/images/kana-chars/\343\203\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..255b6669b9304a48c84be2e7f5f04a85d195714c Binary files /dev/null and "b/data/images/kana-chars/\343\203\257.png" differ diff --git "a/data/images/kana-chars/\343\203\262.png" "b/data/images/kana-chars/\343\203\262.png" new file mode 100644 index 0000000000000000000000000000000000000000..ba8ff0ad6fb4c3a75edf2ca1d6091945864d996c Binary files /dev/null and "b/data/images/kana-chars/\343\203\262.png" differ diff --git "a/data/images/kana-chars/\343\203\263.png" "b/data/images/kana-chars/\343\203\263.png" new file mode 100644 index 0000000000000000000000000000000000000000..8519407c5ea1fcfc34bea1a8b53cff7e068bb811 Binary files /dev/null and "b/data/images/kana-chars/\343\203\263.png" differ diff --git a/data/kana-data.json b/data/kana-data.json new file mode 100644 index 0000000000000000000000000000000000000000..0015061ba31334efa8723ae5d589a242596f4ebb --- /dev/null +++ b/data/kana-data.json @@ -0,0 +1,334 @@ +{ + "category": { + "seion": ["a", "ka", "sa", "ta", "na", "ha", "ma", "ya", "ra", "wa", "n"], + "dakuon": ["ga", "za", "da", "ba"], + "handakuon": ["pa"], + "youon": [ + "kya", + "sha", + "cha", + "hya", + "gya", + "ja", + "dya", + "nya", + "bya", + "pya" + ] + }, + "hiragana": { + "a": ["あ", "い", "う", "え", "お"], + "ka": ["か", "き", "く", "け", "こ"], + "sa": ["さ", "し", "す", "せ", "そ"], + "ta": ["た", "ち", "つ", "て", "と"], + "na": ["な", "に", "ぬ", "ね", "の"], + + "ha": ["は", "ひ", "ふ", "へ", "ほ"], + "ma": ["ま", "み", "む", "め", "も"], + "ya": ["や", "ゆ", "よ"], + "ra": ["ら", "り", "る", "れ", "ろ"], + "wa": ["わ", "を"], + "n": ["ん"], + + "ga": ["が", "ぎ", "ぐ", "げ", "ご"], + "za": ["ざ", "じ", "ず", "ぜ", "ぞ"], + "da": ["だ", "ぢ", "づ", "で", "ど"], + "ba": ["ば", "び", "ぶ", "べ", "ぼ"], + "pa": ["ぱ", "ぴ", "ぷ", "ぺ", "ぽ"], + + "kya": ["きゃ", "きゅ", "きょ"], + "sha": ["しゃ", "しゅ", "しょ"], + "cha": ["ちゃ", "ちゅ", "ちょ"], + "hya": ["ひゃ", "ひゅ", "ひょ"], + "gya": ["ぎゃ", "ぎゅ", "ぎょ"], + "ja": ["じゃ", "じゅ", "じょ"], + "dya": ["ぢゃ", "ぢゅ", "ぢょ"], + "nya": ["にゃ", "にゅ", "にょ"], + "bya": ["びゃ", "びゅ", "びょ"], + "pya": ["ぴゃ", "ぴゅ", "ぴょ"] + }, + "katakana": { + "a": ["ア", "イ", "ウ", "エ", "オ"], + "ka": ["カ", "キ", "ク", "ケ", "コ"], + "sa": ["サ", "シ", "ス", "セ", "ソ"], + "ta": ["タ", "チ", "ツ", "テ", "ト"], + "na": ["ナ", "ニ", "ヌ", "ネ", "ノ"], + + "ha": ["ハ", "ヒ", "フ", "ヘ", "ホ"], + "ma": ["マ", "ミ", "ム", "メ", "モ"], + "ya": ["ヤ", "ユ", "ヨ"], + "ra": ["ラ", "リ", "ル", "レ", "ロ"], + "wa": ["ワ", "ヲ"], + "n": ["ン"], + + "ga": ["ガ", "ギ", "グ", "ゲ", "ゴ"], + "za": ["ザ", "ジ", "ズ", "ゼ", "ゾ"], + "da": ["ダ", "ヂ", "ヅ", "デ", "ド"], + "ba": ["バ", "ビ", "ブ", "ベ", "ボ"], + "pa": ["パ", "ピ", "プ", "ペ", "ポ"], + + "kya": ["キャ", "キュ", "キョ"], + "gya": ["ギャ", "ギュ", "ギョ"], + "sha": ["シャ", "シュ", "ショ"], + "ja": ["ジャ", "ジュ", "ジョ"], + "cha": ["チャ", "チュ", "チョ"], + "dya": ["ヂャ", "ヂュ", "ヂョ"], + "nya": ["ニャ", "ニュ", "ニョ"], + "hya": ["ヒャ", "ヒュ", "ヒョ"], + "bya": ["ビャ", "ビュ", "ビョ"], + "pya": ["ピャ", "ピュ", "ピョ"] + }, + "spell": { + "あ": ["a"], + "い": ["i"], + "う": ["u"], + "え": ["e"], + "お": ["o"], + + "か": ["ka"], + "き": ["ki"], + "く": ["ku"], + "け": ["ke"], + "こ": ["ko"], + + "が": ["ga"], + "ぎ": ["gi"], + "ぐ": ["gu"], + "げ": ["ge"], + "ご": ["go"], + + "さ": ["sa"], + "し": ["shi"], + "す": ["su"], + "せ": ["se"], + "そ": ["so"], + + "ざ": ["za"], + "じ": ["ji"], + "ず": ["zu"], + "ぜ": ["ze"], + "ぞ": ["zo"], + + "た": ["ta"], + "ち": ["chi"], + "つ": ["tsu"], + "て": ["te"], + "と": ["to"], + + "だ": ["da"], + "ぢ": ["di", "ji"], + "づ": ["du", "zu"], + "で": ["de"], + "ど": ["do"], + + "な": ["na"], + "に": ["ni"], + "ぬ": ["nu"], + "ね": ["ne"], + "の": ["no"], + + "は": ["ha"], + "ひ": ["hi"], + "ふ": ["fu"], + "へ": ["he"], + "ほ": ["ho"], + + "ば": ["ba"], + "び": ["bi"], + "ぶ": ["bu"], + "べ": ["be"], + "ぼ": ["bo"], + + "ぱ": ["pa"], + "ぴ": ["pi"], + "ぷ": ["pu"], + "ぺ": ["pe"], + "ぽ": ["po"], + + "ま": ["ma"], + "み": ["mi"], + "む": ["mu"], + "め": ["me"], + "も": ["mo"], + + "や": ["ya"], + "ゆ": ["yu"], + "よ": ["yo"], + + "ら": ["ra"], + "り": ["ri"], + "る": ["ru"], + "れ": ["re"], + "ろ": ["ro"], + + "わ": ["wa"], + "を": ["o", "wo"], + "ん": ["n"], + + "きゃ": ["kya"], + "きゅ": ["kyu"], + "きょ": ["kyo"], + + "ぎゃ": ["gya"], + "ぎゅ": ["gyu"], + "ぎょ": ["gyo"], + + "しゃ": ["sha", "sya"], + "しゅ": ["shu", "syu"], + "しょ": ["sho", "syo"], + + "じゃ": ["ja", "jya"], + "じゅ": ["ju", "jyu"], + "じょ": ["jo", "jyo"], + + "ちゃ": ["cha", "cya"], + "ちゅ": ["chu", "cyu"], + "ちょ": ["cho", "cyo"], + + "ぢゃ": ["dya", "ja"], + "ぢゅ": ["dyu", "ju"], + "ぢょ": ["dyo", "jo"], + + "にゃ": ["nya"], + "にゅ": ["nyu"], + "にょ": ["nyo"], + + "ひゃ": ["hya"], + "ひゅ": ["hyu"], + "ひょ": ["hyo"], + + "びゃ": ["bya"], + "びゅ": ["byu"], + "びょ": ["byo"], + + "ぴゃ": ["pya"], + "ぴゅ": ["pyu"], + "ぴょ": ["pyo"], + + "ア": ["a"], + "イ": ["i"], + "ウ": ["u"], + "エ": ["e"], + "オ": ["o"], + + "カ": ["ka"], + "キ": ["ki"], + "ク": ["ku"], + "ケ": ["ke"], + "コ": ["ko"], + + "ガ": ["ga"], + "ギ": ["gi"], + "グ": ["gu"], + "ゲ": ["ge"], + "ゴ": ["go"], + + "サ": ["sa"], + "シ": ["shi"], + "ス": ["su"], + "セ": ["se"], + "ソ": ["so"], + + "ザ": ["za"], + "ジ": ["ji"], + "ズ": ["zu"], + "ゼ": ["ze"], + "ゾ": ["zo"], + + "タ": ["ta"], + "チ": ["chi"], + "ツ": ["tsu"], + "テ": ["te"], + "ト": ["to"], + + "ダ": ["da"], + "ヂ": ["di", "ji"], + "ヅ": ["du", "zu"], + "デ": ["de"], + "ド": ["do"], + + "ナ": ["na"], + "ニ": ["ni"], + "ヌ": ["nu"], + "ネ": ["ne"], + "ノ": ["no"], + + "ハ": ["ha"], + "ヒ": ["hi"], + "フ": ["fu"], + "ヘ": ["he"], + "ホ": ["ho"], + + "バ": ["ba"], + "ビ": ["bi"], + "ブ": ["bu"], + "ベ": ["be"], + "ボ": ["bo"], + + "パ": ["pa"], + "ピ": ["pi"], + "プ": ["pu"], + "ペ": ["pe"], + "ポ": ["po"], + + "マ": ["ma"], + "ミ": ["mi"], + "ム": ["mu"], + "メ": ["me"], + "モ": ["mo"], + + "ヤ": ["ya"], + "ユ": ["yu"], + "ヨ": ["yo"], + + "ラ": ["ra"], + "リ": ["ri"], + "ル": ["ru"], + "レ": ["re"], + "ロ": ["ro"], + + "ワ": ["wa"], + "ヲ": ["o", "wo"], + "ン": ["n"], + + "キャ": ["kya"], + "キュ": ["kyu"], + "キョ": ["kyo"], + + "ギャ": ["gya"], + "ギュ": ["gyu"], + "ギョ": ["gyo"], + + "シャ": ["sha"], + "シュ": ["shu"], + "ショ": ["sho"], + + "ジャ": ["ja", "jya"], + "ジュ": ["ju", "jyu"], + "ジョ": ["jo", "jyo"], + + "チャ": ["cha", "cya"], + "チュ": ["chu", "cyu"], + "チョ": ["cho", "cyo"], + + "ヂャ": ["dya", "ja"], + "ヂュ": ["dyu", "ju"], + "ヂョ": ["dyo", "jo"], + + "ニャ": ["nya"], + "ニュ": ["nyu"], + "ニョ": ["nyo"], + + "ヒャ": ["hya"], + "ヒュ": ["hyu"], + "ヒョ": ["hyo"], + + "ビャ": ["bya"], + "ビュ": ["byu"], + "ビョ": ["byo"], + + "ピャ": ["pya"], + "ピュ": ["pyu"], + "ピョ": ["pyo"] + } +} diff --git a/image.py b/image.py new file mode 100644 index 0000000000000000000000000000000000000000..4fd3395a955de685885e1c0690e821fec5fe518e --- /dev/null +++ b/image.py @@ -0,0 +1,80 @@ +from pathlib import Path + +import fire +from PIL import Image, ImageDraw, ImageFont + +from utils import KanaData + + +class FontImageGenerator: + def __init__( + self, + font_path="data/KiwiMaru-Regular.ttf", + img_size=640, + padding=100, + y_offset=-200, + font_color="#AAA", + grid_width=15, + grid_color="#EEE", + grid_split=3, + grid_bg_color="white", + kana_data_path="data/kana-data.json", + output_dir="data/images", + bg_file_name="bg.png", + char_dir_name="kana-chars", + ): + self.font_path = font_path + self.output_dir = Path(output_dir) + self.img_size = img_size + self.y_offset = y_offset + self.font_color = font_color + self.grid_width = grid_width + self.grid_color = grid_color + self.grid_split = grid_split + self.grid_bg_color = grid_bg_color + + self.kana_data = KanaData.load(kana_data_path) + self.font = ImageFont.truetype(self.font_path, img_size - padding) + + self.bg_path = self.output_dir / bg_file_name + self.char_dir = self.output_dir / char_dir_name + self.char_dir.mkdir(parents=True, exist_ok=True) + + def generate(self): + image, _ = self.create_bg() + image.save(self.bg_path) + + for kana_char in self.kana_data.spell: + if len(kana_char) == 1: + self.create_font_image(kana_char) + + def create_font_image(self, char): + image, draw = self.create_bg() + bbox = draw.textbbox((0, 0), char, font=self.font) + + w = bbox[2] - bbox[0] + h = bbox[3] - bbox[1] + + x = (self.img_size - w) / 2 + y = (self.img_size - h) / 2 + self.y_offset + + draw.text((x, y), char, font=self.font, fill=self.font_color) + image.save(self.char_dir / f"{char}.png") + + def create_bg(self): + image = Image.new("RGB", (self.img_size, self.img_size), self.grid_bg_color) + draw = ImageDraw.Draw(image) + + cell_size = self.img_size // self.grid_split + for i in range(self.grid_split): + point = (i + 1) * cell_size + ver_line = [(point, 0), (point, self.img_size)] + hor_line = [(0, point), (self.img_size, point)] + draw.line(ver_line, fill=self.grid_color, width=self.grid_width) + draw.line(hor_line, fill=self.grid_color, width=self.grid_width) + + return image, draw + + +if __name__ == "__main__": + fire.Fire(FontImageGenerator) diff --git a/model/chars.txt b/model/chars.txt new file mode 100644 index 0000000000000000000000000000000000000000..63af82249efb85a1ba8b23bb80f5ce9e7cc9aec7 --- /dev/null +++ b/model/chars.txt @@ -0,0 +1,4441 @@ +耗 +雛 +」 +輝 +郎 +棗 +寺 +行 +〕 +康 +藩 +陀 +記 +忙 +鱈 +芽 +詈 +従 +攻 +債 +戯 +欅 +俗 +郡 +垣 +畑 +次 +潮 +駐 +g +晟 +寝 +砥 +熹 +壁 +齋 +ビ +溜 +蘊 +舵 +薊 +睦 +登 +屁 +堤 +咎 +潤 +栽 +草 +粘 +曰 +淌 +佳 +冤 +筌 +梱 +旺 +馴 +蓼 +鑽 +涌 +叉 +類 +挑 +羲 +設 +株 +摩 +跳 +科 +連 +覚 +伝 +逓 +枳 +桂 +迭 +鯏 +講 +繍 +蕃 +摯 +疇 +覽 +陽 +黙 +鞆 +革 +氷 +X +邊 +逸 +煎 +棒 +甑 +励 +鉋 +罷 +騫 +乢 +院 +抄 +漬 +服 +蔽 +惰 +琺 +麟 +p +思 +赴 +邦 +耿 +虫 +鍵 +資 +瘁 +鵺 +岾 +煙 +筒 +紆 +褐 +モ +、 +} +更 +凍 +宕 +苅 +壬 +痒 +錚 +躁 +外 +舶 +羞 +諮 +薙 +橫 +∨ +秦 +倹 +篠 +ο +粒 +た +亙 +非 +腸 +樗 +鐡 +経 +ユ +諺 +杢 +歪 +讚 +叡 +倚 +漱 +曳 +偽 +猯 +臥 +珀 +捐 +鏡 +皐 +既 +勇 +寥 +癈 +黎 +栗 +北 +吟 +震 +腰 +肆 +敗 +泳 +窪 +史 +攫 +妙 +叢 +レ +諜 +搜 +檮 +秬 +箙 +各 +親 +四 +督 +響 +硲 +楊 +起 +器 +承 +乎 +寛 +蘆 +鉾 +敢 +纏 +擱 +砕 +臘 +な +淋 +わ +憶 +間 +が +洗 +落 +蟷 +収 +z +魔 +輳 +彩 +采 +磑 +礪 +受 +聚 +⑥ +秀 +確 +険 +略 +葛 +粂 +啀 +拮 +玄 +幟 +き +垂 +≡ +瀝 +榧 +「 +絞 +鞅 +萌 +暖 +悶 +症 +几 +烙 +埜 +時 +働 +洋 +賭 +甸 +寵 +葡 +稀 +恩 +銀 +世 +剖 +簗 +蜑 +鵯 +彼 +禿 +還 +L +茎 +焦 +伽 +旋 +熏 +縊 +茱 +濕 +泰 +無 +帆 +樫 +ェ +掬 +蓬 +睫 +駝 +境 +竄 +桁 +熨 +客 +ぶ +。 +饋 +へ +廳 +競 +奬 +¥ +梶 +窕 +走 +核 +付 +総 +肺 +壜 +將 +汝 +顎 +々 +〈 +泉 +藏 +篆 +囲 +鮖 +贔 +筥 +序 +亮 +耶 +苞 +怙 +萢 +叩 +噂 +錨 +俯 +問 +臼 +瞥 +輿 +硬 +難 +縄 +⑨ +坦 +帝 +圓 +雑 +得 +町 += +竿 +潭 +釡 +鋪 +G +杵 +轉 +杠 +憮 +緑 +4 +膿 +慕 +姫 +俚 +便 +誑 +看 +俄 +炸 +辜 +石 +溯 +伺 +覇 +云 +陥 +篇 +窯 +效 +棧 +蔡 +銹 +政 +館 +ピ +味 +粍 +旭 +冒 +鯨 +埖 +卯 +壱 +氓 +カ +嬉 +B +_ +鷆 +踏 +懲 +紳 +盟 +蜂 +堵 +④ +鷄 +ヰ +胆 +抱 +抓 +< +痺 +退 +隅 +充 +湫 +謬 +電 +篤 +卸 +妖 +恣 +裟 +罫 +門 +喘 +ψ +聘 +は +浅 +舟 +礎 +衷 +甘 +倦 +椒 +比 +菜 +松 +獣 +溢 +鰻 +肋 +チ +避 +雉 +饉 +袱 +紡 +笙 +安 +鯵 +参 +猥 +目 +咳 +垢 +御 +眩 +拾 +化 +指 +淆 +伎 +湿 +{ +机 +浜 +陵 +崔 +噴 +) +殊 +聊 +趾 +礁 +± +泄 +趙 +辟 +刻 +湾 +ぬ +佃 +緬 +祭 +異 +龍 +插 +殲 +倶 +似 +簿 +桝 +ρ +悸 +殻 +停 +蔑 +洒 +飯 +蛯 +椹 +争 +綜 +螢 +欧 +k +あ +犠 +鹸 +融 +礫 +③ +慌 +故 +屑 +溝 +岱 +哩 +廉 +鵜 +蜘 +羨 +狡 +汰 +瀬 +1 +暑 +酬 +続 +禅 +釉 +罐 +騒 +毀 +敵 +騨 +正 +棲 +訝 +鶇 +軒 +碑 +諭 +ゴ +崚 +惧 +猴 +濤 +鯛 +瞞 +継 +拐 +痔 +作 +交 +荼 +剛 +怖 +轤 +牛 +丑 +忘 +斧 +紛 +併 +d +h +- +篁 +鎭 +匂 +ネ +加 +贈 +潴 +皓 +超 +桴 +爆 +嚴 +菫 +竜 +仮 +徴 +v +塙 +席 +背 +伸 +醇 +繩 +尉 +倣 +五 +壮 +緩 +槻 +邸 +樒 +鵲 +釛 +辛 +徊 +跿 +験 +直 +メ +平 +雪 +拉 +辷 +[ +冶 +風 +笥 +打 +虻 +朽 +珈 +爭 +臓 +綠 +冊 +柘 +靄 +居 +演 +λ +刺 +懇 +恒 +澹 +寳 +窮 +智 +椦 +負 +園 +薑 +漢 +拍 +樋 +夢 +雨 +莊 +痰 +π +椣 +漠 +莇 +種 +詰 +巧 +替 +悴 +ー +戔 +揖 +柧 +賂 +恤 +復 +宍 +愁 +謹 +色 +契 +× +眼 +芋 +柱 +構 +塑 +寂 +宜 +胎 +謀 +齊 +郞 +賊 +櫨 +阿 +斃 +臍 +匙 +吸 +肖 +結 +誕 +礒 +顰 +鳰 +崇 +決 +僅 +蝶 +典 +心 +節 +籤 +腑 +∴ +ス +壯 +悍 +沮 +矛 +‥ +据 +氣 +租 +鄭 +熔 +臾 +巳 +詩 +蓚 +役 +諧 +援 +縛 +揚 +犯 +夕 +貰 +苑 +呈 +炒 +κ +盆 +或 +ぷ +岬 +壕 +弐 +已 +睾 +糧 +愾 +胴 +琵 +候 +撤 +桜 +鼻 +涼 +諷 +叔 +央 +概 +歿 +皷 +戰 +硝 +蛍 +姥 +專 +内 +莨 +侠 +杭 +芹 +麓 +杙 +謂 +製 +嘘 +禪 +休 +涜 +ぱ +泪 +升 +襲 +二 +釦 +卷 +鮹 +烈 +↓ +僕 +額 +⑩ +盗 +彷 +玖 +汽 +先 +描 +耐 +柁 +》 +錯 +隠 +授 +A +斡 +噺 +樅 +妬 +鮠 +池 +E +峡 +沢 +拶 +蘇 +暘 +派 +荊 +ザ +什 +渚 +紀 +稚 +傭 +ヂ +輯 +疵 +浣 +怨 +跡 +被 +球 +槁 +躰 +盲 +束 +閘 +卿 +隈 +来 +其 +簡 +梯 +薮 +折 +苺 +栞 +貶 +董 +虐 +警 +準 +億 +沐 +ブ +染 +牒 +題 +鯉 +舗 +狂 +守 +袖 +格 +Ⅴ +蓋 +宋 +涛 +睛 +蹲 +崩 +勤 +了 +ヮ +焙 +介 +ゐ +惟 +弦 +稲 +桧 +鵡 +0 +臭 +弼 +瞠 +赦 +戊 +朱 +啜 +剃 +瑚 +圀 +示 +常 +穆 +訃 +筋 +頬 +鮴 +誓 +樣 +劍 +騰 +梨 +蠅 +廣 +逢 +橘 +月 +庁 +乍 +匡 +と +晋 +喉 +麺 +リ +存 +婪 +銚 +伊 +豊 +孑 +與 +衾 +穫 +捜 +定 +編 +鵠 +痘 +崗 +網 +声 +靴 +ヱ +仄 +醐 +催 +泓 +衙 +蜷 +誂 +憐 +追 +織 +塔 +蚤 +盾 +移 +恢 +瑣 +逃 +引 +仁 +搬 +硼 +掠 +術 +毎 +燎 +Φ +蟇 +嗜 +錬 +綴 +方 +預 +梹 +原 +柳 +虹 +鯰 +分 +踞 +週 +び +杓 +註 +襦 +栄 +喪 +慈 +團 +站 +簸 +聟 +% +多 +伏 +鴎 +遁 +糞 +躬 +仇 +鉤 +過 +惡 +ほ +毛 +凄 +貼 +爲 +霊 +t +H +六 +官 +咲 +刃 +煤 +眈 +徐 +澳 +ジ +啼 +潔 +膜 +小 +珍 +習 +ヨ +怯 +ァ +稟 +諦 +睿 +貞 +締 +妨 +寸 +ツ +押 +w +⑰ +彰 +洌 +誦 +暇 +鰄 +傍 +偉 +穐 +集 +ゼ +3 +鰕 +ィ +蓮 +銅 +恬 +般 +ま +祈 +炭 +都 +騎 +樂 +蒙 +選 +勉 +動 +勃 +圭 +髙 +肥 +栫 +獰 +図 +韻 +ゎ +ソ +祚 +浪 +汚 +@ +箸 +閲 +春 +巨 +紬 +繋 +牌 +芳 +蛎 +膝 +皀 +拱 +疾 +伐 +転 +陣 +罹 +広 +穂 +狭 +飢 +蹴 +粗 +凸 +遼 +幹 +忍 +桐 +律 +衛 +( +葬 +隼 +玻 +鍜 +楼 +滞 +花 +冨 +業 +梃 +錆 +様 +楪 +鸚 +藤 +三 +廩 +糺 +違 +初 +渭 +籍 +桑 +苓 +吹 +県 +錮 +鞠 +訥 +波 +流 +仗 +奇 +俺 +ヤ +汗 +糜 +独 +ョ +庭 +陰 +蕪 +楽 +l +掛 +子 +祗 +い +錫 +群 +俎 +俤 +呑 +使 +糖 +籾 +凱 +鍛 +脹 +淡 +耽 +傘 +鰍 +唄 +協 +扣 +募 +下 +痴 +ふ +瑕 +翫 +卵 +槌 +繊 +ぎ +腱 +ε +簑 +枚 +寮 +ろ +依 +抹 +浩 +梓 +ポ +琉 +梧 +抑 +土 +伯 +枯 +墾 +蝕 +推 +雄 +蹠 +息 +θ +蛇 +玲 +籔 +駒 +莫 +羊 +仲 +渡 +# +容 +歯 +滅 +鰌 +載 +蛹 +卒 +フ +鳶 +嫉 +楢 +畷 +斜 +敍 +宝 +燦 +戮 +x +終 +双 +儉 +粭 +軋 +撹 +留 +裳 +蒸 +凹 +彌 +改 +並 +森 +輸 +釜 +肛 +沽 +灘 +借 +前 +搾 +生 +奏 +備 +憩 +喚 +眺 +吝 +緘 +2 +妊 +胞 +己 +学 +越 +柿 +華 +莞 +顕 +拷 +捉 +至 +妓 +篦 +陷 +凡 +粁 +昔 +お +Q +馨 +躑 +膀 +∥ +能 +涙 +狼 +蕁 +犀 +通 +田 +⑤ +濁 +昭 +郵 +架 +淨 +淫 +盜 +收 +産 +7 +循 +痩 +橇 +莚 +猶 +蔗 +級 +郛 +挨 +勅 +咽 +羅 +重 +占 +隘 +失 +粋 +趣 +鰯 +嵩 +吻 +れ +佇 +悽 +麾 +咄 +聞 +緤 +棟 +奘 +苧 +駿 +抬 +艮 +瞑 +徽 +C +沌 +慣 +頒 +錺 +績 +造 +鷺 +彙 +檢 +餅 +せ +談 +刷 +薗 +丘 +倖 +操 +納 +墹 +剪 +犬 +嶬 +瓏 +脱 +想 +轡 +歌 +秩 +虞 +忝 +證 +煥 +埴 +手 +鞭 +δ +菟 +櫻 +訊 +鏑 +※ +粕 +符 +畭 +鯆 +や +萠 +剰 +殺 +汐 +y +削 +末 +≒ +坪 +バ +→ +紅 +琶 +制 +幕 +^ +炎 +臆 +狄 +碓 +娯 +灼 +沫 +写 +寔 +肪 +堡 +祥 +責 +善 +岡 +菩 +恭 +慮 +菅 +扮 +拳 +壊 +椋 +箏 +迦 +曇 +賞 +聴 +只 +榔 +欄 +料 +朝 +飜 +甦 +縢 +秋 +局 +此 +綺 +茫 +脊 +弁 +穰 +湘 +腐 +瑞 +浄 +脅 +跪 +冴 +惑 +林 +ω +袁 +恆 +綱 +猷 +Ⅰ +宅 +兆 +好 +我 +暉 +扇 +搦 +慟 +蚫 +竈 +闘 +佗 +匿 +莉 +吽 +曼 +模 +遥 +莪 +抒 +劫 +階 +艀 +栂 +僧 +蝮 +章 +檻 +顛 +稽 +頸 +錘 +褪 +閖 +閉 +凶 +蝿 +葵 +斉 +批 +賦 +悼 +筆 +円 +尖 +陋 +薦 +塊 +漆 +天 +握 +喧 +映 +杜 +捲 +米 +乘 +報 +丁 +李 +嶮 +悉 +墜 +塀 +嫌 +湊 +省 +野 +曽 +洪 +膨 +蛉 +九 +進 +労 +統 +賠 +忖 +奔 +液 +Z +縋 +罠 +陪 +諌 +條 +爽 +禰 +輻 +荒 +蓑 +摸 +茂 +栁 +頷 +坂 +際 +将 +緊 +柾 +靖 +楔 +窟 +巴 +梁 +洵 +簾 +疫 +捕 +毬 +桔 +惺 +褒 +筵 +昧 +孵 +霧 +愚 +酸 +鍍 +麹 +扉 +繭 +磋 +期 +茶 +嵐 +鋏 +自 +叱 +遺 +謁 +庇 +頃 +銑 +減 +藻 +蕾 +東 +庚 +鰐 +狹 +⑱ +尻 +饒 +誘 +も +夥 +校 +曻 +列 +痕 +鴦 +斗 +共 +胃 +詑 +再 +缶 +軸 +遅 +蜻 +增 +吋 +狷 +穏 +朋 +足 +Ⅳ +蹟 +奨 +姪 +霖 +頌 +象 +眄 +貌 +噪 +瑤 +丙 +囮 +葹 +藪 +駕 +兎 +屋 +夙 +炊 +相 +婁 +姻 +ざ +藥 +及 +隷 +准 +光 +蒄 +稗 +粧 +筬 +Σ +廻 +紙 +醜 +貯 +兵 +暴 +輌 +竺 +屠 +詫 +俵 +斂 +瓦 +鑪 +規 +廼 +衆 +択 +和 +年 +慾 +福 +陸 +考 +満 +オ +戲 +] +欠 +堝 +舛 +鱸 +票 +樽 +任 +戎 +勲 +優 +苗 +但 +怜 +賛 +嚆 +鰹 +拘 +招 +酵 +甚 +烹 +烟 +r +検 +興 +榛 +÷ +乱 +牡 +鋲 +斌 +淵 +奮 +畢 +膂 +君 +巖 +鹿 +梢 +朗 +兼 +濃 +瑶 +o +垰 +則 +裝 +裔 +父 +頴 +箔 +課 +程 +蒋 +閑 +篝 +深 +美 +箴 +限 +聰 +以 +⑬ +萎 +盪 +閻 +憧 +橦 +堂 +瑠 +幼 +宴 +予 +汁 +燻 +颯 +劾 +絎 +眸 +佑 +挺 +形 +凧 +駄 +駮 +費 +⑧ +嬢 +蕉 +急 +岫 +皆 +離 +ラ +針 +鉱 +零 +榿 +繰 +厘 +萄 +弩 +因 +澤 +汀 +訳 +倉 +衝 +姶 +絵 +拠 +罵 +鯱 +貴 +茄 +猜 +賣 +壞 +匝 +牲 +T +紫 +耄 +洲 +拭 +餞 +悲 +沖 +麿 +導 +黒 +況 +征 +ヲ +腺 +庸 +岻 +屈 +髪 +帷 +稻 +ち +え +瞭 +q +髻 +王 +纈 +峠 +辣 +漂 +ハ +柵 +樵 +汞 +軌 +袋 +児 +撞 +跛 +碆 +涵 +攪 +練 +寅 +蚊 +猪 +彎 +迷 +婉 +価 +揣 +累 +埃 +緻 +蛛 +開 +案 +農 +媒 +娩 +呟 +塁 +絶 +凝 +鶴 +亀 +抜 +如 +股 +熾 +ぺ +窄 +防 +妹 +鎧 +没 +グ +這 +煕 +執 +瑛 +蜀 +浮 +緯 +粛 +送 +桾 +の +唾 +杏 +揮 +泌 +芯 +袂 +誤 +\ +⑯ +冠 +縺 +南 +惣 +篭 +贅 +添 +鉛 +潅 +侈 +畏 +同 +劇 +箋 +杖 +歴 +培 +杁 +大 +志 +祐 +熱 +筏 +芸 +坐 +飛 +ケ +済 +郊 +餠 +淑 +之 +沈 +托 +逹 +u +喰 +駁 +柏 +弗 +焚 +嘩 +雁 +後 +⑭ +壽 +瞰 +鍼 +環 +止 +晦 +遡 +姑 +袴 +け +敬 +拓 +署 +羽 +呰 +義 +託 +逐 +ズ +俊 +碇 +泥 +唯 +ロ +衍 +侯 +利 +老 +誠 +患 +デ +鮮 +坊 +随 +蓄 +≦ +彦 +呎 +慢 +蜆 +來 +し +髮 +瀧 +そ +鰈 +諒 +椰 +唐 +梍 +整 +隊 +喋 +願 +淘 +菌 +巽 +Y +幌 +班 +莱 +哨 +楯 +例 +脆 +渠 +遠 +鞁 +螺 +袈 +愴 +勘 +恪 +中 +室 +舞 +茜 +陦 +怠 +宣 +シ +漉 +鰔 +葱 +棯 +晴 +秒 +葎 +夜 +奄 +呪 +事 +斑 +箝 +眠 +β +猟 +糟 +雌 +畜 +6 +庖 +獺 +ゾ +郷 +錐 +轍 +機 +晨 +碌 +孕 +畔 +ど +蝉 +塚 +召 +奧 +籃 +欽 +桒 +扁 +崖 +吐 +空 +嗚 +揺 +套 +板 +鸞 +珪 +艇 +棹 +近 +媛 +嵯 +麒 +隔 +窃 +K +影 +去 +券 +穿 +麦 +蠣 +τ +言 +飴 +途 +竦 +ぉ +鮫 +曾 +瓩 +憫 +破 +捩 +精 +念 +苫 +綬 +釆 +眞 +誅 +嘲 +系 +歇 +膚 +蛋 +枡 +稼 +荘 +貢 +櫟 +鍋 +倆 +魚 +寡 +碁 +驗 +栃 +撥 +椎 +賤 +証 +翔 +童 +諾 +倪 +頁 +孤 +部 +侑 +碎 +誹 +沓 +龝 +邏 +弱 +懈 +涸 +a +闊 +値 +恵 +路 +給 +長 +鳴 +畉 +嘗 +躍 +湛 +匪 +而 +耆 +祥 +碗 +就 +謗 +孟 +瘻 +恃 +社 +尊 +Ⅲ +捻 +狛 +蕗 +浚 +蕩 +虜 +鰺 +溺 +頗 +挿 +貪 +膳 +瞳 +妻 +ベ +啖 +矢 +∞ +靡 +滕 +f +座 +儀 +佼 +炬 +札 +蜜 +涎 +売 +悔 +裏 +党 +尋 +海 +強 +委 +杞 +だ +余 +傳 +粹 +〔 +藍 +昼 +幇 +黍 +疏 +躾 +應 +盛 +藷 +按 +煮 +祖 +隙 +艘 +孫 +戚 +爪 +じ +策 +奸 +ギ +揉 +罅 +恙 +植 +蓉 +瑳 +壘 +e +宏 +骸 +商 +疹 +磐 +何 +殖 +逝 +悛 +詢 +釧 +攬 +5 +祉 +檄 +に +迎 +ヵ +琥 +朔 +江 +果 +張 +謫 +永 +譲 +寢 +鑄 +論 +敏 +区 +ヅ +蟹 +喫 +聾 +ガ +癇 +衰 +劔 +認 +糎 +庫 +個 +装 +饑 +蒔 +’ +惚 +干 +水 +燥 +贖 +懷 +刈 +姿 +肉 +鉄 +亭 +主 +邉 +縁 +栩 +混 +夫 +苛 +鬚 +か +杉 +游 +颪 +刊 +Ⅵ +聡 +山 +薩 +鷹 +漫 +愈 +曹 +凌 +μ +旦 +卍 +椌 +祀 +靜 +彪 +頂 +消 +贋 +荷 +煩 +倍 +琴 +さ +ニ +墓 +〇 +錦 +伜 +浦 +帥 +捗 +柑 +晏 +翳 +棄 +互 +運 +椿 +峨 +ぞ +順 +憾 +欣 +晰 +保 +朗 +秘 +楜 +西 +樮 +鐘 +牟 +緒 +蟻 +鰭 +漁 +⑫ +呉 +全 +侵 +b +丈 +撲 +酢 +卑 +絡 +硫 +竹 +逸 +” +益 +― +不 +塵 +滯 +巾 +蕨 +鰤 +亢 +版 +竪 +廟 +吠 +狸 +少 +烏 +楚 +法 +亘 +魅 +布 +夷 +財 +閥 +市 +挟 +⑦ +串 +剽 +? +暮 +絃 +廃 +秤 +障 +憺 +祠 +戸 +命 +ら +村 +瀨 +柔 +赤 +旗 +緖 +尾 +災 +岳 +濾 +火 +N +撒 +倒 +括 +婆 +稠 +膏 +偕 +磊 +濱 +澁 +昌 +○ +鉗 +駛 +阪 +腎 +圃 +鈴 +柚 +塒 +顆 +騙 +崎 +範 +衞 +〒 +熟 +禎 +噎 +蹉 +渉 +埼 +戒 +箱 +壺 +德 +蒐 +噌 +儒 +楴 +判 +衣 +隆 +塾 +う +性 +頭 +卦 +鋭 +獅 +囂 +名 +含 +郁 +届 +總 +渦 +杼 +楳 +芒 +諸 +良 +萱 +傷 +麗 +做 +披 +聽 +献 +腹 +必 +劃 +擽 +逼 +宗 +訶 +挽 +兌 +饗 +高 +領 +Δ +出 +旨 +拒 +萸 +⑲ +盡 +攀 +附 +公 +拡 +襖 +紋 +娶 +癌 +翡 +轌 +努 +断 +践 +身 +舘 +霜 +庄 +怪 +壇 +芦 +辻 +飼 +纂 +嗣 +撫 +Ⅶ +鞄 +謝 +材 +嚢 +M +遵 +罰 +ょ +醍 +滓 +勢 +陛 +薄 +て +埓 +禮 +△ +肢 +掲 +嵜 +識 +匹 +幾 +麻 +琢 +奥 +砧 +價 +審 +峙 +D +嘔 +蜚 +醉 +控 +望 +歳 +姐 +く +渾 +亞 +滔 +韋 +医 +僚 +觜 +矼 +Ω +懐 +婢 +對 +① +喩 +脩 +峽 +煬 +ν +猫 +掃 +攝 +キ +放 +辞 +唖 +計 +蛙 +喬 +首 +薫 +蚕 +注 +! +艶 +艫 +鉈 +紘 +殆 +糸 +ヶ +擡 +貨 +璋 +港 +罪 +ぴ +爺 +〉 +鋤 +輾 +襄 +謨 +権 +閨 +> +敷 +甕 +袢 +誌 +真 +⑪ +雷 +代 +梗 +魯 +釣 +“ +齧 +梛 +笠 +件 +副 +弟 +析 +嘆 +往 +哲 +單 +八 +← +幡 +驚 +迂 +増 +坏 +別 +態 +迩 +拜 +蛮 +畸 +澎 +肘 +複 +跨 +鐸 +ゃ +戴 +桃 +嬬 +掌 +剣 +素 +為 +柤 +抛 +辺 +込 +沿 +迅 +繕 +糯 +都 +↑ +奢 +鮭 +肩 +普 +賢 +敲 +砦 +8 +密 +女 +氾 +蟠 +埋 +調 +力 +夏 +俳 +床 +雍 +ぐ +〃 +飲 +剩 +頼 +寄 +旬 +栓 +婚 +欝 +把 +幅 +伶 +瘤 +獄 +卓 +評 +銘 +踊 +吏 +糀 +ク +悩 +鞘 +状 +鯖 +こ +憊 +綻 +斥 +閃 +寶 +垈 +筝 +綸 +碧 +是 +陶 +他 +愉 +兀 +朕 +釘 +帽 +謄 +畠 +妥 +娠 +侶 +險 +会 +鴻 +黴 +遜 +体 +試 +易 +帳 +ぜ +星 +珂 +鶏 +坤 +紺 +° +的 +巣 +木 +捏 +隕 +廏 +簔 +艙 +勝 +娚 +玩 +タ +戟 +訛 +塩 +家 +杷 +芝 +較 +楡 +舅 +閼 +浴 +漕 +囚 +孃 +渕 +翌 +灌 +灸 +遷 +皇 +島 +髭 +侮 +除 +榮 +疊 +慎 +薯 +蔀 +枅 +屯 +禽 +プ +吃 +十 +忌 +也 +篶 +喀 +孔 +孜 +護 +査 +渥 +擢 +謡 +燕 +歓 +塞 +ア +槍 +澄 +舷 +笏 +功 +裾 +娼 +傑 +瘍 +臺 +両 +旛 +貝 +詞 +蹂 +鄒 +榜 +場 +宵 +歩 +憂 +坑 +当 +頑 +逞 +す +Ⅹ +② +皿 +禾 +Ⅱ +莅 +左 +慧 +蔚 +擦 +癒 +寬 +◇ +祓 +棠 +管 +販 +祝 +竇 +始 +基 +一 +ト +傾 +抵 +厭 +燭 +鋒 +泙 +拵 +緞 +闔 +私 +延 +紹 +圦 +蒼 +属 +枌 +応 +輪 +ぁ +諫 +挫 +膠 +皺 +亡 +棋 +幸 +僞 +脛 +ゆ +桶 +掴 +倭 +某 +頻 +岩 +パ +側 +魂 +谷 +乳 +擂 +9 +冦 +峅 +圏 +驕 +胱 +咋 +穣 +酉 +ル +彫 +栖 +縣 +恐 +亟 +実 +憑 +葉 +鮨 +職 +屏 +蘭 +楓 +監 +焼 +綿 +仔 +専 +廠 +気 +族 +肯 +緋 +説 +ヒ +サ +曝 +酋 +用 +鱒 +香 +弯 +捌 +徘 +富 +冷 +鴛 +魁 +爛 +究 +摺 +劉 +祟 +嬰 +瀉 +挙 +n +柄 +擶 +ね +聖 +兄 +泣 +瀕 +透 +逗 +ば +穢 +笹 +賓 +戦 +朴 +伴 +到 +僑 +砺 +簀 +禦 +式 +ん +雀 +廿 +ペ +航 +み +孝 +国 +沃 +意 +甥 +詣 +楮 +を +勧 +周 +軾 +狢 +紗 +啓 +胡 +臣 +‘ +詮 +檎 +晃 +鈍 +哄 +袰 +詭 +完 +享 +達 +閏 +蔓 +箇 +耘 +悄 +見 +彗 +覯 +涯 +箆 +尿 +泊 +鳥 +税 +妍 +滋 +壷 +称 +鬮 +嫁 +胚 +徹 +荏 +津 +濯 +墨 +数 +豆 +解 +欺 +箭 +千 +賎 +/ +; +第 +呼 +凛 +組 +硯 +嫡 +割 +軍 +ぇ +持 +鮒 +企 +鋳 +滉 +埠 +刎 +燿 +景 +桓 +巡 +展 +鄙 +買 +戻 +井 +撰 +毫 +菊 +禁 +畳 +嶽 +鱗 +抗 +金 +艦 +佛 +飾 +磨 +棡 +爵 +勒 +凪 +矧 +偶 +杯 +雫 +太 +奴 +於 +巻 +闖 +衡 +徳 +涅 +V +治 +洸 +訟 +葦 +悪 +唆 +溶 +慳 +扼 +笂 +縮 +鑓 +曖 +櫃 +曜 +男 +棺 +物 +施 +塘 +撚 +積 +⑳ +合 +購 +鼈 +骨 +迄 +狐 +冥 +算 +飽 +湶 +狩 +活 +惨 +べ +酎 +蕎 +由 +換 +霸 +偲 +靭 +耕 +倫 +ボ +R +盧 +鐵 +営 +樺 +褄 +エ +晝 +詐 +舸 +奎 +朧 +罧 +堅 +箕 +徂 +欒 +恍 +人 +啄 +油 +沁 +剥 +探 +片 +万 +投 +那 +芙 +娃 +碕 +些 +神 +書 +俣 +邇 +刹 +柴 +本 +掎 +燧 +疲 +死 +房 +惜 +地 +枷 +ャ +褶 +肱 +筰 +青 +ワ +答 +斯 +昇 +明 +衲 +偏 +螂 +賑 +翹 +覧 +ュ +栢 +率 +径 +惇 +点 +亦 +愍 +逮 +櫓 +克 +措 +毅 +昏 +徠 +腥 +渓 +燒 +婿 +鴬 +斐 +著 +潟 +脂 +湖 +砿 +瀾 +筧 +マ +禄 +拔 +籟 +楠 +支 +哉 +僻 +燐 +黄 +贄 +晒 +曲 +遮 +砒 +乖 +覆 +又 +堰 +反 +矜 +醂 +友 +新 +令 +僣 +求 +賴 +醗 +丸 +姓 +愛 +裕 +ゞ +峯 +瀞 +黑 +提 +鳳 +遭 +ヴ +喝 +菱 +趨 +診 +低 +款 +枠 +城 +項 +憤 +葺 +徒 +掻 +讃 +鴫 +縞 +角 +標 +▽ +斤 +粉 +F +驀 +訣 +榑 +該 +撃 +慄 +者 +菰 +鮪 +痛 +曙 +頽 +槽 +里 +住 +蛭 +促 +鍾 +携 +恥 +番 +賄 +丼 +述 +最 +鍔 +弄 +朶 +芭 +堺 +肴 +珸 +船 +盈 +睡 +肇 +蔵 +袷 +儲 +河 +奪 +快 +猿 +狗 +成 +戌 +短 +威 +禍 +店 +漿 +画 +膵 +鼎 +畦 +夭 +萬 +籠 +濡 +讒 +雇 +鵬 +匁 +笑 +轄 +鉢 +軟 +横 +郭 +√ +窒 +O +瀦 +辱 +慰 +漏 +耳 +捧 +痙 +飄 +触 +∑ +磯 +つ +亜 +宥 +脚 +剋 +セ +叙 +暁 +邂 +鳧 +Ⅸ +﨑 +叛 +欲 +縷 +W +紐 +劣 +仙 +彬 +椙 +面 +旧 +傲 +索 +扱 +炯 +弔 +遂 +食 +感 +銃 +翠 +槐 +⑮ +≠ +温 +ゲ +榴 +懺 +〆 +虎 +士 +☆ +秡 +ン +縦 +樟 +址 +搭 +賜 +鈷 +釼 +建 +伍 +鼠 +泗 +維 +漸 +否 +丞 +偵 +亨 +憚 +慇 +鐺 +葭 +七 +立 +段 +殴 +桟 +話 +暗 +旅 +餌 +熊 +釈 +兔 +鎚 +ζ +粥 +禀 +ホ +甲 +汲 +乃 +擾 +岼 +舐 +茗 +諸 +鶯 +宛 +穀 +崋 +珊 +奈 +固 +幽 +蒜 +俟 +ノ +車 +吊 +赫 +厳 +國 +謎 +媚 +廂 +恕 +η +♂ +鉦 +睨 +溥 +蘂 +貿 +濫 +逍 +散 +弧 +上 +ご +楕 +呻 +梳 +轆 +舎 +激 +魏 +琳 +懊 +勺 +条 +鬱 +磧 +係 +拂 +界 +晶 +情 +昂 +牝 +層 +黛 +… +詔 +炙 +叫 +鳩 +酒 +斎 +弊 +所 +誰 +閤 +陳 +痢 +糘 +蔦 +犢 +嚇 +菖 +馬 +祷 +洩 +免 +担 +乗 +句 +翻 +轢 +よ +像 +亥 +m +臨 +助 +測 +竣 +差 +稔 +椴 +音 +* +髄 +包 +頤 +蒲 +蝋 +浬 +鴇 +轟 +唇 +悠 +棚 +蟄 +貧 +帰 +薪 +畝 +酌 +舂 +血 +堪 +耀 +暦 +教 +圈 +侭 +坡 +工 +箒 +砌 +隣 +儘 +ず +浸 +實 +迪 +甜 +文 +困 +誡 +福 +默 +型 +償 +j +鈑 +允 +弘 +貸 +塗 +廓 +秣 +久 +宙 +璧 +ぅ +糾 +擁 +, +鯲 +荻 +裡 +覗 +畿 +穗 +毯 +俸 +橿 +: +め +雜 +育 +粟 +貫 +盂 +豚 +莵 +供 +暫 +窓 +皮 +邑 +祇 +濠 +炉 +穎 +・ +搏 +若 +司 +籖 +蕊 +圷 +滝 +封 +桙 +ウ +騷 +腕 +盃 +取 +鑿 +雲 +柝 +帛 +兜 +訂 +置 +砲 +静 +i +ぽ +雰 +表 +憎 +曉 +諏 +訴 +顔 +切 +酔 +& +冬 +翼 +c +視 +輩 +截 +鵤 +揶 +碍 +繁 +勾 +澪 +釀 +渇 +屍 +菓 +接 +州 +疑 +悟 +季 +闇 +湯 +ミ +質 +鬘 +枝 +ぼ +躯 +矩 +祢 +白 +丹 +穴 +誼 +訪 +づ +鎗 +脇 +技 +ぢ +詠 +着 +苔 +沸 +哮 +齢 +挾 +駅 +履 +府 +胸 +在 +韮 +告 +発 +迫 +| +吾 +煽 +救 +仏 ++ +昨 +須 +搗 +藁 +梺 +京 +邁 +慙 +稜 +請 +忠 +胄 +廊 +適 +□ +刀 +獸 +癸 +椀 +譜 +樹 +瞼 +申 +鳫 +午 +養 +鷲 +才 +渙 +蹄 +刑 +縫 +線 +壗 +從 +逆 +γ +掟 +覿 +捨 +函 +馘 +未 +I +鎮 +茨 +口 +酷 +ゑ +薬 +χ +拙 +吉 +ゥ +乞 +尚 +閾 +勁 +枇 +向 +ォ +待 +枕 +掘 +残 +佐 +研 +誉 +彈 +頚 +玉 +惹 +慥 +笄 +侃 +嘴 +字 +巷 +桷 +橋 +≧ +厚 +街 +乾 +擬 +澱 +圧 +跋 +姉 +歎 +癩 +掩 +莽 +り +与 +澗 +彊 +舌 +賃 +糒 +頓 +ι +処 +橲 +瓜 +弛 +寧 +懸 +苦 +淳 +椚 +嗅 +硴 +錠 +禧 +損 +鴨 +麩 +胤 +爾 +埣 +嘉 +υ +堆 +縱 +ぃ +団 +學 +毒 +遣 +砂 +兒 +鮎 +翰 +創 +ひ +ッ +藺 +祿 +碩 +$ +撼 +遽 +譴 +雹 +磁 +噸 +弥 +知 +阜 +均 +璽 +妄 +域 +于 +憔 +焔 +漣 +薔 +洞 +量 +庶 +甫 +傀 +α +銭 +箪 +昻 +椥 +詳 +墳 +丕 +垳 +排 +関 +変 +駆 +昵 +師 +雅 +芥 +棉 +瑁 +宿 +帶 +廷 +虔 +餐 +揆 +饅 +謙 +コ +神 +σ +払 +鶉 +っ +灰 +薨 +綣 +元 +餉 +∧ +滌 +弾 +滑 +栴 +淀 +寓 +録 +壌 +テ +務 +微 +疋 +纐 +拇 +牢 +祁 +鋸 +纜 +『 +イ +軽 +射 +牧 +牙 +拿 +藝 +厄 +鬼 +特 +帖 +峰 +楷 +霄 +距 +宇 +蝦 +忽 +噛 +橡 +嶺 +誇 +巌 +号 +殿 +尼 +宮 +百 +源 +稿 +遊 +筍 +鞍 +s +潜 +』 +妃 +斟 +位 +乏 +檀 +拝 +裂 +祕 +爬 +嗽 +返 +ム +衿 +醒 +辰 +嘱 +遇 +尽 +謠 +駘 +阡 +憲 +猩 +鏥 +滴 +健 +現 +姦 +醤 +囃 +顯 +礼 +腔 +燃 +絆 +照 +寿 +呂 +乙 +振 +矮 +突 +剤 +矯 +舳 +扶 +対 +豫 +宰 +ド +ヘ +~ +ξ +兢 +榊 +補 +で +尤 +J +沙 +聯 +滲 +擲 +理 +豹 +閣 +鐙 +怒 +垪 +る +絢 +獲 +莎 +蹤 +釁 +庵 +臟 +械 +S +娘 +弓 +昆 +焉 +幣 +拗 +捷 +篩 +撮 +摘 +古 +糊 +恨 +攣 +艱 +眉 +隻 +樛 +有 +播 +凰 +咤 +許 +洛 +笛 +誣 +母 +舩 +讐 +降 +肌 +厨 +冗 +茉 +鰊 +鴉 +鎖 +哺 +仰 +単 +璃 +療 +川 +蛸 +椛 +狙 +害 +採 +翁 +斬 +纖 +φ +燈 +瓶 +旱 +純 +且 +檗 +謳 +填 +絋 +灯 +椅 +罨 +危 +需 +唱 +諛 +醸 +早 +岸 +腿 +効 +卜 +速 +枢 +げ +日 +U +窩 +細 +晩 +湧 +凋 +嶋 +約 +慨 +鑑 +埒 +筈 +蝟 +梅 +印 +可 +癖 +赳 +希 +竃 +鐇 +槙 +渋 +修 +. +愼 +厩 +清 +堕 +虚 +萩 +露 +勳 +呆 +蛤 +蛾 +糠 +悌 +P +恰 +悦 +梼 +ダ +茅 +抽 +議 +尺 +博 +襟 +舒 +煉 +牽 +踪 +信 +品 +民 +端 +肝 +賀 +悋 +阮 +ナ +Ⅷ +舜 +寒 +右 +惠 +腫 +哀 +帯 +筑 +喜 +敦 +梵 +韓 +籐 +缺 +氏 +暢 +岐 +訓 +魄 +殉 +盤 +霞 +幻 +台 +酪 +簇 +脈 +毘 +鎌 +脳 +躊 +逡 +奉 +揃 +入 +綾 +鋼 +泡 +猛 +恋 +膣 +辿 +笈 +度 +等 +妾 +尭 +馳 +釿 +摂 +具 +侍 +瞬 +却 +配 +♀ +叺 +珠 +絹 +《 +員 +汎 +昴 +築 +鼓 +然 +兇 +窺 +槇 +半 +鋺 +柞 +櫛 +英 +駈 +極 +輔 +婦 +ゅ +遍 +茸 +苣 +武 + ̄ +ヌ +榎 +根 +餓 +ゝ +后 +溌 +瓢 +獪 +蟆 +慶 +要 +観 +堀 +致 +荀 +鍬 +潰 +坩 +阻 +病 +鈎 +峻 +豪 +茹 +諄 +杣 +顧 +◎ +嬌 +鶚 +回 +邪 +読 +柊 +沼 +裁 +狽 +撓 +語 +即 +岨 +遏 +今 +屡 +仕 +蔭 +捺 +搖 +匠 +纒 +§ +討 +叶 +勿 +疎 +嗟 +裸 +厖 +′ +檜 +む +察 +道 +底 +愕 +呵 +汪 +菲 +ハ +‐ +⇒ diff --git a/model/model.bin b/model/model.bin new file mode 100644 index 0000000000000000000000000000000000000000..32b666955c6b924edafda90ce5de98b43acf7b78 --- /dev/null +++ b/model/model.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afba3ba73b2d8e5a7a8f13107c77800fd3a96634cf37e84f1e0256e1b4b443a8 +size 17035726 diff --git a/model/model.xml b/model/model.xml new file mode 100644 index 0000000000000000000000000000000000000000..067635388e0cc5f695f49e06cb8d3deacc4f0284 --- /dev/null +++ b/model/model.xml @@ -0,0 +1,3640 @@ + + + + + + + + + + + 1 + 1 + 96 + 2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + 1 + 1 + 96 + 2000 + + + 1 + 1 + 1 + 1 + + + + + 1 + 1 + 96 + 2000 + + + + + + + + 1 + 1 + 96 + 2000 + + + + + + + + + 1 + 1 + 96 + 2000 + + + + + + + + 64 + 1 + 1 + 1 + + + + + + + + 64 + 1 + 3 + 3 + + + + + + + + 64 + 1 + 3 + 3 + + + + + 64 + 1 + 3 + 3 + + + + + + + + 64 + 1 + 3 + 3 + + + 64 + 1 + 1 + 1 + + + + + 64 + 1 + 3 + 3 + + + + + + + + + + + 1 + 1 + 96 + 2000 + + + 64 + 1 + 3 + 3 + + + + + 1 + 64 + 96 + 2000 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 96 + 2000 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 96 + 2000 + + + + + + + 1 + 64 + 96 + 2000 + + + + + 1 + 64 + 96 + 2000 + + + + + + + + 1 + 64 + 96 + 2000 + + + + + + + + + 1 + 64 + 96 + 2000 + + + + + + + + 64 + 1 + 1 + 1 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 64 + 64 + 3 + 3 + + + + + 64 + 64 + 3 + 3 + + + + + + + + 64 + 64 + 3 + 3 + + + 64 + 1 + 1 + 1 + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 96 + 2000 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 96 + 2000 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 96 + 2000 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 96 + 2000 + + + + + + + 1 + 64 + 96 + 2000 + + + + + 1 + 64 + 96 + 2000 + + + + + + + + 1 + 64 + 96 + 2000 + + + + + + + + + 1 + 64 + 96 + 2000 + + + + + + + + 1 + 64 + 96 + 2000 + + + + + 1 + 64 + 48 + 1000 + + + 1 + 64 + 48 + 1000 + + + + + + + + + 128 + 1 + 1 + 1 + + + + + + + + 128 + 64 + 3 + 3 + + + + + + + + 128 + 64 + 3 + 3 + + + + + 128 + 64 + 3 + 3 + + + + + + + + 128 + 64 + 3 + 3 + + + 128 + 1 + 1 + 1 + + + + + 128 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 48 + 1000 + + + 128 + 64 + 3 + 3 + + + + + 1 + 128 + 48 + 1000 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 48 + 1000 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 48 + 1000 + + + + + + + 1 + 128 + 48 + 1000 + + + + + 1 + 128 + 48 + 1000 + + + + + + + + 1 + 128 + 48 + 1000 + + + + + + + + + 1 + 128 + 48 + 1000 + + + + + + + + 128 + 1 + 1 + 1 + + + + + + + + 128 + 128 + 3 + 3 + + + + + + + + 128 + 128 + 3 + 3 + + + + + 128 + 128 + 3 + 3 + + + + + + + + 128 + 128 + 3 + 3 + + + 128 + 1 + 1 + 1 + + + + + 128 + 128 + 3 + 3 + + + + + + + + 1 + 128 + 48 + 1000 + + + 128 + 128 + 3 + 3 + + + + + 1 + 128 + 48 + 1000 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 48 + 1000 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 48 + 1000 + + + + + + + 1 + 128 + 48 + 1000 + + + + + 1 + 128 + 48 + 1000 + + + + + + + + 1 + 128 + 48 + 1000 + + + + + + + + + 1 + 128 + 48 + 1000 + + + + + + + + 1 + 128 + 48 + 1000 + + + + + 1 + 128 + 24 + 500 + + + 1 + 128 + 24 + 500 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 256 + 1 + 1 + 1 + + + + + + + + 256 + 128 + 3 + 3 + + + + + + + + 256 + 128 + 3 + 3 + + + + + 256 + 128 + 3 + 3 + + + + + + + + 256 + 128 + 3 + 3 + + + 256 + 1 + 1 + 1 + + + + + 256 + 128 + 3 + 3 + + + + + + + + 1 + 128 + 24 + 500 + + + 256 + 128 + 3 + 3 + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 24 + 500 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 24 + 500 + + + + + + + 1 + 256 + 24 + 500 + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 24 + 500 + + + + + + + + + 1 + 256 + 24 + 500 + + + + + + + + 256 + 1 + 1 + 1 + + + + + + + + 256 + 256 + 3 + 3 + + + + + + + + 256 + 256 + 3 + 3 + + + + + 256 + 256 + 3 + 3 + + + + + + + + 256 + 256 + 3 + 3 + + + 256 + 1 + 1 + 1 + + + + + 256 + 256 + 3 + 3 + + + + + + + + 1 + 256 + 24 + 500 + + + 256 + 256 + 3 + 3 + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 24 + 500 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 24 + 500 + + + + + + + 1 + 256 + 24 + 500 + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 24 + 500 + + + + + + + + + 1 + 256 + 24 + 500 + + + + + + + + 256 + 1 + 1 + 1 + + + + + + + + 256 + 256 + 3 + 3 + + + + + + + + 256 + 256 + 3 + 3 + + + + + 256 + 256 + 3 + 3 + + + + + + + + 256 + 256 + 3 + 3 + + + 256 + 1 + 1 + 1 + + + + + 256 + 256 + 3 + 3 + + + + + + + + 1 + 256 + 24 + 500 + + + 256 + 256 + 3 + 3 + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 24 + 500 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 24 + 500 + + + + + + + 1 + 256 + 24 + 500 + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 24 + 500 + + + + + + + + + 1 + 256 + 24 + 500 + + + + + + + + 1 + 256 + 24 + 500 + + + + + 1 + 256 + 12 + 250 + + + 1 + 256 + 12 + 250 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 512 + 1 + 1 + 1 + + + + + + + + 512 + 256 + 3 + 3 + + + + + + + + 512 + 256 + 3 + 3 + + + + + 512 + 256 + 3 + 3 + + + + + + + + 512 + 256 + 3 + 3 + + + 512 + 1 + 1 + 1 + + + + + 512 + 256 + 3 + 3 + + + + + + + + 1 + 256 + 12 + 250 + + + 512 + 256 + 3 + 3 + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 1 + 1 + + + + + + + + + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 12 + 250 + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 12 + 250 + + + + + + + 1 + 512 + 12 + 250 + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 12 + 250 + + + + + + + + + 1 + 512 + 12 + 250 + + + + + + + + 512 + 1 + 1 + 1 + + + + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + 512 + 1 + 1 + 1 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 1 + 512 + 12 + 250 + + + 512 + 512 + 3 + 3 + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 1 + 1 + + + + + + + + + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 12 + 250 + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 12 + 250 + + + + + + + 1 + 512 + 12 + 250 + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 12 + 250 + + + + + + + + + 1 + 512 + 12 + 250 + + + + + + + + 512 + 1 + 1 + 1 + + + + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + 512 + 1 + 1 + 1 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 1 + 512 + 12 + 250 + + + 512 + 512 + 3 + 3 + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 1 + 1 + + + + + + + + + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 12 + 250 + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 12 + 250 + + + + + + + 1 + 512 + 12 + 250 + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 12 + 250 + + + + + + + + + 1 + 512 + 12 + 250 + + + + + + + + 1 + 512 + 12 + 250 + + + + + 1 + 512 + 6 + 125 + + + 1 + 512 + 6 + 125 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 512 + 1 + 1 + 1 + + + + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + 512 + 1 + 1 + 1 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 1 + 512 + 6 + 125 + + + 512 + 512 + 3 + 3 + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 1 + 1 + + + + + + + + + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 6 + 125 + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 6 + 125 + + + + + + + 1 + 512 + 6 + 125 + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 6 + 125 + + + + + + + + + 1 + 512 + 6 + 125 + + + + + + + + 512 + 1 + 1 + 1 + + + + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + 512 + 1 + 1 + 1 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 1 + 512 + 6 + 125 + + + 512 + 512 + 3 + 3 + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 1 + 1 + + + + + + + + + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 6 + 125 + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 6 + 125 + + + + + + + 1 + 512 + 6 + 125 + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 6 + 125 + + + + + + + + + 1 + 512 + 6 + 125 + + + + + + + + 512 + 1 + 1 + 1 + + + + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 512 + 512 + 3 + 3 + + + 512 + 1 + 1 + 1 + + + + + 512 + 512 + 3 + 3 + + + + + + + + 1 + 512 + 6 + 125 + + + 512 + 512 + 3 + 3 + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 1 + 1 + + + + + + + + + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 6 + 125 + + + 1 + 512 + 1 + 1 + + + + + 1 + 512 + 6 + 125 + + + + + + + 1 + 512 + 6 + 125 + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 6 + 125 + + + + + + + + + 1 + 512 + 6 + 125 + + + + + + + + 1 + 512 + 6 + 125 + + + + + 1 + 512 + 3 + 62 + + + 1 + 512 + 3 + 62 + + + + + + + + + 3 + + + + + + + + 1 + 512 + 3 + 62 + + + 3 + + + + + 1 + 512 + 186 + + + + + + + + 4442 + 1 + + + + + + + + 4442 + 512 + + + + + + + + 4442 + 512 + + + + + 4442 + 512 + + + + + + + + 4442 + 512 + + + 4442 + 1 + + + + + 4442 + 512 + + + + + + + + 1 + 512 + 186 + + + 4442 + 512 + + + + + 1 + 186 + 4442 + + + + + + + + 1 + 1 + 4442 + + + + + + + + + + + 1 + 1 + 4442 + + + + + 1 + 1 + 4442 + + + + + + + + 1 + 186 + 4442 + + + 1 + 1 + 4442 + + + + + 1 + 186 + 4442 + + + + + + + + 3 + + + + + + + + 1 + 186 + 4442 + + + 3 + + + + + 186 + 1 + 4442 + + + + + + + 186 + 1 + 4442 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + 'compression': { + 'algorithms': [ + { + 'name': 'DefaultQuantization', + 'params': { + 'num_samples_for_tuning': 2000, + 'preset': 'performance', + 'stat_subset_size': 300, + 'use_layerwise_tuning': false + } + } + ], + 'dump_intermediate_model': true, + 'target_device': 'ANY' + }, + 'engine': { + 'models': [ + { + 'name': 'handwritten-japanese-recognition-0001', + 'launchers': [ + { + 'framework': 'openvino', + 'adapter': 'ctc_greedy_search_decoder', + 'device': 'cpu' + } + ], + 'datasets': [ + { + 'name': 'Kondate_nakayosi', + 'data_source': 'PATH', + 'annotation_conversion': { + 'converter': 'kondate_nakayosi_recognition', + 'decoding_char_file': 'PATH', + 'annotation_file': 'PATH' + }, + 'annotation': 'PATH', + 'dataset_meta': 'PATH', + 'preprocessing': [ + { + 'type': 'bgr_to_gray' + }, + { + 'type': 'resize', + 'interpolation': 'AREA', + 'aspect_ratio_scale': 'width', + 'size': 96 + }, + { + 'type': 'padding', + 'use_numpy': true, + 'numpy_pad_mode': 'edge', + 'dst_height': 96, + 'dst_width': 2000, + 'pad_type': 'right_bottom' + } + ], + 'metrics': [ + { + 'type': 'label_level_recognition_accuracy', + 'reference': 0.9816 + } + ], + '_command_line_mapping': { + 'decoding_char_file': 'PATH', + 'annotation_file': 'PATH' + } + } + ] + } + ], + 'stat_requests_number': null, + 'eval_requests_number': null, + 'type': 'accuracy_checker' + } + } + + + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..7334fe38fc4f41006574651e9352d143eb0c0d2f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +gradio +opencv-python +openvino diff --git a/utils.py b/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a0ad022446b1d17fc42f2f07e43d518e2f960a98 --- /dev/null +++ b/utils.py @@ -0,0 +1,105 @@ +from pathlib import Path + +import cv2 +import numpy as np +from openvino import Core +from pydantic import BaseModel + + +class KanaData(BaseModel): + class Category(BaseModel): + seion: list[str] + dakuon: list[str] + handakuon: list[str] + youon: list[str] + + category: Category + hiragana: dict[str, list[str]] + katakana: dict[str, list[str]] + spell: dict[str, list[str]] + + @classmethod + def load(cls, path): + return cls.model_validate_json(Path(path).read_text()) + + +class Recognizer: + def __init__(self, model_path, char_list_path, device="CPU", blank="[blank]"): + core = Core() + self.model = core.read_model(model_path) + self.compiled_model = core.compile_model(self.model, device) + self.infer_request = self.compiled_model.create_infer_request() + + # (batch_size, channel, width, height) + _, _, self.input_height, self.input_width = self.model.inputs[0].shape + self.input_tensor_name = self.model.inputs[0].get_any_name() + self.output_tensor_name = self.model.outputs[0].get_any_name() + + with open(char_list_path, "rt", encoding="UTF-8") as fp: + self.chars = [blank] + fp.read().split("\n") + + def __call__(self, image, top_k=10): + image = self.preprocess(image, self.input_height, self.input_width)[None, :, :, :] + + for _ in range(2): + self.infer_request.infer(inputs={self.input_tensor_name: image}) + preds = self.infer_request.get_tensor(self.output_tensor_name).data[:] + + return self.ctc_decode(preds, top_k) + + def preprocess(self, image, height, width, invert=False): + src: np.ndarray = cv2.cvtColor(image, cv2.COLOR_RGBA2GRAY) + src = (255 - src) if invert else src + + ratio = float(src.shape[1]) / float(src.shape[0]) + dsize = (int(height * ratio), height) + rsz = cv2.resize(src, dsize, interpolation=cv2.INTER_AREA).astype(np.float32) + + img = rsz[None, :, :] # [h,w] -> [c,h,w] + _, h, w = img.shape + + # right edge padding + return np.pad(img, ((0, 0), (0, height - h), (0, width - w)), mode="edge") + + def ctc_decode(self, preds, top_k): + index, texts, nbest = 0, list(), list() + + preds_index: np.ndarray = np.argmax(preds, 2) + preds_index = preds_index.transpose(1, 0) + preds_index_reshape = preds_index.reshape(-1) + preds_sizes = np.array([preds_index.shape[1]] * preds_index.shape[0]) + + for step in preds_sizes: + t = preds_index_reshape[index : index + step] + + if t.shape[0] == 0: + continue + + char_list = [] + for i in range(step): + if t[i] == 0: + continue + + # removing repeated characters and blank. + if i > 0 and t[i - 1] == t[i]: + continue + + char_list.append(self.chars[t[i]]) + + # process n-best + probs = self.softmax(preds[i][0]) + k_idx = np.argsort(-probs)[:top_k] + k_probs = probs[k_idx] + k_res = [dict(prob=p, char=self.chars[j]) for j, p in zip(k_idx, k_probs)] + nbest.append(k_res) + + text = "".join(char_list) + texts.append(text) + + index += step + + return texts, nbest + + def softmax(self, x): + e_x = np.exp(x - np.max(x)) + return e_x / np.sum(e_x, axis=0)