简要介绍
MeloTTS 是一个强大的多语言文本转语音库,特别设计以支持CPU环境下的实时语音合成,无需依赖GPU。该库能够输出自然流畅的语音,提供了一种高效便捷的方式,将文本信息转换为听觉内容。MeloTTS不仅支持多种语言,包括英语、西班牙语、法语、中文、日语和韩语,还能处理混合语言文本,如含有英语单词的中文文本。此外,用户还可以根据需求调整语速,选择不同的发音口音,如美式英语、英式英语、印度英语和澳大利亚英语
🎖︎主要功能
- 国际化语言覆盖:MeloTTS具备广泛的多语言能力,能够将文本转换为语音,涵盖英语(细分为美式、英式、印度及澳大利亚口音)、西班牙语、法语、中文、日语和韩语等多个语种,满足全球多语境应用需求。
- 中英混读优化:针对中文环境,特别强化了中英文混合文本的发音处理能力,有效应对跨语言交流场景中的英文词汇嵌入问题,提升了实用性与准确性。
- 即时CPU驱动合成:系统经过精心优化,确保即便在缺乏GPU加速的硬件配置下,依旧能够在CPU平台上实现无缝实时的语音合成,增强了其在多样化硬件平台上的部署灵活性与普适性。
- 卓越语音品质:致力于生产清晰流畅、接近真人的语音输出,MeloTTS在所有支持语言中均追求最高标准的自然度与清晰度,确保每一次合成都能达到高品质水平。
- 便捷安装与集成:伴随详尽的安装指南与直观的Python接口,MeloTTS简化了部署流程,用户可快速在Linux系统中完成设置,并通过简洁的编程指令实现文本至语音的快速转换,大大降低了技术门槛。
对于中文支持不足之处在于目前只有一种女生音色,没有其他音色可选
MeloTTS的本地部署支持Docker及代码私有化部署。
本地的运行可以通过Web UI,CLI,Python API三种方式进行运行,本文着重介绍如何通过非Docker模式的Python API使用MeloTTS进行文本转为语音。
前期准备
第一步:拉取MeloTTS仓库
相应操作
值得注意的是使用非Dokcer模式,系统支持需要至少Ubuntu 20.04和Python 3.9
打开终端执行下面的命令
git clone https://github.com/myshell-ai/MeloTTS.git
cd MeloTTS
pip install -e .
python -m unidic download
异常情况
最后的命令python -m unidic download
是需要魔法上网的,如果出现异常报错且没条件魔法上网可以参考下面解决方案
首先查看python安装的库依赖,如果项目采用虚拟环境就进入到项目文件夹下的.venv\Lib\site-packages
文件夹内查看
不采用虚拟环境的python安装的库通常位于python安装目录下的Lib\site-packages
中
查看文件目录中是否有unidec
和unidec_lite
两个文件夹
如果没有则执行pip install unidec
对这两个文件夹内容进行对比能发现unidec_lite
中比uidec
多了一个dicdir
文件夹,复制过来就好了
此举相当于跳过了python -m unidic download
命令完成所需的操作
第二步:下载所需模型
再拉取完项目后,因为我们需要本地化运行相关服务,要将放在Hugging Face上的模型下载到本地。如果可以魔法上网,可以直接跳过这个步骤利用项目本身运行时进行下载。没有魔法上网或想提前下好的可以参考下列步骤。
相应操作
下载内容
首先进入Hugging Face官网
**有魔法上网:**https://huggingface.co/
**没有魔法上网:**https://hf-mirror.com/(这个是Hugging Face的国内镜像)
在搜索框中搜索指定模型进行下载
我们一共需要下载下列模型
- hfl/chinese-roberta-wwm-ext-large
- google-bert/bert-base-multilingual-uncased
- google-bert/bert-base-uncased
- tohoku-nlp/bert-base-japanese-v3
- myshell-ai/MeloTTS-Japanese
- myshell-ai/MeloTTS-Chinese
下载方式
下载方式有多种,可以通过命令行工具下载也可通过网站下载
浏览器下载
以hfl/chinese-roberta-wwm-ext-large
为例,搜索到对应模型进入页面后,点击Files and versions
可以看到所有的模型相关文件列表,将除.gitattributes
和README.md
这两个文件外的所有文件都下载到本地
命令行工具下载
如果想使用命令行工具进行下载我们需要安装一些东西
huggingface-cli是 Hugging Face 官方提供的命令行工具,自带完善的下载功能,下述操作需要魔法上网
1. 安装依赖
pip install -U huggingface_hubCopy
2. 设置环境变量
Linux
export HF_ENDPOINT=https://hf-mirror.comCopy
Windows Powershell
$env:HF_ENDPOINT = "https://hf-mirror.com"Copy
建议将上面这一行写入 ~/.bashrc
。
3.1 下载模型
huggingface-cli download --resume-download hfl/chinese-roberta-wwm-ext-large --local-dir 本地文件夹
3.2 下载数据集(仅作示例介绍,本项目无需使用)
huggingface-cli download --repo-type dataset --resume-download wikitext --local-dir 本地文件夹
下载命令可以添加 --local-dir-use-symlinks False
参数禁用文件软链接,这样下载路径下所见即所得(建议添加)
如果没有魔法上网也别着急
hfd是国内镜像网站开发的 huggingface 专用下载工具,基于成熟工具 git+aria2
,可以做到稳定下载不断线。
相关介绍:https://gist.github.com/padeoe/697678ab8e528b85a2a7bddafea1fa4f
1. 下载hfd
wget https://hf-mirror.com/hfd/hfd.sh
chmod a+x hfd.shCopy
2. 设置环境变量
Linux
export HF_ENDPOINT=https://hf-mirror.comCopy
Windows Powershell
$env:HF_ENDPOINT = "https://hf-mirror.com"Copy
3.1 下载模型
./hfd.sh gpt2 --tool aria2c -x 4Copy
3.2 下载数据集
./hfd.sh wikitext --dataset --tool aria2c -x 4
异常情况
如果出现下面的报错就是没有魔法上网或连接异常,没有办法连接到Hugging Face官网,建议访问国内镜像
第三步 修改MeloTTS源码
这一步操作主要是将原本通过网络仓库ID指向的模型资源转为指向本地下载的模型,彻底完成本地离线部署
- /MeloTTS/melo/api.py
找到上面这段代码,将use_hf=True
改为use_hf=False
。这里意思是取消使用Hugging Face上存放的模型
- /MeloTTS/melo/download_utils.py
找到上面这段代码,找到两个字典中的’ZH’属性,把对应的值改为上一步中下载的MeloTTS-Chinese模型中两个文件对应的文件路径,现在我们只用到了中文,中英混合。后续如果使用其他语言可以自行更改其他属性。
- /MeloTTS/melo/text/init.py
找到上面这段代码,按如图所示进行代码注释。现在我们只用到了中文,中英混合,没有下载其他语言对应的模型文件,所以不需要引用其他语言文件的代码,避免报错。后续如果用使用其他语言,将对应的代码注释解除就好。
- /MeloTTS/melo/text/chinesse_bert.py
找到上面这段代码,将mode_id
的值改为之前下载的hfl/chinese-roberta-wwm-ext-large
模型路径
- /MeloTTS/melo/text/chinese_mix.py
找到上面这两段代码,将mode_id
改为之前下载的google-bert/bert-base-multilingual-uncased
模型路径
- /MeloTTS/melo/text/cleaner.py
在这个文件最开始的代码部分,将上述两个位置的代码修改为如图所示。现在我们只用到了中文,中英混合,所以不需要引用其他语言文件的代码,避免报错。后续如果需要其他语言按原有格式加回就好。
- /MeloTTS/melo/text/english.py
找到上面这段代码,将mode_id
的值改为之前下载的google-bert/bert-base-uncased
模型路径
- /MeloTTS/melo/text/english_bert.py
找到上面这段代码,将mode_id
的值改为之前下载的google-bert/bert-base-uncased
模型路径
- /MeloTTS/melo/text/japanese.py
找到上面这段代码,将mode_id
的值改为之前下载的tohuku-nlp/bert-base-japanese-v3
模型路径
开始运行
写一个简单的test.py
from melo.api import TTS
# 语速
speed = 1.0
# 如果确定电脑有GPU支持cuda可直接写0
# 确定电脑没有GPU支持cuda直接写cpu
# 不确定有没有写auto,交给程序自行判断
device = 'cpu' # or cuda:0
text = "10月22日,我国首个国产移动操作系统——华为原生鸿蒙操作系统正式发布,这也是继苹果iOS和安卓系统后,全球第三大移动操作系统。据介绍,此前已经发布过的鸿蒙系统,由于系统底座仍使用了部分AOSP开放源代码,而不得不兼容部分安卓应用软件。而此次发布的原生鸿蒙,实现了系统底座的全部自研,系统的流畅度、性能、安全特性等提升显著,也实现了国产操作系统的自主可控。"
model = TTS(language='ZH', device=device)
speaker_ids = model.hps.data.spk2id
output_path = 'test.mp3'
model.tts_to_file(text, speaker_ids['ZH'], output_path, speed=speed)
运行异常解决
找不到melo下的某个模块
将所有原本from melo
的地方都改为上图这种格式
连接不上huggingface.co
修改MeloTTS源码部分有步骤遗漏,建议详细检查。如已使用魔法上网请检查魔法上网可行性。
Resource averaged_perceprtron_tagger not found
这部分报错通常由NLTK引起,是nltk加载词性词库报错。一旦缺少可能会缺少若干。我们可以到报错提示中的网页根据指引下载对应的库文件。还有请注意,这个报错会告诉你 searched in 下列目录,意思就是我们需要将下载后的库文件放到任选其一的文件夹目录下,每个人的目录不一定一样哦。
下载文件地址:https://www.nltk.org/nltk_data/(需要魔法上网)
下载文件时不用管名字,只需要文件名下方的ID和需要的匹配上即可
还需要注意的是根据报错信息提示,不仅要在指定目录下存放,而且一定要建立多级
因此在选好目录后需要建nltk_data/taggers/两级文件夹,二级文件夹名称根据报错提示来确定。
TypeError: unsupported operand type(s) for +: ‘ZipFilePathPointer’ and ‘str’
报错翻译是一个对象格式数据和一个字符串无法进行拼接,这个问题通常出现在NLTK库和Linux的关系上。当使用Linux直接运行本项目的时候会产生这样的错误。我们需要将NLTK上下载的zip压缩包进行解压后再放到对应的文件夹里。请注意,要保证解压后的文件夹和压缩包同名,且压缩包和解压后的文件需要同时存在于目录中,否则将同样报错Resource xxx not found
欢迎关注公众号:“全栈开发指南针”
这里是技术潮流的风向标,也是你代码旅程的导航仪!🚀
Let’s code and have fun! 🎉