From 01dbfb3a0f3adf22435cb160708cc179c5d0b4e9 Mon Sep 17 00:00:00 2001 From: Eren Golge Date: Thu, 18 Apr 2019 17:35:20 +0200 Subject: [PATCH] Server update s --- server/conf.json | 3 ++- server/server.py | 2 +- server/synthesizer.py | 41 +++++++++++++++++++++++++++++++++++++++-- utils/text/__init__.py | 1 + utils/text/symbols.py | 4 ++++ 5 files changed, 47 insertions(+), 4 deletions(-) diff --git a/server/conf.json b/server/conf.json index f1813073..ba8d5016 100644 --- a/server/conf.json +++ b/server/conf.json @@ -8,5 +8,6 @@ "wavernn_config":"config.json", // wavernn config file "is_wavernn_batched":true, "port": 5002, - "use_cuda": true + "use_cuda": true, + "debug": true } diff --git a/server/server.py b/server/server.py index f5ad4088..d7b1dca8 100644 --- a/server/server.py +++ b/server/server.py @@ -27,4 +27,4 @@ def tts(): if __name__ == '__main__': - app.run(debug=True, host='0.0.0.0', port=config.port) + app.run(debug=config.debug, host='0.0.0.0', port=config.port) diff --git a/server/synthesizer.py b/server/synthesizer.py index b8198978..1f23cf25 100644 --- a/server/synthesizer.py +++ b/server/synthesizer.py @@ -10,6 +10,14 @@ from utils.audio import AudioProcessor from utils.generic_utils import load_config, setup_model from utils.text import phoneme_to_sequence, phonemes, symbols, text_to_sequence, sequence_to_phoneme +import re +alphabets= "([A-Za-z])" +prefixes = "(Mr|St|Mrs|Ms|Dr)[.]" +suffixes = "(Inc|Ltd|Jr|Sr|Co)" +starters = "(Mr|Mrs|Ms|Dr|He\s|She\s|It\s|They\s|Their\s|Our\s|We\s|But\s|However\s|That\s|This\s|Wherever)" +acronyms = "([A-Z][.][A-Z][.](?:[A-Z][.])?)" +websites = "[.](com|net|org|io|gov)" + class Synthesizer(object): def __init__(self, config): @@ -48,6 +56,7 @@ class Synthesizer(object): if use_cuda: self.tts_model.cuda() self.tts_model.eval() + self.tts_model.decoder.max_decoder_steps = 3000 def load_wavernn(self, lib_path, model_path, model_file, model_config, use_cuda): sys.path.append(lib_path) # set this if TTS is not installed globally @@ -83,14 +92,42 @@ class Synthesizer(object): wav = np.array(wav) self.ap.save_wav(wav, path) + def split_into_sentences(self, text): + text = " " + text + " " + text = text.replace("\n"," ") + text = re.sub(prefixes,"\\1",text) + text = re.sub(websites,"\\1",text) + if "Ph.D" in text: text = text.replace("Ph.D.","PhD") + text = re.sub("\s" + alphabets + "[.] "," \\1 ",text) + text = re.sub(acronyms+" "+starters,"\\1 \\2",text) + text = re.sub(alphabets + "[.]" + alphabets + "[.]" + alphabets + "[.]","\\1\\2\\3",text) + text = re.sub(alphabets + "[.]" + alphabets + "[.]","\\1\\2",text) + text = re.sub(" "+suffixes+"[.] "+starters," \\1 \\2",text) + text = re.sub(" "+suffixes+"[.]"," \\1",text) + text = re.sub(" " + alphabets + "[.]"," \\1",text) + if "”" in text: text = text.replace(".”","”.") + if "\"" in text: text = text.replace(".\"","\".") + if "!" in text: text = text.replace("!\"","\"!") + if "?" in text: text = text.replace("?\"","\"?") + text = text.replace(".",".") + text = text.replace("?","?") + text = text.replace("!","!") + text = text.replace("",".") + sentences = text.split("") + sentences = sentences[:-1] + sentences = [s.strip() for s in sentences] + return sentences + def tts(self, text): wavs = [] - for sen in text.split('.'): + sens = self.split_into_sentences(text) + if len(sens) == 0: + sens = [text+'.'] + for sen in sens: if len(sen) < 3: continue sen = sen.strip() print(sen) - sen = sen.strip() seq = np.array(self.input_adapter(sen)) text_hat = sequence_to_phoneme(seq) diff --git a/utils/text/__init__.py b/utils/text/__init__.py index 9c0e3f47..a05f100a 100644 --- a/utils/text/__init__.py +++ b/utils/text/__init__.py @@ -50,6 +50,7 @@ def phoneme_to_sequence(text, cleaner_names, language, enable_eos_bos=False): sequence = [_phonemes_to_id['^']] else: sequence = [] + text = text.replace(":", "") clean_text = _clean_text(text, cleaner_names) phonemes = text2phone(clean_text, language) if phonemes is None: diff --git a/utils/text/symbols.py b/utils/text/symbols.py index 5fc20a5f..838d84ae 100644 --- a/utils/text/symbols.py +++ b/utils/text/symbols.py @@ -28,6 +28,10 @@ _arpabet = ['@' + s for s in _phonemes] symbols = [_pad, _eos, _bos] + list(_characters) + _arpabet phonemes = [_pad, _eos, _bos] + list(_phonemes) + list(_punctuations) +# Generate ALIEN language +# from random import shuffle +# shuffle(phonemes) + if __name__ == '__main__': print(" > TTS symbols ") print(symbols)