Refactor: change execution location of pyopenjtalk.initialize()

Considering library design, this function with many side effects should not be executed in a library.
This commit is contained in:
tsukumi
2024-03-09 00:26:51 +00:00
parent 8feef04cef
commit c594f7ea7a
5 changed files with 8 additions and 18 deletions

View File

@@ -42,6 +42,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.nlp import bert_models 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.g2p_utils import g2kata_tone, kata_tone2phone_tone
from style_bert_vits2.nlp.japanese.normalizer import normalize_text from style_bert_vits2.nlp.japanese.normalizer import normalize_text
from style_bert_vits2.nlp.japanese.user_dict import ( from style_bert_vits2.nlp.japanese.user_dict import (
@@ -148,8 +149,11 @@ def save_last_download(latest_release):
# ---フロントエンド部分に関する処理ここまで--- # ---フロントエンド部分に関する処理ここまで---
# 以降はAPIの設定 # 以降はAPIの設定
# 最初に pyopenjtalk の辞書を更新 # pyopenjtalk_worker を起動
## pyopenjtalk_worker の起動も同時に行われ ## pyopenjtalk_worker は TCP ソケットサーバーのため、ここで起動す
pyopenjtalk.initialize()
# pyopenjtalk の辞書を更新
update_dict() update_dict()
# 事前に BERT モデル/トークナイザーをロードしておく # 事前に BERT モデル/トークナイザーをロードしておく

View File

@@ -42,8 +42,7 @@ ln = config.server_config.language
# pyopenjtalk_worker を起動 # pyopenjtalk_worker を起動
## Gradio はマルチスレッドだが、initialize() 内部で利用されている signal はマルチスレッドから設定できない ## pyopenjtalk_worker は TCP ソケットサーバーのため、ここで起動する
## さらに起動には若干時間がかかるため、事前に起動しておいた方が体験が良い
pyopenjtalk.initialize() pyopenjtalk.initialize()
# 事前に BERT モデル/トークナイザーをロードしておく # 事前に BERT モデル/トークナイザーをロードしておく

View File

@@ -112,10 +112,6 @@ def text_to_sep_kata(
tuple[list[str], list[str]]: 分割された単語リストと、その読み(カタカナ or 記号1文字のリスト tuple[list[str], list[str]]: 分割された単語リストと、その読み(カタカナ or 記号1文字のリスト
""" """
# pyopenjtalk_worker を初期化
## 一度 worker を起動すれば、明示的に終了するかプロセス終了まで同一の worker に接続される
pyopenjtalk.initialize()
# parsed: OpenJTalkの解析結果 # parsed: OpenJTalkの解析結果
parsed = pyopenjtalk.run_frontend(norm_text) parsed = pyopenjtalk.run_frontend(norm_text)
sep_text: list[str] = [] sep_text: list[str] = []
@@ -249,10 +245,6 @@ def __pyopenjtalk_g2p_prosody(text: str, drop_unvoiced_vowels: bool = True) -> l
return -50 return -50
return int(match.group(1)) return int(match.group(1))
# pyopenjtalk_worker を初期化
## 一度 worker を起動すれば、明示的に終了するかプロセス終了まで同一の worker に接続される
pyopenjtalk.initialize()
labels = pyopenjtalk.make_label(pyopenjtalk.run_frontend(text)) labels = pyopenjtalk.make_label(pyopenjtalk.run_frontend(text))
N = len(labels) N = len(labels)

View File

@@ -80,10 +80,6 @@ def update_dict(
コンパイル済み辞書ファイルのパス コンパイル済み辞書ファイルのパス
""" """
# pyopenjtalk_worker を初期化
## 一度 worker を起動すれば、明示的に終了するかプロセス終了まで同一の worker に接続される
pyopenjtalk.initialize()
random_string = uuid4() random_string = uuid4()
tmp_csv_path = compiled_dict_path.with_suffix( tmp_csv_path = compiled_dict_path.with_suffix(
f".dict_csv-{random_string}.tmp" f".dict_csv-{random_string}.tmp"

View File

@@ -27,8 +27,7 @@ from style_bert_vits2.tts_model import ModelHolder
# pyopenjtalk_worker を起動 # pyopenjtalk_worker を起動
## Gradio はマルチスレッドだが、initialize() 内部で利用されている signal はマルチスレッドから設定できない ## pyopenjtalk_worker は TCP ソケットサーバーのため、ここで起動する
## さらに起動には若干時間がかかるため、事前に起動しておいた方が体験が良い
pyopenjtalk.initialize() pyopenjtalk.initialize()
# 事前に BERT モデル/トークナイザーをロードしておく # 事前に BERT モデル/トークナイザーをロードしておく