轻量级本地 TTS Kokoro-82M 完整部署教程
2026/7/30·2 views
一、方案简介
Kokoro-82M 是 hexgrad 开源的纯CPU可运行轻量级语音合成模型,完美适配个人开发者、小型团队离线语音需求:
核心优势
- 超轻量:仅82M参数,模型文件165MB,普通笔记本/树莓派均可运行,无需GPU
- 商用免费:Apache 2.0开源协议,无版权费用,可商用
- 中文优化:内置8种中文音色(4男4女),多音字识别准确,24kHz高清采样
- 离线本地:全程不依赖云端API,隐私可控
- 多语言支持:中、英、日、韩等8种语言一键切换
8种中文音色对照表
| 音色ID | 性别 | 音色风格 | 适用场景 |
|---|---|---|---|
| zf_xiaobei | 女 | 温柔甜美 | 有声书、客服语音 |
| zf_xiaoni | 女 | 清亮活泼 | 短视频、短视频配音 |
| zf_xiaoxiao | 女 | 成熟稳重 | 新闻播报、旁白 |
| zf_xiaoyi | 女 | 专业正式 | 教程、教学讲解 |
| zm_yunjian | 男 | 青春活力 | 游戏NPC、年轻解说 |
| zm_yunxi | 男 | 温柔细腻 | 有声小说、情感朗读 |
| zm_yunxia | 男 | 成熟稳重 | 企业宣传片 |
| zm_yunyang | 男 | 浑厚有力 | 纪录片、广播旁白 |
二、硬件&环境前置要求
硬件最低配置
- 磁盘:≥2GB空闲空间(模型+依赖库)
- 内存:推荐4GB以上,2GB可勉强运行(长文本易内存溢出)
- 处理器:普通x86/ARM(树莓派4B及以上均可)
软件环境
- Python 3.9 ~ 3.12(不支持3.13+高版本)
- Windows/Linux/MacOS 全平台兼容
三、分步安装教程
步骤1:创建虚拟环境(推荐,避免依赖冲突)
bash
# 创建虚拟环境
python -m venv kokoro-env
# Windows激活环境
kokoro-env\Scripts\activate
# Linux/Mac激活环境
source kokoro-env/bin/activate
步骤2:一键安装核心依赖
bash
# 主模型包 + 中文分词音素库(必装)
pip install kokoro misaki[zh] soundfile
kokoro:TTS合成核心管线misaki[zh]:中文专用分词、多音字、音素转换引擎(无此库无法处理中文)soundfile:用于导出wav音频文件
步骤3:模型权重下载(两种方式任选其一)
方式A:代码自动下载(最简单,新手推荐)
运行代码初始化管线时,会自动从HuggingFace下载165MB中文模型,无需手动操作。
方式B:命令行手动下载(网络较差时使用)
bash
# 安装下载工具
pip install huggingface-hub
# 拉取中文模型到本地文件夹
huggingface-cli download hexgrad/Kokoro-82M-v1.1-zh --local-dir ./kokoro-zh
国内下载慢解决方案:配置hf镜像
export HF_ENDPOINT=https://hf-mirror.com(Linux/Mac)
四、基础运行代码(复制即用)
示例1:最简快速生成音频
python
from kokoro import KPipeline
import soundfile as sf
# 初始化中文管线 lang_code='z'=中文
pipeline = KPipeline(lang_code='zh')
# 待合成文本
text = "关注公众号奥德元,一起学习AI,一起追赶时代。"
# 选择音色 zm_yunyang浑厚男声 / zf_xiaoxiao成熟女声
generator = pipeline(text, voice="zm_yunyang")
# 遍历生成分段音频并保存
for idx, (grapheme, phoneme, audio_data) in enumerate(generator):
sf.write(f"output_{idx}.wav", audio_data, 24000)
print("语音合成完成,文件已保存!")
示例2:完整标准测试代码(适配所有版本,修复张量维度问题)
python
from kokoro import KPipeline
import soundfile as sf
import numpy as np
import torch
def tts_test():
# 初始化中文管道
pipeline = KPipeline(lang_code='zh')
text = "今天天气晴转多云,最高25度,最低18度,适合出门。"
generator = pipeline(text, voice='zf_xiaoyi')
result = next(generator)
# 提取音频张量并转换格式
audio_tensor = result.output.audio
audio_numpy = audio_tensor.detach().cpu().numpy()
# 统一维度适配soundfile
if audio_numpy.ndim == 1:
audio_numpy = audio_numpy.reshape(-1, 1)
sample_rate = 24000
sf.write("weather.wav", audio_numpy, sample_rate)
print(f"音频保存成功!采样率:{sample_rate}Hz")
print(f"文本:{result.graphemes}")
if __name__ == "__main__":
tts_test()
五、实战场景完整代码
场景1:树莓派定时本地天气播报(无网络依赖)
python
from kokoro import KPipeline
import soundfile as sf
import os
pipeline = KPipeline(lang_code='zh')
def speak_weather():
text = "今日天气晴转多云,最高温度25度,最低温度18度,微风。"
gen = pipeline(text, voice='zf_xiaoyi')
for _, _, audio in gen:
sf.write("weather_notice.wav", audio, 24000)
# Linux播放音频
os.system("aplay weather_notice.wav")
speak_weather()
场景2:批量TXT小说转有声书
python
from kokoro import KPipeline
import soundfile as sf
import os
pipeline = KPipeline(lang_code='zh')
def generate_audiobook(txt_path, out_dir, voice="zf_xiaoxiao"):
os.makedirs(out_dir, exist_ok=True)
with open(txt_path, "r", encoding="utf-8") as f:
full_text = f.read()
# 按段落拆分,防止长文本内存溢出
paragraphs = full_text.split("\n")
for p_idx, para in enumerate(paragraphs):
if not para.strip():
continue
gen = pipeline(para, voice=voice)
for seg_idx, (_, _, audio) in enumerate(gen):
save_path = f"{out_dir}/chapter_{p_idx:03d}_{seg_idx}.wav"
sf.write(save_path, audio, 24000)
print(f"已完成段落 {p_idx+1}/{len(paragraphs)}")
# 调用,将novel.txt批量转为音频
generate_audiobook("novel.txt", "audio_book_output")
场景3:中英日多语言切换示例
python
# 中文
zh_pipe = KPipeline(lang_code="zh")
zh_audio = zh_pipe("你好,世界", voice="zf_xiaoxiao")
# 英语
en_pipe = KPipeline(lang_code="en")
en_audio = en_pipe("Hello World", voice="af_sarah")
# 日语(需额外安装misaki[ja])
# pip install misaki[ja]
ja_pipe = KPipeline(lang_code="ja")
ja_audio = ja_pipe("こんにちは世界", voice="jf_sarah")
六、关键注意事项&排坑指南
- 模型首次下载慢
配置HuggingFace国内镜像加速:bash# Windows cmd set HF_ENDPOINT=https://hf-mirror.com # Linux/Mac export HF_ENDPOINT=https://hf-mirror.com - 内存溢出(长文本)
不要一次性传入上万字文本,必须按段落、句子拆分分批合成。 - 音频格式转换
原生输出24kHz wav,如需16kHz/MP3可用ffmpeg转换:bash# wav转16kHz ffmpeg -i input.wav -ar 16000 output_16k.wav # wav转mp3 ffmpeg -i input.wav output.mp3 - 多音字发音错误
专业词汇多音字异常时,可手动传入phonemes参数强制指定发音修正。 - Linux缺失espeak-ng警告
执行安装:sudo apt install espeak-ng - Windows找不到库报错
手动下载espeak-ng,配置系统环境变量指向dll文件。
七、官方资源汇总
| 资源 | 访问地址 |
|---|---|
| GitHub源码 | https://github.com/hexgrad/kokoro |
| 中文模型权重 | https://huggingface.co/hexgrad/Kokoro-82M-v1.1-zh |
| 在线试听网页 | https://kokoroweb.app |
| PyPI包 | https://pypi.org/project/kokoro |
八、生产环境优化建议
- 文本预处理:过滤特殊符号、统一中英文标点,减少合成异常
- 音频归一化:使用librosa统一音量,避免段落音量忽大忽小
- 缓存管线:全局仅初始化一次
KPipeline,不要循环重复加载(大幅提速) - 封装API:搭配FastAPI搭建本地TTS接口,供其他程序调用
- 嵌入式部署:树莓派部署时使用swap分区,缓解内存不足问题
商用&版权说明
Kokoro-82M 采用 Apache 2.0 协议,个人/企业均可免费商用,无需付费、无调用次数限制,本地离线部署不存在数据上传隐私风险。