FunASR 语音识别模型 在项目中作为核心语音识别组件,主要用于实现语音数据到文本的转换,支持 本地推理 和 远程 API 调用 两种模式。通过灵活的本地部署和远程调用模式,实现了从音频采集到文本输出的全流程支持。其与项目的 WebSocket 通信协议、LLM 模块及 IOT 控制功能深度集成,为智能硬件的语音交互提供了高效的解决方案。开发者可根据硬件算力和网络环境选择合适的模式,快速搭建定制化的语音识别服务。
一、模型训练准备
1.核心功能
- 作为SDU棋界精灵默认的语音识别方案之一,负责将设备端(如 ESP32)采集的音频数据转换为文本,供后续的 意图识别、LLM 对话处理 和 IOT 控制 使用。
- 支持 国语、粤语、英语、日语、韩语 等多语言识别(通过配置切换模型实现)。
2.预训练模型准备
- 模型获取:从 ModelScope 或百度网盘下载预训练模型(如
SenseVoiceSmall
),存放至项目目录models/SenseVoiceSmall/model.pt
。 - 在
main/chessdemon-server/config.yaml
中配置本地模式:
ASR:
FunASR:
type: fun_local # 指定本地推理模式
model_dir: models/SenseVoiceSmall # 模型路径
output_dir: tmp/ # 临时音频文件存储目录
sample_rate: 16000 # 音频采样率(需与设备一致)
language: zh-CN # 识别语言(默认中文)
3.代码实现
模型初始化:通过 funasr.py
加载模型并创建识别实例。
from modelscope.pipelines import pipeline
from core.providers.asr.base import ASRProviderBase
class ASRProvider(ASRProviderBase):
def __init__(self, model_dir, **kwargs):
self.asr_pipeline = pipeline(
task="auto_speech_recognition",
model=model_dir,
model_revision="master"
)
def speech_to_text(self, opus_data: bytes, session_id: str):
# 解码 Opus 音频为 PCM
pcm_data = self.decode_opus(opus_data)
# 调用模型推理
result = self.asr_pipeline(pcm_data, show_progress=False)
return result["text"], None # 返回识别文本和时间戳(可选)
- 数据流转:设备通过 WebSocket 发送
Opus
音频数据 → 后端解码为PCM
→ 调用本地模型推理 → 返回文本结果。
4.集成架构
SDU棋界精灵通过 插件化架构 支持多种 ASR 引擎,FunASR 是其中的默认选项之一。架构设计特点:
- 配置驱动:通过
config.yaml
选择 ASR 引擎类型(本地或远程)。 - 抽象接口:定义统一的
ASRProviderBase
基类,不同引擎实现相同接口。 - 多模式支持:
- 本地模式:直接调用本地模型文件(适合离线环境)。
- 服务模式:通过 WebSocket 调用远程 FunASR 服务(适合分布式部署)。
二、API 调用模式的运用
1. 环境准备
- 依赖要求:
- Docker:用于容器化部署(推荐版本
>=20.10
)。 - 模型存储目录:需提前在宿主机创建,用于存放预训练模型。
- Docker:用于容器化部署(推荐版本
- 硬件选取:
- CPU 模式:适合中小规模并发(推荐 4 核 8GB 以上配置)。
- GPU 模式:如需高性能推理,需安装 NVIDIA 驱动及 Docker CUDA 支持。
2. 拉取并运行 Docker 镜像
CPU 版本(默认)
# 创建模型存储目录(宿主机路径)
mkdir -p ./funasr-resources/models
# 拉取 FunASR 运行时镜像(含在线服务功能)
docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12
# 启动容器并映射端口和模型目录
docker run -d --name funasr-server \
-p 10096:10095 \
-v $(pwd)/funasr-resources/models:/workspace/models \
--restart always \
registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12
GPU 版本(需支持 CUDA)
# 拉取 GPU 镜像(示例:PyTorch 2.0 + CUDA 12.1)
docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-gpu-2.0.0
# 启动时添加 --gpus 参数
docker run -d --name funasr-server-gpu \
--gpus all \
-p 10096:10095 \
-v $(pwd)/funasr-resources/models:/workspace/models \
registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-gpu-2.0.0
3. 服务端初始化配置
进入容器后,需配置模型路径并启动服务: