Вот моя ситуация: у меня есть хорошо обученная модель синтеза речи.Я собираюсь ускорить синтезирование шагов с помощью многопроцессорной обработки, которая предварительно загружает модель в каждый процессор, а затем продолжает вводить предложения для преобразования текста в речь.
Вот мой пробный скрипт:
####################################################################
#!/usr/bin/python3
####################################################################
from multiprocessing import Process, Pool, cpu_count
import os,time
####################################################################
from tacotron.demo_synthesizer import Synthesizer
from splitting_sent import splitting_para
import tensorflow as tf
from datasets import audio
####################################################################
from pypinyin import pinyin, Style
####################################################################
BASE_DIR = os.path.split(os.path.realpath(__file__))[0]
VOICE = BASE_DIR + "/tmp"
TXT = BASE_DIR + "/txt"
os.makedirs(VOICE, exist_ok=True)
os.makedirs(TXT, exist_ok=True)
####################################################################
def syn(py):
synthesizer = Synthesizer()
synthesizer.load("/path/to/the/model")
wav_name = time.time()
wav_path = VOICE + "/" + str(wav_name)
wav = synthesizer.synthesize(py)
audio.save_wav(wav, wav_path)
if __name__ =='__main__':
with open(os.path.join(TXT, "content.txt"), "r") as f:
lines = f.read().splitlines()
lines = "".join(lines)
sentences = splitting_para(lines)
# splitting paragraph into individual sentences.
py_list = []
for sent in sentences:
py_sent = pinyin(sent, style=Style.TONE3)
py_sent = " ".join([i[0] for i in py_sent if i[0].isalnum()])
py_list.append(py_sent)
# as I am trying the Chinese TTS, it is the inevitable prerequisite step of translating Chinese character into Pinyin.
print('Run the main process (%s).' % (os.getpid()))
mainStart = time.time()
p = Pool(cpu_count())
for py in py_list:
p.apply_async(syn,args=(py,))
print('Waiting for all subprocesses done ...')
p.close()
p.join()
print('All subprocesses done')
mainEnd = time.time()
print('All process ran %0.2f seconds.' % (mainEnd-mainStart))
Я застрял в этой проблеме: я мог только предварительно загрузить 12 моделей в 12 процессов для синтеза случайных предложений.Однако невозможно продолжать ввод следующих 12 предложений в модель предварительной загрузки.Процессы были прерваны после того, как первый набор из 12 предложений-TTS был закончен.Я полностью потерян здесь.: (
Я очень ценю, если есть предложение. :)