Tortoise 是一个文本转语音程序,其设计遵循以下优先级:
此仓库包含了以推理模式运行 Tortoise TTS 所需的所有代码。
论文:https://arxiv.org/abs/2305.07243
Hugging Face Spaces 上托管了一个实时演示。如果您想避免排队,请复制该 Space 并添加 GPU。请注意,仅 CPU 的空间无法运行此演示。
https://huggingface.co/spaces/Manmay/tortoise-tts
pip install tortoise-tts
如果您想安装最新的开发版本,也可以直接从 git 仓库安装:
pip install git+https://github.com/neonbjb/tortoise-tts
我将与语音相关的仓库以莫哈韦沙漠的动植物命名。Tortoise(乌龟)有点自嘲的意味:这个模型非常慢。它同时利用了自回归解码器和扩散解码器;两者都以低采样率著称。在 K80 上,生成一个中等长度的句子预计需要 2 分钟。
嗯……现在没那么慢了!我们可以在 4GB 显存上实现 0.25-0.3 的实时因子,并且通过流式处理,延迟可以低于 500 毫秒!!!
查看此页面获取大量示例输出。
一个很酷的 Tortoise + GPT-3 应用(与此仓库无关):https://twitter.com/lexman_ai。遗憾的是,该项目似乎已不再活跃。
如果你想在自己的电脑上使用,必须有一块 NVIDIA GPU。
[!TIP]
在 Windows 上,我强烈推荐使用 Conda 安装方法。据我所知,如果不这样做,你将花费大量时间解决依赖问题。
首先,安装 miniconda:https://docs.conda.io/en/latest/miniconda.html
然后使用 anaconda prompt 作为终端(或任何其他配置为与 conda 配合使用的终端)运行以下命令。
这将:
1. 创建一个包含指定最小依赖项的 conda 环境。
2. 激活该环境。
3. 按照 https://pytorch.org/get-started/locally/ 提供的命令安装 pytorch。
4. 克隆 tortoise-tts 仓库。
5. 将当前目录切换到 tortoise-tts。
6. 运行 tortoise 的 python setup 安装脚本。
conda create --name tortoise python=3.9 numba inflect
conda activate tortoise
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
conda install transformers=4.29.2
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
python setup.py install
可选地,可以将 pytorch 安装在基础环境中,以便其他 conda 环境也能使用。为此,只需在激活 tortoise 环境之前执行 conda install pytorch... 这一行命令。
[!NOTE]
当你想要使用 tortoise-tts 时,必须确保tortoiseconda 环境已激活。
如果你在 Windows 上,可能还需要安装 pysoundfile:conda install -c conda-forge pysoundfile
这是一个快速上手的好方法,也是根据你的用例进行调整的良好起点。
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
docker build . -t tts
docker run --gpus all \
-e TORTOISE_MODELS_DIR=/models \
-v /mnt/user/data/tortoise_tts/models:/models \
-v /mnt/user/data/tortoise_tts/results:/results \
-v /mnt/user/data/.cache/huggingface:/root/.cache/huggingface \
-v /root:/work \
-it tts
这将为你提供一个交互式终端,环境已准备就绪,可以进行文本转语音。现在你可以探索 tortoise 为 TTS 提供的不同接口。
例如:
cd app
conda activate tortoise
time python tortoise/do_tts.py \
--output_path /results \
--preset ultra_fast \
--voice geralt \
--text "Time flies like an arrow; fruit flies like a bananna."
在 macOS 13+ 且使用 M1/M2 芯片的电脑上,你需要安装 PyTorch 的 nightly 版本,正如官方页面所述,你可以这样做:
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
请确保在激活环境后执行此操作。如果你不使用 conda,命令将如下所示:
python3.10 -m venv .venv
source .venv/bin/activate
pip install numba inflect psutil
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
pip install transformers
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
pip install .
请注意,DeepSpeed 在 Apple Silicon 上被禁用,因为它无法工作。标志 --use_deepspeed 将被忽略。
你可能需要在下面的命令前加上 PYTORCH_ENABLE_MPS_FALLBACK=1 才能使它们正常工作,因为 MPS 不支持 PyTorch 中的所有操作。
此脚本允许你使用一个或多个语音说出一句话。
python tortoise/do_tts.py --text "I'm going to speak this" --voice random --preset fast
```socket server
python tortoise/socket_server.py
将在端口 5000 监听
### 更快的推理 read.py
此脚本提供了朗读大量文本的工具。
```shell
python tortoise/read_fast.py --textfile <你的待朗读文本文件> --voice random
此脚本提供了朗读大量文本的工具。
python tortoise/read.py --textfile <你的待朗读文本文件> --voice random
这会将文本文件分解成句子,然后逐个转换为语音。它将在生成时输出一系列语音片段。所有片段生成后,它会将它们合并成一个单独的文件并输出。
有时 Tortoise 会搞砸输出。你可以通过使用 --regenerate 参数重新运行 read.py 来重新生成任何有问题的片段。
Tortoise 可以以编程方式使用,如下所示:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech()
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
使用 deepspeed:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(use_deepspeed=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
使用 kv 缓存:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(kv_cache=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
以 float16 运行模型:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(half=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
为了更快的运行速度,可以同时使用以下三项:
reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(use_deepspeed=True, kv_cache=True, half=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')
这个项目获得的赞誉超出了我的预期。然而,我是站在巨人的肩膀上,我想感谢社区中一些了不起的人,他们帮助实现了这一切:
Tortoise 完全由作者(James Betker)使用其个人硬件构建。其雇主未参与 Tortoise 开发的任何方面。
Tortoise TTS 采用 Apache 2.0 许可证授权。
如果你在研究中使用此仓库或其思想,请引用它!bibtex 条目可以在 GitHub 的右侧面板中找到。