项目地址
https://github.com/kyutai-labs/pocket-tts/blob/main/README.md
项目简介
一个轻量级的文本转语音(TTS)应用,设计为在CPU上高效运行。无需再为使用GPU和提供TTS模型的Web API而烦恼。使用Kyutai的Pocket TTS,生成音频只需通过pip安装并进行一次函数调用即可。
支持 Python 3.10, 3.11, 3.12, 3.13 和 3.14。需要 PyTorch 2.5+。不需要PyTorch的GPU版本。
主要特点
- 在CPU上运行
- 模型体积小,1亿参数
- 音频流式处理
- 低延迟,约200毫秒获取首个音频块
- 比实时更快,在MacBook Air M4的CPU上约6倍实时速度
- 仅使用2个CPU核心
- Python API 和 CLI
- 语音克隆
- 目前仅支持英语
- 可处理无限长文本输入
- 可在浏览器客户端运行[1]
通过网站试用,无需安装任何软件
访问 Kyutai 网站[2] 直接在您的浏览器中试用。您可以输入文本,选择不同的声音,并生成语音,无需任何安装。
通过CLI试用
generate 命令
您可以直接从命令行使用pocket-tts。我们推荐使用 uv,因为它会在隔离环境中即时安装任何依赖项(uv安装说明在此[3])。 您也可以使用 pip install pocket-tts 手动安装。
这将生成一个wav文件 ./tts_output.wav,使用默认语音说出默认文本,并显示一些速度统计信息。
uvx pocket-tts generate
# 或者,如果您已通过pip手动安装:
pocket-tts generate
使用 --voice 修改语音,使用 --text 修改文本。我们提供了一个小型语音目录。
您可以查看此页面[4],其中详细说明了每个语音的许可证信息。
- alba[5]
- marius[6]
- javert[7]
- jean[8]
- fantine[9]
- cosette[10]
- eponine[11]
- azelma[12]
--voice 参数也可以接受一个普通的wav文件作为语音克隆的输入。 您可以使用自己的文件,或者查看我们的语音仓库[13]。 我们建议在使用Pocket TTS之前清理样本[14],因为样本的音频质量也会被复现。
请随时查阅生成文档[15]以获取更多详细信息和示例。 若要快速尝试多种语音和提示,建议使用 serve 命令。
serve 命令
您也可以运行一个本地服务器,通过HTTP请求生成音频。
uvx pocket-tts serve
# 或者,如果您已通过pip手动安装:
pocket-tts serve
访问 http://localhost:8000 以尝试Web界面,这比命令行更快,因为模型在请求之间保留在内存中。
您可以查看服务文档[16]以获取更多详细信息和示例。
export-voice 命令
处理音频文件(例如.wav或.mp3)以进行语音克隆相对较慢,但加载safetensors文件(从音频文件转换而来的语音嵌入)非常快。您可以使用 export-voice 命令进行此转换。请参阅导出语音文档[17]以获取更多详细信息和示例。
作为Python库使用
您可以在Colab上尝试Python库此处[18]。
安装包:
pip install pocket-tts
# 或者
uv add pocket-tts
您可以将此包用作一个简单的Python库,从文本生成音频。
from pocket_tts import TTSModel
import scipy.io.wavfile
tts_model = TTSModel.load_model()
voice_state = tts_model.get_state_for_audio_prompt(
"alba" # 预设语音之一,见上文
# 您也可以使用您本地或来自Hugging Face的任何语音文件:
# "./some_audio.wav"
# 或 "hf://kyutai/tts-voices/expresso/ex01-ex02_default_001_channel2_198s.wav"
)
audio = tts_model.generate_audio(voice_state, "Hello world, this is a test.")
# Audio 是一个包含PCM数据的一维torch张量。
scipy.io.wavfile.write("output.wav", tts_model.sample_rate, audio.numpy())
如果您有多个想要使用的语音,可以拥有多个语音状态。 load_model() 和 get_state_for_audio_prompt() 是相对较慢的操作,因此我们建议尽可能将模型和语音状态保存在内存中。
您可以查看Python API文档[19]以获取更多详细信息和示例。
不支持的功能
目前,我们暂不支持(但欢迎添加这些功能的拉取请求):
- 在Web浏览器(WebAssembly)内运行TTS[20]
- 编译版本,例如使用
torch.compile()或candle。[21] - 在文本输入中添加静音以生成停顿。[22]
- 量化以在int8中运行计算。[23]
我们尝试在GPU上运行此TTS模型,但未观察到与CPU执行相比的速度提升,主要是因为我们的批次大小为1且模型非常小。
开发与本地设置
我们接受贡献!欢迎在GitHub上提交issue或拉取请求。
您可以在 CONTRIBUTING.md[24] 文件中找到开发说明。您还可以在那里找到如何为本地开发进行包的可编辑安装。
浏览器端实现
Pocket TTS 体积足够小,可以直接在您的浏览器中以WebAssembly/JavaScript运行。 我们尚未正式支持此功能,但您可以尝试以下这些社区实现:
- babybirdprd/pocket-tts[25]:Candle版本(Rust),带有WebAssembly和PyO3绑定,意味着它也可以在Web上运行。
- ekzhang/jax-js[26]:使用jax-js,一个用于Web的ML库。演示在此[27]
- KevinAHM/pocket-tts-onnx-export[28]:模型导出为.onnx,并使用 ONNX Runtime Web[29] 运行。演示在此[30]
使用 Pocket TTS 的项目
- lukasmwerner/pocket-reader[31] - 浏览器屏幕阅读器
- ikidd/pocket-tts-wyoming[32] - 使用Wyoming协议的pocket-tts Docker容器,适用于Home Assistant语音使用。
回复