From 46c83cf89a1b298fff5b956912108ad6aec80023 Mon Sep 17 00:00:00 2001 From: tsukumi Date: Wed, 6 Mar 2024 21:35:47 +0000 Subject: [PATCH] Refactor: moved the user dictionary implementation ported from VOICEVOX to style_bert_vits2/text_processing/japanese/user_dict/ --- server_editor.py | 2 +- style_bert_vits2/constants.py | 21 ++++++----- .../japanese/user_dict/README.md | 27 ++++++++++++++ .../japanese}/user_dict/__init__.py | 35 +++++++++---------- .../user_dict/part_of_speech_data.py | 13 +++---- .../japanese}/user_dict/word_model.py | 12 ++++--- text/japanese.py | 2 +- text/user_dict/README.md | 19 ---------- 8 files changed, 71 insertions(+), 60 deletions(-) create mode 100644 style_bert_vits2/text_processing/japanese/user_dict/README.md rename {text => style_bert_vits2/text_processing/japanese}/user_dict/__init__.py (93%) rename {text => style_bert_vits2/text_processing/japanese}/user_dict/part_of_speech_data.py (87%) rename {text => style_bert_vits2/text_processing/japanese}/user_dict/word_model.py (93%) delete mode 100644 text/user_dict/README.md diff --git a/server_editor.py b/server_editor.py index 70f7c9b..7577637 100644 --- a/server_editor.py +++ b/server_editor.py @@ -44,7 +44,7 @@ from style_bert_vits2.constants import ( from style_bert_vits2.logging import logger from style_bert_vits2.text_processing.japanese.g2p_utils import g2kata_tone, kata_tone2phone_tone from style_bert_vits2.text_processing.japanese.normalizer import normalize_text -from text.user_dict import ( +from style_bert_vits2.text_processing.japanese.user_dict import ( apply_word, update_dict, read_dict, diff --git a/style_bert_vits2/constants.py b/style_bert_vits2/constants.py index a90bc01..2d6e9ad 100644 --- a/style_bert_vits2/constants.py +++ b/style_bert_vits2/constants.py @@ -5,21 +5,17 @@ from pathlib import Path # Style-Bert-VITS2 のバージョン VERSION = "2.3.1" -# ユーザー辞書ディレクトリ -USER_DICT_DIR = Path("dict_data") - # Gradio のテーマ ## Built-in theme: "default", "base", "monochrome", "soft", "glass" ## See https://huggingface.co/spaces/gradio/theme-gallery for more themes GRADIO_THEME = "NoCrypt/miku" -# 利用可能な言語 -class Languages(str, Enum): - JP = "JP" - EN = "EN" - ZH = "ZH" +# デフォルトのユーザー辞書ディレクトリ +## style_bert_vits2.text_processing.japanese.user_dict モジュールのデフォルト値として利用される +## ライブラリとしての利用などで外部のユーザー辞書を指定したい場合は、user_dict 以下の各関数の実行時、引数に辞書データファイルのパスを指定する +DEFAULT_USER_DICT_DIR = Path(__file__).parent.parent / "dict_data" -# 推論パラメータのデフォルト値 +# デフォルトの推論パラメータ DEFAULT_STYLE = "Neutral" DEFAULT_STYLE_WEIGHT = 5.0 DEFAULT_SDP_RATIO = 0.2 @@ -30,3 +26,10 @@ DEFAULT_LINE_SPLIT = True DEFAULT_SPLIT_INTERVAL = 0.5 DEFAULT_ASSIST_TEXT_WEIGHT = 0.7 DEFAULT_ASSIST_TEXT_WEIGHT = 1.0 + +# 利用可能な言語 +## JP-Extra モデル利用時は JP 以外の言語の音声合成はできない +class Languages(str, Enum): + JP = "JP" + EN = "EN" + ZH = "ZH" diff --git a/style_bert_vits2/text_processing/japanese/user_dict/README.md b/style_bert_vits2/text_processing/japanese/user_dict/README.md new file mode 100644 index 0000000..3e7a0c0 --- /dev/null +++ b/style_bert_vits2/text_processing/japanese/user_dict/README.md @@ -0,0 +1,27 @@ + +## ユーザー辞書関連のコードについて + +このフォルダに含まれるユーザー辞書関連のコードは、[VOICEVOX ENGINE](https://github.com/VOICEVOX/voicevox_engine) プロジェクトのコードを改変したものを使用しています。 +VOICEVOX プロジェクトのチームに深く感謝し、その貢献を尊重します。 + +### 元のコード + +- [voicevox_engine/user_dict/](https://github.com/VOICEVOX/voicevox_engine/tree/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict) +- [voicevox_engine/model.py](https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/model.py#L207) + +### 改変の詳細 + +- ファイル名の書き換えおよびそれに伴う import 文の書き換え。 +- VOICEVOX 固有の部分をコメントアウト。 +- mutex を使用している部分をコメントアウト。 +- 参照している pyopenjtalk の違いによるメソッド名の書き換え。 +- UserDictWord の mora_count のデフォルト値を None に指定。 +- `model.py` のうち、必要な Pydantic モデルのみを抽出。 + +### ライセンス + +元の VOICEVOX ENGINE のリポジトリのコードは、LGPL v3 と、ソースコードの公開が不要な別ライセンスのデュアルライセンスの下で使用されています。 +当プロジェクトにおけるこのモジュールも LGPL ライセンスの下にあります。 + +詳細については、プロジェクトのルートディレクトリにある [LGPL_LICENSE](/LGPL_LICENSE) ファイルをご参照ください。 +また、元の VOICEVOX ENGINE プロジェクトのライセンスについては、[こちら](https://github.com/VOICEVOX/voicevox_engine/blob/master/LICENSE) をご覧ください。 diff --git a/text/user_dict/__init__.py b/style_bert_vits2/text_processing/japanese/user_dict/__init__.py similarity index 93% rename from text/user_dict/__init__.py rename to style_bert_vits2/text_processing/japanese/user_dict/__init__.py index c12b3d1..10ea02f 100644 --- a/text/user_dict/__init__.py +++ b/style_bert_vits2/text_processing/japanese/user_dict/__init__.py @@ -1,11 +1,12 @@ -# このファイルは、VOICEVOXプロジェクトのVOICEVOX engineからお借りしています。 -# 引用元: -# https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/user_dict.py -# ライセンス: LGPL-3.0 -# 詳しくは、このファイルと同じフォルダにあるREADME.mdを参照してください。 +""" +このファイルは、VOICEVOX プロジェクトの VOICEVOX ENGINE からお借りしています。 +引用元: https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/user_dict.py +ライセンス: LGPL-3.0 +詳しくは、このファイルと同じフォルダにある README.md を参照してください。 +""" + import json import sys -import threading import traceback from pathlib import Path from typing import Dict, List, Optional @@ -15,25 +16,21 @@ import numpy as np import pyopenjtalk from fastapi import HTTPException -from .word_model import UserDictWord, WordTypes - +from style_bert_vits2.constants import DEFAULT_USER_DICT_DIR +from style_bert_vits2.text_processing.japanese.user_dict.word_model import UserDictWord, WordTypes # from ..utility.mutex_utility import mutex_wrapper # from ..utility.path_utility import engine_root, get_save_dir -from .part_of_speech_data import MAX_PRIORITY, MIN_PRIORITY, part_of_speech_data -from common.constants import USER_DICT_DIR +from style_bert_vits2.text_processing.japanese.user_dict.part_of_speech_data import MAX_PRIORITY, MIN_PRIORITY, part_of_speech_data # root_dir = engine_root() # save_dir = get_save_dir() -root_dir = Path(USER_DICT_DIR) -save_dir = Path(USER_DICT_DIR) +# if not save_dir.is_dir(): +# save_dir.mkdir(parents=True) -if not save_dir.is_dir(): - save_dir.mkdir(parents=True) - -default_dict_path = root_dir / "default.csv" # VOICEVOXデフォルト辞書ファイルのパス -user_dict_path = save_dir / "user_dict.json" # ユーザー辞書ファイルのパス -compiled_dict_path = save_dir / "user.dic" # コンパイル済み辞書ファイルのパス +default_dict_path = DEFAULT_USER_DICT_DIR / "default.csv" # VOICEVOXデフォルト辞書ファイルのパス +user_dict_path = DEFAULT_USER_DICT_DIR / "user_dict.json" # ユーザー辞書ファイルのパス +compiled_dict_path = DEFAULT_USER_DICT_DIR / "user.dic" # コンパイル済み辞書ファイルのパス # # 同時書き込みの制御 @@ -54,7 +51,7 @@ def _write_to_json(user_dict: Dict[str, UserDictWord], user_dict_path: Path) -> """ converted_user_dict = {} for word_uuid, word in user_dict.items(): - word_dict = word.dict() + word_dict = word.model_dump() word_dict["cost"] = _priority2cost( word_dict["context_id"], word_dict["priority"] ) diff --git a/text/user_dict/part_of_speech_data.py b/style_bert_vits2/text_processing/japanese/user_dict/part_of_speech_data.py similarity index 87% rename from text/user_dict/part_of_speech_data.py rename to style_bert_vits2/text_processing/japanese/user_dict/part_of_speech_data.py index 7e22699..db42d38 100644 --- a/text/user_dict/part_of_speech_data.py +++ b/style_bert_vits2/text_processing/japanese/user_dict/part_of_speech_data.py @@ -1,12 +1,13 @@ -# このファイルは、VOICEVOXプロジェクトのVOICEVOX engineからお借りしています。 -# 引用元: -# https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/part_of_speech_data.py -# ライセンス: LGPL-3.0 -# 詳しくは、このファイルと同じフォルダにあるREADME.mdを参照してください。 +""" +このファイルは、VOICEVOX プロジェクトの VOICEVOX ENGINE からお借りしています。 +引用元: https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/part_of_speech_data.py +ライセンス: LGPL-3.0 +詳しくは、このファイルと同じフォルダにある README.md を参照してください。 +""" from typing import Dict -from .word_model import ( +from style_bert_vits2.text_processing.japanese.user_dict.word_model import ( USER_DICT_MAX_PRIORITY, USER_DICT_MIN_PRIORITY, PartOfSpeechDetail, diff --git a/text/user_dict/word_model.py b/style_bert_vits2/text_processing/japanese/user_dict/word_model.py similarity index 93% rename from text/user_dict/word_model.py rename to style_bert_vits2/text_processing/japanese/user_dict/word_model.py index f05d8dc..bcd4d37 100644 --- a/text/user_dict/word_model.py +++ b/style_bert_vits2/text_processing/japanese/user_dict/word_model.py @@ -1,8 +1,10 @@ -# このファイルは、VOICEVOXプロジェクトのVOICEVOX engineからお借りしています。 -# 引用元: -# https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/model.py#L207 -# ライセンス: LGPL-3.0 -# 詳しくは、このファイルと同じフォルダにあるREADME.mdを参照してください。 +""" +このファイルは、VOICEVOX プロジェクトの VOICEVOX ENGINE からお借りしています。 +引用元: https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/model.py#L207 +ライセンス: LGPL-3.0 +詳しくは、このファイルと同じフォルダにある README.md を参照してください。 +""" + from enum import Enum from re import findall, fullmatch from typing import List, Optional diff --git a/text/japanese.py b/text/japanese.py index b18bc68..47b21c5 100644 --- a/text/japanese.py +++ b/text/japanese.py @@ -15,7 +15,7 @@ from text.japanese_mora_list import ( mora_phonemes_to_mora_kata, ) -from text.user_dict import update_dict +from style_bert_vits2.text_processing.japanese.user_dict import update_dict # 最初にpyopenjtalkの辞書を更新 update_dict() diff --git a/text/user_dict/README.md b/text/user_dict/README.md deleted file mode 100644 index 6f5618e..0000000 --- a/text/user_dict/README.md +++ /dev/null @@ -1,19 +0,0 @@ -このフォルダに含まれるユーザー辞書関連のコードは、[VOICEVOX engine](https://github.com/VOICEVOX/voicevox_engine)プロジェクトのコードを改変したものを使用しています。VOICEVOXプロジェクトのチームに深く感謝し、その貢献を尊重します。 - -**元のコード**: - -- [voicevox_engine/user_dict/](https://github.com/VOICEVOX/voicevox_engine/tree/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict) -- [voicevox_engine/model.py](https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/model.py#L207) - -**改変の詳細**: - -- ファイル名の書き換えおよびそれに伴うimport文の書き換え。 -- VOICEVOX固有の部分をコメントアウト。 -- mutexを使用している部分をコメントアウト。 -- 参照しているpyopenjtalkの違いによるメソッド名の書き換え。 -- UserDictWordのmora_countのデフォルト値をNoneに指定。 -- Pydanticのモデルで必要な箇所のみを抽出。 - -**ライセンス**: - -元のVOICEVOX engineのリポジトリのコードは、LGPL v3 と、ソースコードの公開が不要な別ライセンスのデュアルライセンスの下で使用されています。当プロジェクトにおけるこのモジュールもLGPLライセンスの下にあります。詳細については、プロジェクトのルートディレクトリにある[LGPL_LICENSE](/LGPL_LICENSE)ファイルをご参照ください。また、元のVOICEVOX engineプロジェクトのライセンスについては、[こちら](https://github.com/VOICEVOX/voicevox_engine/blob/master/LICENSE)をご覧ください。