如何本地部署轻量级TTS新选择Kokoro-82M?

摘要:对于个人开发者和小型团队来说,一个理想的TTS方案应该满足三个条件:轻量到能在CPU上跑、免费可商用、效果足够自然。
一、前言 你是否遇到过这样的场景:想给项目添加语音合成功能,却被各种问题困扰——要么模型太大动辄几GB,要么必须依赖GPU云端API,要么商用授权一团糟。 对于个人开发者和小型团队来说,一个理想的TTS方案应该满足三个条件:轻量到能在CPU上跑、免费可商用、效果足够自然。 今天要介绍的 Kokoro-82M,就是这样一款满足所有条件的神器。它只有82M参数,却能输出相当自然的中文语音;体积小巧到只需几百MB,却支持8种不同音色。更重要的是——它完全开源,Apache 2.0许可,零成本商用。 二、方案介绍 概念 定义 Kokoro-82M 由 hexgrad 开发的轻量级TTS模型,仅82M参数,支持8种中文音色 ONNX优化 模型经过ONNX优化,可在CPU上高效推理,无需GPU 语音管道(Pipeline) Kokoro 的核心API,负责分词、音素转换、语音合成全流程 音色(Voice) 预训练的音色模型,不同音色适合不同场景 为什么选择 Kokoro? 指标 数值 参数规模 82M 模型大小 ~165MB 输出采样率 24kHz 支持语言 中文、英语、日语、韩语等8种 中文音色数 8种(4女4男) 推理设备 CPU / GPU 许可协议 Apache 2.0 对比同级别模型,Kokoro 在中文场景下表现尤为突出——不仅音色自然,而且对中文多音字的处理也相当不错。对于没有GPU的个人开发者来说,这可能是目前最优的中文TTS本地方案。 先实际听一下用kokoro合成的音频 我用kokoro生成了一下奥德元的口号:关注我的公众号:奥德元,一起学习 A I,一起追赶时代。,一个男声,一个女声,大家可以实际听下、感受一下合成的语音的效果。 男声: zm_yunyang: kokoro_zm_yunyang.wav 女声: zf_xiaoxiao:kokoro_zf_xiaoxiao.wav 如果这个声音的效果满意的话,请继续往下看,如果觉得声音不行,就没必要再往下看了。 三、安装与使用 环境要求 Python 3.9 - 3.12 至少 2GB 可用磁盘空间(模型下载) 推荐 4GB+ 内存 安装步骤 第一步:安装 Kokoro 主包 pip install kokoro 第二步:安装中文语音库 pip install misaki[zh] misaki 是 Kokoro 的中文分词器和音素转换器,必须安装才能处理中文文本。 第三步:下载中文模型权重 首次使用需要从 HuggingFace 下载模型: # 安装 huggingface-cli(如未安装) pip install huggingface-hub # 下载中文模型(约165MB) huggingface-cli download hexgrad/Kokoro-82M-v1.1-zh --local-dir ./kokoro-zh 或者直接在Python代码中自动下载: from kokoro import KPipeline # 首次运行时会自动下载模型 pipeline = KPipeline(lang_code='zh') 完整使用示例 from kokoro import KPipeline import soundfile as sf import numpy as np import torch def test(): # 初始化中文管线 pipeline = KPipeline(lang_code='z') # 生成语音 text = "关注我的公众号:奥德元,一起学习 A I,一起追赶时代。" generator = pipeline(text, voice='zm_yunyang') # 获取生成结果 (这是一个 KPipeline.Result 对象) result = next(generator) # --- 核心修改:正确提取音频数据 --- # 1. 访问 result.output.audio 获取 tensor # 根据日志: result.output 是 KModel.Output 对象,里面有个 audio 属性是 tensor audio_tensor = result.output.audio # 2. 将 PyTorch Tensor 转换为 NumPy 数组 # .detach() 移除梯度追踪,.cpu() 确保在CPU内存中,.numpy() 转为 numpy audio_numpy = audio_tensor.detach().cpu().numpy() # 3. 处理维度 # soundfile 需要 (样本数, 通道数) 的二维数组。 # Kokoro 输出的通常是 (样本数,) 的一维数组,我们需要变成 (样本数, 1) if audio_numpy.ndim == 1: audio_numpy = audio_numpy.reshape(-1, 1) # 4. 获取采样率 # Kokoro 的标准采样率通常是 24000,也可以检查是否有属性直接提供 sample_rate = 24000 # 5. 写入文件 sf.write('output.wav', audio_numpy, sample_rate) print(f"音频保存成功!") print(f"音频形状: {audio_numpy.shape}") print(f"采样率: {sample_rate}") print(f"文本内容: {result.graphemes}") if __name__ == '__main__': test() 八种音色一览 音色 ID 性别 风格 推荐场景 zf_xiaobei 女声 温柔甜美 有声书、客服 zf_xiaoni 女声 清亮活泼 短视频配音 zf_xiaoxiao 女声 成熟稳重 新闻播报 zf_xiaoyi 女声 专业正式 教程讲解 zm_yunjian 男声 青春活力 游戏角色 zm_yunxi 男声 温柔细腻 有声小说 zm_yunxia 男声 成熟稳重 企业宣传 zm_yunyang 男声 浑厚有力 纪录片旁白 四、使用场景与案例 场景一:自动化语音播报 需求:树莓派上运行语音助手,需要本地TTS,不依赖网络 方案:Kokoro-82M + Python + 定时任务 # 定时天气播报示例 from kokoro import KPipeline import soundfile as sf pipeline = KPipeline(lang_code='zh') def speak_weather(): text = "今天天气晴转多云,最高温度25度,最低温度18度。" generator = pipeline(text, voice='zf_xiaoyi') for i, (audio, _) in enumerate(generator): sf.write("weather.wav", audio, 24000) # 播放音频(使用 pygame 或其他播放器) # ... speak_weather() 场景二:批量有声书生成 需求:将小说TXT文件批量转换为语音章节 方案:分章节处理 + 多音色可选 from kokoro import KPipeline import soundfile as sf import os pipeline = KPipeline(lang_code='zh') def generate_audiobook(text_file, output_dir, voice='zf_xiaoxiao'): os.makedirs(output_dir, exist_ok=True) with open(text_file, 'r', encoding='utf-8') as f: text = f.read() # 按段落分批处理,避免单次输入过长 paragraphs = text.split('\n') for i, para in enumerate(paragraphs): if not para.strip(): continue generator = pipeline(para, voice=voice) for j, (audio, _) in enumerate(generator): sf.write(f"{output_dir}/chapter_{i:03d}_{j}.wav", audio, 24000) print(f"已处理段落 {i+1}/{len(paragraphs)}") # 使用 generate_audiobook('novel.txt', 'audiobook_output', voice='zf_xiaoxiao') 场景三:多语言应用集成 Kokoro 支持多种语言,一个模型满足多语言需求: # 中文 pipeline_zh = KPipeline(lang_code='zh') generator_zh = pipeline_zh("你好世界", voice='zf_xiaoxiao') # 日语 pipeline_ja = KPipeline(lang_code='ja') generator_ja = pipeline_ja("こんにちは世界", voice='af_sarah') # 英语 pipeline_en = KPipeline(lang_code='en') generator_en = pipeline_en("Hello world", voice='af_sarah') 五、拿走即用 一行命令安装 pip install kokoro misaki[zh] 快速开始 from kokoro import KPipeline import soundfile as sf pipeline = KPipeline(lang_code='zh') generator = pipeline("你好,我是Kokoro!", voice='zf_xiaoxiao') for i, (audio, _) in enumerate(generator): sf.write(f"hello_{i}.wav", audio, 24000) 相关资源 资源 链接 GitHub 仓库 https://github.com/hexgrad/kokoro 中文模型 https://huggingface.co/hexgrad/Kokoro-82M-v1.1-zh 在线体验 https://kokoroweb.app Python 包 https://pypi.org/project/kokoro 六、注意事项 首次下载:模型权重约165MB,确保网络稳定。如果下载慢,可以尝试使用国内镜像源。 内存占用:虽然可以在CPU上运行,但建议至少有4GB可用内存。处理长文本时分批处理可以避免内存溢出。 音频后处理:Kokoro 输出24kHz WAV格式,如需其他格式(如16kHz用于语音识别),可用 ffmpeg 转换: ffmpeg -i input.wav -ar 16000 output_16k.wav 多音字处理:中文多音字处理依赖 misaki 库,对于一些专业术语可能出现发音错误,可用拼音标注修正: # 使用 phonemes 参数手动指定发音 generator = pipeline(text, voice='zf_xiaoxiao', phonemes=None) 批量生产建议:正式项目中使用时,建议: 预处理文本(去除特殊字符、统一标点) 分章节保存音频 添加音量归一化处理 七、预告:下一期 下一期我们将介绍另一款热门TTS模型——MeloTTS。 MeloTTS 是由 MIT 和 MyShell.ai 联合开发的高质量多语言TTS库,支持英语、中文、日语、韩语等多种语言,最大的特点是CPU实时推理能力强,且支持中英混合文本。 敬请期待! 八、广而告之 关注我的公众号:奥德元 一起学习AI,一起追赶时代! 新建了一个AI技术交流群,欢迎大家一起加入讨论。 扫码加入AI技术交流群(微信) 若需联系作者,请加微信:oddmeta