Refactor: moved the user dictionary implementation ported from VOICEVOX to style_bert_vits2/text_processing/japanese/user_dict/

This commit is contained in:
tsukumi
2024-03-06 21:35:47 +00:00
parent 918d168ae7
commit 46c83cf89a
8 changed files with 71 additions and 60 deletions

View File

@@ -44,7 +44,7 @@ from style_bert_vits2.constants import (
from style_bert_vits2.logging import logger 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.g2p_utils import g2kata_tone, kata_tone2phone_tone
from style_bert_vits2.text_processing.japanese.normalizer import normalize_text 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, apply_word,
update_dict, update_dict,
read_dict, read_dict,

View File

@@ -5,21 +5,17 @@ from pathlib import Path
# Style-Bert-VITS2 のバージョン # Style-Bert-VITS2 のバージョン
VERSION = "2.3.1" VERSION = "2.3.1"
# ユーザー辞書ディレクトリ
USER_DICT_DIR = Path("dict_data")
# Gradio のテーマ # Gradio のテーマ
## Built-in theme: "default", "base", "monochrome", "soft", "glass" ## Built-in theme: "default", "base", "monochrome", "soft", "glass"
## See https://huggingface.co/spaces/gradio/theme-gallery for more themes ## See https://huggingface.co/spaces/gradio/theme-gallery for more themes
GRADIO_THEME = "NoCrypt/miku" GRADIO_THEME = "NoCrypt/miku"
# 利用可能な言語 # デフォルトのユーザー辞書ディレクトリ
class Languages(str, Enum): ## style_bert_vits2.text_processing.japanese.user_dict モジュールのデフォルト値として利用される
JP = "JP" ## ライブラリとしての利用などで外部のユーザー辞書を指定したい場合は、user_dict 以下の各関数の実行時、引数に辞書データファイルのパスを指定する
EN = "EN" DEFAULT_USER_DICT_DIR = Path(__file__).parent.parent / "dict_data"
ZH = "ZH"
# 推論パラメータのデフォルト値 # デフォルトの推論パラメータ
DEFAULT_STYLE = "Neutral" DEFAULT_STYLE = "Neutral"
DEFAULT_STYLE_WEIGHT = 5.0 DEFAULT_STYLE_WEIGHT = 5.0
DEFAULT_SDP_RATIO = 0.2 DEFAULT_SDP_RATIO = 0.2
@@ -30,3 +26,10 @@ DEFAULT_LINE_SPLIT = True
DEFAULT_SPLIT_INTERVAL = 0.5 DEFAULT_SPLIT_INTERVAL = 0.5
DEFAULT_ASSIST_TEXT_WEIGHT = 0.7 DEFAULT_ASSIST_TEXT_WEIGHT = 0.7
DEFAULT_ASSIST_TEXT_WEIGHT = 1.0 DEFAULT_ASSIST_TEXT_WEIGHT = 1.0
# 利用可能な言語
## JP-Extra モデル利用時は JP 以外の言語の音声合成はできない
class Languages(str, Enum):
JP = "JP"
EN = "EN"
ZH = "ZH"

View File

@@ -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) をご覧ください。

View File

@@ -1,11 +1,12 @@
# このファイルは、VOICEVOXプロジェクトのVOICEVOX engineからお借りしています。 """
# 引用元: このファイルはVOICEVOX プロジェクトの VOICEVOX ENGINE からお借りしています
# https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/user_dict.py 引用元: https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/user_dict.py
# ライセンス: LGPL-3.0 ライセンス: LGPL-3.0
# 詳しくはこのファイルと同じフォルダにあるREADME.mdを参照してください。 詳しくはこのファイルと同じフォルダにある README.md を参照してください
"""
import json import json
import sys import sys
import threading
import traceback import traceback
from pathlib import Path from pathlib import Path
from typing import Dict, List, Optional from typing import Dict, List, Optional
@@ -15,25 +16,21 @@ import numpy as np
import pyopenjtalk import pyopenjtalk
from fastapi import HTTPException 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.mutex_utility import mutex_wrapper
# from ..utility.path_utility import engine_root, get_save_dir # 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 style_bert_vits2.text_processing.japanese.user_dict.part_of_speech_data import MAX_PRIORITY, MIN_PRIORITY, part_of_speech_data
from common.constants import USER_DICT_DIR
# root_dir = engine_root() # root_dir = engine_root()
# save_dir = get_save_dir() # 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(): default_dict_path = DEFAULT_USER_DICT_DIR / "default.csv" # VOICEVOXデフォルト辞書ファイルのパス
save_dir.mkdir(parents=True) user_dict_path = DEFAULT_USER_DICT_DIR / "user_dict.json" # ユーザー辞書ファイルのパス
compiled_dict_path = DEFAULT_USER_DICT_DIR / "user.dic" # コンパイル済み辞書ファイルのパス
default_dict_path = root_dir / "default.csv" # VOICEVOXデフォルト辞書ファイルのパス
user_dict_path = save_dir / "user_dict.json" # ユーザー辞書ファイルのパス
compiled_dict_path = save_dir / "user.dic" # コンパイル済み辞書ファイルのパス
# # 同時書き込みの制御 # # 同時書き込みの制御
@@ -54,7 +51,7 @@ def _write_to_json(user_dict: Dict[str, UserDictWord], user_dict_path: Path) ->
""" """
converted_user_dict = {} converted_user_dict = {}
for word_uuid, word in user_dict.items(): for word_uuid, word in user_dict.items():
word_dict = word.dict() word_dict = word.model_dump()
word_dict["cost"] = _priority2cost( word_dict["cost"] = _priority2cost(
word_dict["context_id"], word_dict["priority"] word_dict["context_id"], word_dict["priority"]
) )

View File

@@ -1,12 +1,13 @@
# このファイルは、VOICEVOXプロジェクトのVOICEVOX engineからお借りしています。 """
# 引用元: このファイルはVOICEVOX プロジェクトの VOICEVOX ENGINE からお借りしています
# https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/part_of_speech_data.py 引用元: https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/user_dict/part_of_speech_data.py
# ライセンス: LGPL-3.0 ライセンス: LGPL-3.0
# 詳しくはこのファイルと同じフォルダにあるREADME.mdを参照してください。 詳しくはこのファイルと同じフォルダにある README.md を参照してください
"""
from typing import Dict 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_MAX_PRIORITY,
USER_DICT_MIN_PRIORITY, USER_DICT_MIN_PRIORITY,
PartOfSpeechDetail, PartOfSpeechDetail,

View File

@@ -1,8 +1,10 @@
# このファイルは、VOICEVOXプロジェクトのVOICEVOX engineからお借りしています。 """
# 引用元: このファイルはVOICEVOX プロジェクトの VOICEVOX ENGINE からお借りしています
# https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/model.py#L207 引用元: https://github.com/VOICEVOX/voicevox_engine/blob/f181411ec69812296989d9cc583826c22eec87ae/voicevox_engine/model.py#L207
# ライセンス: LGPL-3.0 ライセンス: LGPL-3.0
# 詳しくはこのファイルと同じフォルダにあるREADME.mdを参照してください。 詳しくはこのファイルと同じフォルダにある README.md を参照してください
"""
from enum import Enum from enum import Enum
from re import findall, fullmatch from re import findall, fullmatch
from typing import List, Optional from typing import List, Optional

View File

@@ -15,7 +15,7 @@ from text.japanese_mora_list import (
mora_phonemes_to_mora_kata, 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の辞書を更新 # 最初にpyopenjtalkの辞書を更新
update_dict() update_dict()

View File

@@ -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)をご覧ください。