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,亲自听听。