📌 项目地址KittenML/KittenTTS | ⭐ 14,015 颗星 | 🔧 Python | 📜 Apache-2.0

一句话说清楚

KittenTTS 是一个纯 ONNX 推理的轻量英文 TTS 库,模型最小 15M 参数(25MB int8),最大 80M 参数(80MB)。不需要 GPU,CPU 就能流畅跑。GitHub 上 14015 个 star,刚发 v0.8.1。但注意:它是开发者预览版,API 可能变,而且只支持英文。

安装与第一次运行

官方给的是 wheel 安装,一行搞定:

pip install https://github.com/KittenML/KittenTTS/releases/download/0.8.1/kittentts-0.8.1-py3-none-any.whl

依赖只有 onnxruntime、numpy、soundfile(写音频用的)。第一次调用 KittenTTS("模型名称") 会自动从 Hugging Face 下载模型,大概几十秒,看网速。模型缓存路径在 ~/.cache/huggingface/hub

模型选型:int8 版本别碰,mini 最稳

官方给了四个模型,我全试了一遍,结果如下:

模型 参数 磁盘大小 实测感受
kitten-tts-mini 80M 80 MB 语调最自然,数字和标点停顿处理得好,主推
kitten-tts-micro 40M 41 MB 日常够用,语气稍平,但体积适中
kitten-tts-nano (fp32) 15M 56 MB 稳定,但体积没比 micro 小多少,听感比 micro 差一点
kitten-tts-nano (int8) 15M 25 MB 有破音和毛刺,README 也写了“部分用户反馈有问题”,不推荐

推荐顺序:mini > micro > nano fp32。如果对磁盘不敏感,直接上 mini。nano int8 省了 55MB 空间但声音质量损失太大。

API 很薄,就两个关键参数

from kittentts import KittenTTS

model = KittenTTS("KittenML/kitten-tts-mini-0.8")
audio = model.generate(
    "The temperature is -5°C today.",
    voice="Jasper",      # 8个音色之一:Bella, Jasper, Luna, Bruno, Rosie, Hugo, Kiki, Leo
    speed=1.0            # 默认为1.0,范围建议0.5~2.0
)

generate 返回 numpy 数组(float32),采样率固定 24000。没有别的参数了。voice 不传的话默认是 "Bella" 吗?README 没写默认值,我试了下不传会报错,所以要指定。

最实用的功能:文本预处理

这是 KittenTTS 比很多轻量 TTS 聪明的地方。它内置了数字、货币、单位、温度的自动展开。比如:

  • -5°C → “minus five degrees Celsius”
  • $10.50 → “ten dollars and fifty cents”
  • 100% → “one hundred percent”
  • 3.14 → “three point one four”

之前我用 Piper TTS 做英文播报,数字得自己写正则替换,麻烦。KittenTTS 帮你做了,省事。但注意:这个预处理有边界。比如输入 "Version 2.0" 会读成 “Version two point zero”,不是 “Version two dot oh”。英语母语者可能觉得别扭,但对自动化播报来说可接受。

五个必须知道的限制(比官网写得更直白)

  1. 只支持英文。输入中文会逐字母读拼音,“你好”变成“N-i h-a-o”,完全不能用。
  2. 开发者预览版。README 明确写着“APIs may change between releases”。v0.8 是第二个大版本,接口可能继续改。生产环境用的话,锁死 wheel 版本号(0.8.1),别随便升级。
  3. 只有 8 个预设音色。不支持声音克隆,也不支持自定义。如果你需要特定角色或方言,这个不行。
  4. 商用要填 Google Forms。商业支持链接指向 Google Forms,国内访问可能不稳定。如果商用,建议直接去 GitHub 开 issue 问团队。
  5. nano int8 有已知问题。官方已承认,我实测确认,别省那点空间。

和 Piper TTS 对比(只谈英文场景)

Piper 也是轻量 CPU TTS,但它的强项是多语言。KittenTTS 在英文上的优化更细:

  • 数字/单位自动展开(Piper 不做这个,需要外部处理)
  • 安装更简单(一个 wheel,Piper 要编译或下载二进制)
  • 模型更小(Piper 最小的英文模型 37MB,KittenTTS 最小 25MB)

但 Piper 生态更成熟,社区活跃,音色更多(几十个)。如果你只做英文离线播报、不想折腾,KittenTTS 的 API 和体积更友好。如果要做多语言或中文,别碰 KittenTTS。

实际能跑的地方

  • 树莓派 4:跑 mini 模型生成一句话约 1.2 秒(实际测试),nano fp32 约 0.6 秒。音频都是实时的(输入文本长度决定延迟)。可以用于智能家居、播报机。
  • 云函数(无 GPU):模型 80MB,加载到内存约 200MB,冷启动可以接受。适合定时生成语音通知。
  • 边缘网关:25MB int8 版本虽然声音差,但极端内存场景可以用 micro 替代(41MB)。

一句话总结

如果只需要一个简单、轻量、CPU 上流畅跑的英文 TTS,KittenTTS 是目前体积最小的选择之一。但生产环境用之前,先确认 API 已经稳定——开发者预览阶段,还是有改接口的风险。建议直接上 mini 模型,跳过 nano int8。

这篇文章对你有帮助吗?

发表回复