fix: make korean g2p deps optional

This commit is contained in:
Enno Hermann 2024-05-08 14:43:00 +02:00
parent 55ed162f2a
commit 865a48156d
5 changed files with 29 additions and 12 deletions

View File

@ -159,6 +159,7 @@ The following extras allow the installation of optional dependencies:
| `server` | Dependencies to run the TTS server | | `server` | Dependencies to run the TTS server |
| `bn` | Bangla G2P | | `bn` | Bangla G2P |
| `ja` | Japanese G2P | | `ja` | Japanese G2P |
| `ko` | Korean G2P |
| `zh` | Chinese G2P | | `zh` | Chinese G2P |
| `languages` | All language-specific dependencies | | `languages` | All language-specific dependencies |

View File

@ -5,8 +5,6 @@ import textwrap
from functools import cached_property from functools import cached_property
import torch import torch
from hangul_romanize import Transliter
from hangul_romanize.rule import academic
from num2words import num2words from num2words import num2words
from spacy.lang.ar import Arabic from spacy.lang.ar import Arabic
from spacy.lang.en import English from spacy.lang.en import English
@ -592,6 +590,11 @@ def japanese_cleaners(text, katsu):
def korean_transliterate(text): def korean_transliterate(text):
try:
from hangul_romanize import Transliter
from hangul_romanize.rule import academic
except ImportError as e:
raise ImportError("Korean requires: hangul_romanize") from e
r = Transliter(academic) r = Transliter(academic)
return r.translit(text) return r.translit(text)

View File

@ -1,4 +1,7 @@
from jamo import hangul_to_jamo try:
from jamo import hangul_to_jamo
except ImportError as e:
raise ImportError("Korean requires: g2pkk, jamo") from e
from TTS.tts.utils.text.korean.korean import normalize from TTS.tts.utils.text.korean.korean import normalize

View File

@ -2,7 +2,6 @@ from TTS.tts.utils.text.phonemizers.base import BasePhonemizer
from TTS.tts.utils.text.phonemizers.belarusian_phonemizer import BEL_Phonemizer from TTS.tts.utils.text.phonemizers.belarusian_phonemizer import BEL_Phonemizer
from TTS.tts.utils.text.phonemizers.espeak_wrapper import ESpeak from TTS.tts.utils.text.phonemizers.espeak_wrapper import ESpeak
from TTS.tts.utils.text.phonemizers.gruut_wrapper import Gruut from TTS.tts.utils.text.phonemizers.gruut_wrapper import Gruut
from TTS.tts.utils.text.phonemizers.ko_kr_phonemizer import KO_KR_Phonemizer
try: try:
from TTS.tts.utils.text.phonemizers.bangla_phonemizer import BN_Phonemizer from TTS.tts.utils.text.phonemizers.bangla_phonemizer import BN_Phonemizer
@ -14,12 +13,17 @@ try:
except ImportError: except ImportError:
JA_JP_Phonemizer = None JA_JP_Phonemizer = None
try:
from TTS.tts.utils.text.phonemizers.ko_kr_phonemizer import KO_KR_Phonemizer
except ImportError:
KO_KR_Phonemizer = None
try: try:
from TTS.tts.utils.text.phonemizers.zh_cn_phonemizer import ZH_CN_Phonemizer from TTS.tts.utils.text.phonemizers.zh_cn_phonemizer import ZH_CN_Phonemizer
except ImportError: except ImportError:
ZH_CN_Phonemizer = None ZH_CN_Phonemizer = None
PHONEMIZERS = {b.name(): b for b in (ESpeak, Gruut, KO_KR_Phonemizer)} PHONEMIZERS = {b.name(): b for b in (ESpeak, Gruut)}
ESPEAK_LANGS = list(ESpeak.supported_languages().keys()) ESPEAK_LANGS = list(ESpeak.supported_languages().keys())
@ -40,7 +44,6 @@ DEF_LANG_TO_PHONEMIZER.update(_new_dict)
# Force default for some languages # Force default for some languages
DEF_LANG_TO_PHONEMIZER["en"] = DEF_LANG_TO_PHONEMIZER["en-us"] DEF_LANG_TO_PHONEMIZER["en"] = DEF_LANG_TO_PHONEMIZER["en-us"]
DEF_LANG_TO_PHONEMIZER["ko-kr"] = KO_KR_Phonemizer.name()
DEF_LANG_TO_PHONEMIZER["be"] = BEL_Phonemizer.name() DEF_LANG_TO_PHONEMIZER["be"] = BEL_Phonemizer.name()
@ -50,6 +53,9 @@ if BN_Phonemizer is not None:
if JA_JP_Phonemizer is not None: if JA_JP_Phonemizer is not None:
PHONEMIZERS[JA_JP_Phonemizer.name()] = JA_JP_Phonemizer PHONEMIZERS[JA_JP_Phonemizer.name()] = JA_JP_Phonemizer
DEF_LANG_TO_PHONEMIZER["ja-jp"] = JA_JP_Phonemizer.name() DEF_LANG_TO_PHONEMIZER["ja-jp"] = JA_JP_Phonemizer.name()
if KO_KR_Phonemizer is not None:
PHONEMIZERS[KO_KR_Phonemizer.name()] = KO_KR_Phonemizer
DEF_LANG_TO_PHONEMIZER["ko-kr"] = KO_KR_Phonemizer.name()
if ZH_CN_Phonemizer is not None: if ZH_CN_Phonemizer is not None:
PHONEMIZERS[ZH_CN_Phonemizer.name()] = ZH_CN_Phonemizer PHONEMIZERS[ZH_CN_Phonemizer.name()] = ZH_CN_Phonemizer
DEF_LANG_TO_PHONEMIZER["zh-cn"] = ZH_CN_Phonemizer.name() DEF_LANG_TO_PHONEMIZER["zh-cn"] = ZH_CN_Phonemizer.name()
@ -78,6 +84,8 @@ def get_phonemizer_by_name(name: str, **kwargs) -> BasePhonemizer:
raise ValueError("You need to install JA phonemizer dependencies. Try `pip install coqui-tts[ja]`.") raise ValueError("You need to install JA phonemizer dependencies. Try `pip install coqui-tts[ja]`.")
return JA_JP_Phonemizer(**kwargs) return JA_JP_Phonemizer(**kwargs)
if name == "ko_kr_phonemizer": if name == "ko_kr_phonemizer":
if KO_KR_Phonemizer is None:
raise ValueError("You need to install KO phonemizer dependencies. Try `pip install coqui-tts[ko]`.")
return KO_KR_Phonemizer(**kwargs) return KO_KR_Phonemizer(**kwargs)
if name == "bn_phonemizer": if name == "bn_phonemizer":
if BN_Phonemizer is None: if BN_Phonemizer is None:

View File

@ -65,10 +65,6 @@ dependencies = [
# Coqui stack # Coqui stack
"coqui-tts-trainer>=0.1", "coqui-tts-trainer>=0.1",
"coqpit>=0.0.16", "coqpit>=0.0.16",
# Korean
"hangul_romanize",
"jamo",
"g2pkk>=0.1.1",
# Gruut + supported languages # Gruut + supported languages
"gruut[de,es,fr]==2.2.3", "gruut[de,es,fr]==2.2.3",
# Tortoise # Tortoise
@ -114,6 +110,12 @@ bn = [
"bnnumerizer", "bnnumerizer",
"bnunicodenormalizer", "bnunicodenormalizer",
] ]
# Korean
ko = [
"hangul_romanize",
"jamo",
"g2pkk>=0.1.1",
]
# Japanese # Japanese
ja = [ ja = [
"mecab-python3", "mecab-python3",
@ -127,11 +129,11 @@ zh = [
] ]
# All language-specific dependencies # All language-specific dependencies
languages = [ languages = [
"coqui-tts[bn,ja,zh]", "coqui-tts[bn,ja,ko,zh]",
] ]
# Installs all extras (except dev and docs) # Installs all extras (except dev and docs)
all = [ all = [
"coqui-tts[notebooks,server,bn,ja,zh]", "coqui-tts[notebooks,server,bn,ja,ko,zh]",
] ]
[project.urls] [project.urls]