1.项目简介
项目概述
tkvoice 是一个基于天工行者(无界/无疆)的语音交互框架项目。
信息
天工行者(无界/无疆)配备了讯飞的RK3588 AIUI多模态开发套件,其音频传输协议可参考。
仓库地址:https://github.com/UBTECH-Robot/tkvoice/tree/opentts_public
opentts_public 分支集成了语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)三大核心功能,实现端到端的离线语音对话能力,目前支持中文。
注意
本文档的介绍内容主要是基于 opentts_public 分支,也就是纯离线的语音方案。但是大体的流程也是同样适用于 allonline_public 分支的。
可以这样认为,本项目是一个 ASR -> LLM -> TTS 的服务框架,而 opentts_public 分支,是基于这个框架,对接了搭建于天工本地的 ASR ,LLM,TTS 服务。而 allonline_public 分支,则是基于这个框架,语音方面对接了在线的微软语音服务,LLM方面则是可对接兼容OpenAI LLM接口的任意LLM提供商(因为内部直接使用的 openai 的python SDK)。
如果你要使用 allonline_public 分支,参考【文档】
系统架构
硬件部署
├── x86 服务器 (192.168.41.1) → ASR 服务 (Funasr)
├── Orin 板 (192.168.41.2) → LLM 服务 (Ollama) + TTS
└── RK3588s 设备 → 音频采集设备
数据流处理流程
RK3588s 音频流
↓
[tk_audio_publisher] 获取整句音频
↓ (audio_sentence_frames 话题)
[tk_asr_text_publisher] 语音识别
↓ (asr_sentence 话题)
[tk_audio_process] LLM理解 + TTS合成
↓
AudioPlayer 播放输出
核心技术栈
| 功能模块 | 技术方案 | 部署位置 | 端口 |
|---|---|---|---|
| ASR | Funasr | x86 服务器 | 10097 |
| LLM | Ollama (qwen2.5:1.5b) | Orin 板 | - |
| TTS | Piper-TTS | Orin 板 | - |
| 框架 | ROS 2 (Python) | Orin 板 | - |
项目结构分析
主要目录说明
tkvoice/
├── src/
│ ├── audio_message/ # 自定义ROS消息定义
│ │ └── msg/
│ │ └── AudioFrame.msg # 音频帧消息格式
│ └── audio_service/ # 核心服务包
│ ├── setup.py # Python包配置 (v0.2.26)
│ ├── package.xml # ROS2包元数据
│ └── audio_service/ # 主代码目录
│ ├── tk_audio_publisher.py # 音频发布者
│ ├── tk_asr_text_publisher.py # ASR文本发布者
│ ├── tk_audio_process.py # 音频处理 + LLM + TTS
│ ├── funasr_client.py # Funasr API封装
│ ├── llm_client.py # Ollama API封装
│ ├── piper_provider.py # TTS语音合成
│ ├── socket_audio_provider.py # 音频Socket接收
│ ├── socket_connector.py # 网络连接
│ ├── log_config.py # 日志配置
│ └── utils.py # 工具函数
├── res/ # 资源和安装脚本
│ ├── docker_funasr/ # Funasr Docker脚本
│ ├── ollama/ # Ollama安装脚本
│ └── piper_voices/ # TTS语音模型
└── build.sh / install.sh # 构建和安装脚本
核心代码模块(8个主要模块)
| 模块 | 功能描述 |
|---|---|
tk_audio_publisher | 从RK3588s获取音频流,发布整句音频 |
tk_asr_text_publisher | 音频识别,通过WebSocket调用Funasr服务 |
tk_audio_process | 核心处理节点:LLM理解 + TTS合成 + 音频播放 |
funasr_client | Funasr WebSocket客户端封装 |
llm_client | Ollama API客户端封装 |
piper_provider | Piper TTS Python库调用 |
socket_audio_provider | Socket音频数据接收 |
socket_connector | 网络连接管理 |
开源协议
| 部分 | 协议 |
|---|---|
| 项目主体 | Apache-2.0 |
| TTS模块 (piper-tts) | GPL-3.0 |
依赖和部署
系统依赖
- ROS 2 - 中间件框架
- Python 3 - 编程语言
- Docker - x86服务器容器化
第三方服务
- Funasr - 语音识别模型服务
- Ollama - 大语言模型推理框架
- Piper-TTS - 离线语音合成库
安装步骤
- x86服务器:安装Docker + Funasr镜像
- Orin板:安装Ollama + 拉取qwen2.5:1.5b模型
- Orin板:部署audio_service ROS包