From c594f7ea7a51e225e5bb980b8d1a947cac07f32e Mon Sep 17 00:00:00 2001 From: tsukumi Date: Sat, 9 Mar 2024 00:26:51 +0000 Subject: [PATCH] Refactor: change execution location of pyopenjtalk.initialize() Considering library design, this function with many side effects should not be executed in a library. --- server_editor.py | 8 ++++++-- server_fastapi.py | 3 +-- style_bert_vits2/nlp/japanese/g2p.py | 8 -------- style_bert_vits2/nlp/japanese/user_dict/__init__.py | 4 ---- webui/inference.py | 3 +-- 5 files changed, 8 insertions(+), 18 deletions(-) diff --git a/server_editor.py b/server_editor.py index 75fa472..9a6a08a 100644 --- a/server_editor.py +++ b/server_editor.py @@ -42,6 +42,7 @@ from style_bert_vits2.constants import ( ) from style_bert_vits2.logging import logger from style_bert_vits2.nlp import bert_models +from style_bert_vits2.nlp.japanese import pyopenjtalk_worker as pyopenjtalk from style_bert_vits2.nlp.japanese.g2p_utils import g2kata_tone, kata_tone2phone_tone from style_bert_vits2.nlp.japanese.normalizer import normalize_text from style_bert_vits2.nlp.japanese.user_dict import ( @@ -148,8 +149,11 @@ def save_last_download(latest_release): # ---フロントエンド部分に関する処理ここまで--- # 以降はAPIの設定 -# 最初に pyopenjtalk の辞書を更新 -## pyopenjtalk_worker の起動も同時に行われる +# pyopenjtalk_worker を起動 +## pyopenjtalk_worker は TCP ソケットサーバーのため、ここで起動する +pyopenjtalk.initialize() + +# pyopenjtalk の辞書を更新 update_dict() # 事前に BERT モデル/トークナイザーをロードしておく diff --git a/server_fastapi.py b/server_fastapi.py index d8da956..e8309da 100644 --- a/server_fastapi.py +++ b/server_fastapi.py @@ -42,8 +42,7 @@ ln = config.server_config.language # pyopenjtalk_worker を起動 -## Gradio はマルチスレッドだが、initialize() 内部で利用されている signal はマルチスレッドから設定できない -## さらに起動には若干時間がかかるため、事前に起動しておいた方が体験が良い +## pyopenjtalk_worker は TCP ソケットサーバーのため、ここで起動する pyopenjtalk.initialize() # 事前に BERT モデル/トークナイザーをロードしておく diff --git a/style_bert_vits2/nlp/japanese/g2p.py b/style_bert_vits2/nlp/japanese/g2p.py index 70b4e81..7fc97f2 100644 --- a/style_bert_vits2/nlp/japanese/g2p.py +++ b/style_bert_vits2/nlp/japanese/g2p.py @@ -112,10 +112,6 @@ def text_to_sep_kata( tuple[list[str], list[str]]: 分割された単語リストと、その読み(カタカナ or 記号1文字)のリスト """ - # pyopenjtalk_worker を初期化 - ## 一度 worker を起動すれば、明示的に終了するかプロセス終了まで同一の worker に接続される - pyopenjtalk.initialize() - # parsed: OpenJTalkの解析結果 parsed = pyopenjtalk.run_frontend(norm_text) sep_text: list[str] = [] @@ -249,10 +245,6 @@ def __pyopenjtalk_g2p_prosody(text: str, drop_unvoiced_vowels: bool = True) -> l return -50 return int(match.group(1)) - # pyopenjtalk_worker を初期化 - ## 一度 worker を起動すれば、明示的に終了するかプロセス終了まで同一の worker に接続される - pyopenjtalk.initialize() - labels = pyopenjtalk.make_label(pyopenjtalk.run_frontend(text)) N = len(labels) diff --git a/style_bert_vits2/nlp/japanese/user_dict/__init__.py b/style_bert_vits2/nlp/japanese/user_dict/__init__.py index 1887c13..a2cc43e 100644 --- a/style_bert_vits2/nlp/japanese/user_dict/__init__.py +++ b/style_bert_vits2/nlp/japanese/user_dict/__init__.py @@ -80,10 +80,6 @@ def update_dict( コンパイル済み辞書ファイルのパス """ - # pyopenjtalk_worker を初期化 - ## 一度 worker を起動すれば、明示的に終了するかプロセス終了まで同一の worker に接続される - pyopenjtalk.initialize() - random_string = uuid4() tmp_csv_path = compiled_dict_path.with_suffix( f".dict_csv-{random_string}.tmp" diff --git a/webui/inference.py b/webui/inference.py index ef1f97f..536b38b 100644 --- a/webui/inference.py +++ b/webui/inference.py @@ -27,8 +27,7 @@ from style_bert_vits2.tts_model import ModelHolder # pyopenjtalk_worker を起動 -## Gradio はマルチスレッドだが、initialize() 内部で利用されている signal はマルチスレッドから設定できない -## さらに起動には若干時間がかかるため、事前に起動しておいた方が体験が良い +## pyopenjtalk_worker は TCP ソケットサーバーのため、ここで起動する pyopenjtalk.initialize() # 事前に BERT モデル/トークナイザーをロードしておく