KittenTTS:不到25MB的最先进TTS,可在CPU上运行

KittenTTS以最小25MB的模型提供高质量文本转语音,完全在CPU上运行。了解如何使用它、其API以及它对边缘AI的重要性。

KittenTTS:不到25MB的最先进TTS,可在CPU上运行

文本转语音(TTS)传统上是一项重量级任务。大多数生产级模型需要GPU、数百兆字节的权重以及复杂的推理管道。这就是为什么KittenTTS如此令人耳目一新:它是一个基于ONNX的开源TTS库,以最小25MB(int8量化)的模型提供高质量语音合成,并且完全在CPU上运行。无需GPU。

凭借GitHub上15.3k颗星和不断增长的社区,KittenTTS证明了边缘可部署的TTS不仅可能,而且实用。在这篇文章中,我们将深入探讨它的特别之处、如何开始使用,以及如何将其集成到您自己的项目中。

为什么TTS中大小很重要

如今大多数TTS模型都非常庞大。例如,一些流行的神经TTS系统超过1GB,并且需要支持CUDA的GPU才能进行实时推理。这使得它们不适用于:

  • 边缘设备,如树莓派、物联网网关或手机
  • 无服务器函数,内存限制严格
  • 桌面应用,需要轻量级发布
  • 实时应用,延迟和资源使用很重要

KittenTTS通过提供从15M到80M参数的模型来扭转这一局面,磁盘大小从25MB到80MB不等。最小的变体kitten-tts-nano int8仅为25MB——小到几乎可以嵌入任何应用程序。

基于ONNX实现CPU高效运行

KittenTTS基于**ONNX(开放神经网络交换)**构建,这意味着模型针对各种硬件进行了推理优化。该库使用ONNX Runtime,该运行时针对CPU执行进行了高度优化。这是一个关键的设计选择:它使KittenTTS能够在没有GPU的机器上高效运行,从而使其可供更广泛的受众使用。

如果您愿意,甚至可以在GPU上运行它,只需安装GPU依赖项并指定backend="cuda"。但默认的CPU路径速度惊人。

可用模型

KittenTTS v0.8提供四种模型变体:

模型 参数 大小 Hugging Face ID
kitten-tts-mini 80M 80 MB KittenML/kitten-tts-mini-0.8
kitten-tts-micro 40M 41 MB KittenML/kitten-tts-micro-0.8
kitten-tts-nano 15M 56 MB KittenML/kitten-tts-nano-0.8
kitten-tts-nano (int8) 15M 25 MB KittenML/kitten-tts-nano-0.8-int8

注意:一些用户报告了int8变体的问题。如果您遇到问题,维护者请您在GitHub上打开一个问题。

快速开始

入门很简单。首先,通过pip安装库:

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

然后,生成您的第一个语音样本:

from kittentts import KittenTTS

model = KittenTTS("KittenML/kitten-tts-mini-0.8")
audio = model.generate("This high-quality TTS model runs without a GPU.", voice="Jasper")

import soundfile as sf
sf.write("output.wav", audio, 24000)

就这样。您现在有了一个包含自然语音的WAV文件,完全在CPU上生成。

高级用法

KittenTTS让您对合成进行细粒度控制:

# 调整语速(默认:1.0)
audio = model.generate("Hello, world.", voice="Luna", speed=1.2)

# 直接保存到文件
model.generate_to_file("Hello, world.", "output.wav", voice="Bruno", speed=0.9)

# 列出可用语音
print(model.available_voices)
# ['Bella', 'Jasper', 'Luna', 'Bruno', 'Rosie', 'Hugo', 'Kiki', 'Leo']

如果您有GPU,也可以使用:

pip install -r requirements_gpu.txt
m = KittenTTS("KittenML/kitten-tts-mini-0.8", backend="cuda")

文本规范化:隐藏的瑰宝

最被低估的功能之一是内置的文本规范化管道。它处理数字、货币、单位、日期、时间等。这对于从原始文本生成自然语音至关重要。

from kittentts import normalize_text

normalized = normalize_text("Dr. Rivera paid $12.50 at 3:05 p.m.")
# "Doctor Rivera paid twelve dollars and fifty cents at three oh five p m."

您还可以获取规范化片段的字符跨度,这对于对齐或高亮非常有用:

result = normalize_text("Fig. 2", return_spans=True)
print(result.text)
print(result.spans)

这大大节省了时间,因为文本规范化通常是TTS管道中的痛点。

API参考

KittenTTS(model_name, cache_dir=None)

从Hugging Face Hub加载模型。

  • model_name (str):Hugging Face仓库ID。默认:"KittenML/kitten-tts-nano-0.8"
  • cache_dir (str, 可选):用于缓存下载模型文件的本地目录。

model.generate(text, voice, speed, clean_text)

从文本合成语音,返回24 kHz音频样本的NumPy数组。

  • text (str):要合成的输入文本
  • voice (str):语音名称(默认:"expr-voice-5-m"
  • speed (float):语速倍数(默认:1.0)
  • clean_text (bool):预处理文本(展开数字、货币等)(默认:False)

model.generate_to_file(text, output_path, voice, speed, sample_rate, clean_text)

合成语音并直接写入音频文件。

  • text (str):要合成的输入文本
  • output_path (str):保存音频文件的路径
  • voice (str):语音名称
  • speed (float):语速倍数(默认:1.0)
  • sample_rate (int):音频采样率,单位Hz(默认:24000)
  • clean_text (bool):预处理文本(默认:True)

normalize_text(text, locale="en-US", return_spans=False)

规范化文本以用于TTS,而不生成音频。

model.available_voices

返回可用语音名称列表:['Bella', 'Jasper', 'Luna', 'Bruno', 'Rosie', 'Hugo', 'Kiki', 'Leo']

系统要求

  • 操作系统:Linux、macOS或Windows
  • Python:3.8或更高版本
  • 硬件:仅CPU(GPU可选)
  • 磁盘空间:25-80 MB,取决于模型变体

建议使用虚拟环境以避免依赖冲突。

路线图和社区

该项目正在积极开发中。路线图包括:

  • 发布优化推理引擎
  • 发布移动SDK
  • 发布更高质量的TTS模型
  • 发布多语言TTS
  • 发布KittenASR(自动语音识别)

您可以在Discord加入社区,或访问kittenml.com。如需商业支持,包括自定义语音和企业许可,请联系[email protected]

许可证

KittenTTS根据Apache License 2.0许可,允许个人和商业使用。

最后想法

KittenTTS在TTS领域取得了显著成就。它证明了您不需要GPU集群来生成自然语音。凭借其小巧的体积、CPU友好的推理和简洁的API,它是边缘应用、桌面软件以及任何资源受限项目的绝佳选择。

如果您正在构建语音助手、辅助工具,或者只是想在不增加开销的情况下为您的应用添加语音功能,请尝试KittenTTS。25MB的模型是一个游戏规则改变者。

尝试实时演示,请访问Hugging Face Spaces,亲自听听。

来源

KittenML/KittenTTS: State-of-the-art TTS model under 25MB 😻