免费 TTS 方案:国内基于 Docker 部署 Kokoro

本文首发地址 https://h89.cn/archives/528.html
项目方案地址 https://gitee.com/chenjim/tts-hexgrad-kokoro
一款开源、高质量、支持多语言的文本转语音服务,完全免费,可本地部署。

前言

在 AI 语音合成领域,商业 API(如 Azure、AWS Polly)虽然效果出色,但成本较高。而开源方案中,Kokoro-82M 以其轻量级(仅 8200 万参数)和高质量脱颖而出,成为个人开发者和中小企业的理想选择。

本文将详细介绍如何在国内网络环境下,使用 Docker 快速部署 Kokoro TTS 服务。


Kokoro 简介

Kokoro-82M 是由 hexgrad 开发的开源 TTS 模型,具有以下特点:

  • 轻量高效:8200 万参数,推理速度快
  • 音质优秀:媲美大型商业模型
  • 多语言支持:英文(美式/英式)、中文(普通话)、西班牙语、法语、印地语、意大利语、日语、葡萄牙语
  • 多种音色:50+ 种音色,涵盖多种语言和性别
  • 中英混合:支持在中文文本中插入英文单词
  • 时间戳支持:可返回每句话的时间戳,适合字幕生成
  • 完全免费:Apache 许可证,可商用

部署方案

方案对比

方案 优点 缺点
Docker 本地部署(本文) 完全免费、数据隐私、可离线使用 需要本地算力
HuggingFace API 无需部署、即开即用 需要网络、有调用限制
商业 API 稳定性高、效果有保障 按量付费、成本较高

为什么选择 Docker 部署?

  1. 完全免费:无 API 调用费用
  2. 数据隐私:文本和音频都在本地处理
  3. 可离线使用:部署后无需网络连接
  4. 易于扩展:可集成到现有系统中

跟 EmotiVoice、Piper 的对比

如果你也在看开源 TTS,Kokoro网易 EmotiVoicePiper 这三类方案的定位其实不太一样:

方案 主要特点 部署门槛 中文能力 适合场景
Kokoro 轻量、音质好、支持中英混合,本文方案已补好国内镜像和 Docker 部署 低,CPU 即可跑通 中文可用,适合通用配音 本地服务、内容朗读、项目集成
网易 EmotiVoice 中英双语、2000+ 音色、支持情感提示控制,提供 Web 界面和 OpenAI 兼容 API 较高,官方 Docker 体验依赖 NVidia GPU 中文表现强,情感表达更丰富 有声书、角色配音、情绪化语音生成
Piper(OHF-Voice/piper1-gpl) 本地优先、启动快、提供 CLI/HTTP/Python/C++ API,语言覆盖广 低,CPU 友好 有中文音色,但效果更依赖具体 voice 边缘设备、离线播报、Home Assistant 一类场景

简单说:

  • 如果你想要部署省心、接口直接、中文和英文都能用,Kokoro 是比较均衡的一档。
  • 如果你更看重情感控制、音色数量、角色化表达,EmotiVoice 更有优势,但整体环境更重。
  • 如果你更看重轻量、本地、跨平台嵌入,Piper 会更合适,尤其适合做系统播报或设备侧 TTS。
  • 如果涉及商用,除了效果,也要看许可证:Kokoro 模型是 Apache 2.0、本文项目代码是 MIT;EmotiVoice 是 Apache-2.0;Piper 仓库是 GPL-3.0,而且不同音色模型还要单独确认授权。

安卓、iOS 上能不能直接离线用?

有,但两边成熟度不一样。

  • 安卓:有现成可用的离线免费方案。比较实用的是基于 Sherpa-ONNX 的 TTS 引擎,可以走 Piper 一类轻量模型路线;另外 RHVoice 也能直接装成系统 TTS,不过更偏无障碍朗读,中文并不是它的强项。
  • iOS:也能离线用,但不像安卓那样方便装一个“系统级第三方 TTS 引擎”。更现实的做法通常有两种:一是直接用 iPhone 自带语音朗读;二是在 App 内集成离线引擎。
  • 如果你是普通用户:安卓优先看 SherpaTTS 这类现成方案;iPhone 直接用系统自带朗读,门槛最低。
  • 如果你是开发者:想同时覆盖安卓和 iOS,Sherpa-ONNX 这条路线更实用,它本身支持 Android、iOS 离线运行,也能接 Kokoro、Piper 这类模型。
  • 如果你问 EmotiVoice 能不能直接上手机离线跑:不算它的强项。它更适合桌面端或服务端,移动端“开箱即用”程度不如 Piper / Sherpa-ONNX 这类方案。

快速部署

环境要求

  • Docker 和 Docker Compose
  • 约 2GB 磁盘空间(模型文件)
  • 4GB+ 内存(推荐 8GB)

一键部署

# 1. 克隆项目
git clone https://gitee.com/chenjim/tts-hexgrad-kokoro.git
cd tts-hexgrad-kokoro

# 2. 运行自动部署脚本
./setup.sh

脚本会自动完成:

  • 下载 Kokoro-82M 主模型(313MB)
  • 下载配置文件和音色文件
  • 下载 spaCy 英文模型(13MB)
  • 构建 Docker 镜像
  • 启动服务并进行健康检查

国内镜像加速

针对国内网络环境,本项目已内置镜像加速:

  • Docker 镜像:使用 docker.1ms.run 镜像源
  • apt 源:阿里云 Debian 镜像
  • pip 源:阿里云 PyPI 镜像
  • 模型下载:使用 hf-mirror.com 镜像站

无需额外配置,开箱即用。

项目结构

.
├── setup.sh              # 自动部署脚本
├── Dockerfile            # Docker 镜像定义
├── docker-compose.yml    # Docker Compose 配置
├── main.py              # FastAPI 服务主程序
├── test.py              # Python 测试脚本
├── README.md            # 项目文档
├── models/              # 模型文件目录
│   ├── kokoro-v1_0.pth  # Kokoro 主模型
│   └── voices/          # 音色文件(50+ 种)
└── tmp/                 # 临时文件目录

核心特性:基于 FastAPI 框架提供 RESTful API 接口,支持:

  • /tts - 文本转语音(支持分句分段)
  • /voices - 获取可用音色列表
  • /health - 健康检查

功能演示

1. 基础文本转语音

调用 API(返回 JSON)

curl -X POST http://localhost:18765/tts \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello world", "voice": "af_heart", "format": "mp3"}'

保存音频文件

curl -s -X POST http://localhost:18765/tts \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello world", "voice": "af_heart", "format": "mp3"}' \
  | python3 -c "import sys,json,base64; d=json.load(sys.stdin); open('output.mp3','wb').write(base64.b64decode(d['segments'][0]['audio_base64']))"

2. 中文语音

curl -X POST http://localhost:18765/tts \
  -H "Content-Type: application/json" \
  -d '{"text": "你好世界", "voice": "zf_xiaoxiao", "lang_code": "z"}'

3. 中英混合

curl -X POST http://localhost:18765/tts \
  -H "Content-Type: application/json" \
  -d '{"text": "人工智能 AI 正在改变世界", "voice": "zf_xiaoxiao", "lang_code": "z"}'

4. 时间戳分段

适合生成字幕,设置 split_sentence: true

curl -X POST http://localhost:18765/tts \
  -H "Content-Type: application/json" \
  -d '{"text": "第一句话。第二句话。", "voice": "zf_xiaoxiao", "lang_code": "z", "split_sentence": true}'

返回格式

{
  "duration_ms": 7275,
  "format": "mp3",
  "voice": "zf_xiaoxiao",
  "segments": [
    {"text": "第一句话。", "startTime": 0, "endTime": 3675, "audio_base64": "..."},
    {"text": "第二句话。", "startTime": 3675, "endTime": 7275, "audio_base64": "..."}
  ]
}

性能测试

基于 Intel CPU(无 GPU)的测试结果:

语言 文本长度 音频时长 生成时间 文件大小
英文 85 词 27.3 秒 9.2 秒 546 KB
中文 100 字 21.9 秒 8.3 秒 438 KB

结论:CPU 即可流畅运行,无需 GPU。


可用音色

中文音色(推荐 xiaoxiao)

女声

  • zf_xiaoxiao - 小晓(推荐,自然流畅)
  • zf_xiaoni - 小妮
  • zf_xiaobei - 小贝
  • zf_xiaoyi - 小怡

男声

  • zm_yunxi - 云溪
  • zm_yunyang - 云扬
  • zm_yunjian - 云健
  • zm_yunxia - 云霞

英文音色(美式)

女声(推荐 af_heart)

  • af_heart - Heart(A 级,情感丰富)
  • af_bella - Bella(A- 级,稳定性好)
  • af_nicole - Nicole(B- 级,适合长文本)

男声

  • am_michael - Michael(C+ 级,男声最佳)
  • am_fenrir - Fenrir(C+ 级)
  • am_puck - Puck(C+ 级)

应用场景

  1. 有声读物:将电子书转换为有声书
  2. 视频配音:为短视频、课件生成配音
  3. 智能客服:语音交互系统
  4. 辅助阅读:帮助视障人士阅读文字
  5. 语言学习:发音练习、听力训练

总结

Kokoro-82M 是一款性价比极高的开源 TTS 方案,特别适合:

  • 预算有限的个人开发者
  • 注重数据隐私的企业
  • 需要离线部署的场景
  • 对多语言支持有需求的用户
  • 对中英文混合支持有需求的用户

通过 Docker 部署,你可以快速搭建一个免费的、高质量的语音合成服务,完全掌控自己的数据。


请求参数

参数 类型 默认值 说明
text string 必填 要转换的文本
voice string af_heart 音色名称
speed float 1.0 语速(0.5-2.0)
lang_code string a 语言代码
format string mp3 输出格式(mp3/wav)
split_sentence boolean false 是否分句分段

语言代码

  • a - 美式英语 (American English)
  • b - 英式英语 (British English)
  • z - 普通话 (Mandarin Chinese)
  • e - 西班牙语 (Spanish)
  • f - 法语 (French)
  • h - 印地语 (Hindi)
  • i - 意大利语 (Italian)
  • j - 日语 (Japanese)
  • p - 葡萄牙语 (Portuguese)

技术栈

  • TTS 模型:Kokoro-82M (hexgrad)
  • Web 框架:FastAPI + Uvicorn
  • 音频处理:soundfile + ffmpeg
  • 文本处理:misaki (G2P), spaCy (英文), pypinyin (中文)
  • 容器化:Docker + Docker Compose

故障排查

服务无响应

# 查看容器日志
docker logs tts-hexgrad-kokoro-kokoro-1

# 检查容器状态
docker ps | grep kokoro

# 重启服务
docker-compose restart

中文语音失败

确保已安装中文依赖:

docker exec tts-hexgrad-kokoro-kokoro-1 pip list | grep -E "pypinyin|jieba|ordered-set"

模型下载问题

setup.sh 已内置国内镜像加速,默认使用 hf-mirror.com 和阿里云 apt/pip 源。

检查文件:

# 主模型应为 313MB
ls -lh models/kokoro-v1_0.pth

# 查看已下载的音色
ls -lh models/voices/

开发说明

修改代码

由于 main.py 是通过 volume 挂载的,修改后只需重启容器:

docker-compose restart kokoro

重新构建镜像

docker-compose build --no-cache kokoro
docker-compose up -d

许可证

  • Kokoro 模型:Apache 2.0 License,参见 hexgrad/Kokoro-82M
  • 本项目代码:MIT License

参考资源


本文基于 Kokoro-82M v1.0 版本撰写,部署方案已针对国内网络环境优化。


本文链接:免费 TTS 方案:国内基于 Docker 部署 Kokoro - https://h89.cn/archives/528.html

版权声明:原创文章 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文链接和本声明。

标签: docker, tts, Kokoro, hf-mirror

添加新评论