3.3 KiB
FunASR 实时识别说明
前端和后端分别启动。后端会托管以下服务:
- FunASR WebSocket 服务使用本地流式 ASR 和 FSMN-VAD。未填写热词时发送
mode=online;填写热词时发送mode=2pass,流式模型负责实时预览,Contextual Paraformer 在每段语音结束后生成带热词偏置的最终结果。输入结束时发送is_speaking=false,让引擎刷新剩余音频。 - CAM++ 辅助服务,为已完成的语音段分配稳定的说话人标签。
- 浏览器协议桥接服务,将腾讯演示页面原有的消息格式转换为 FunASR WebSocket 协议。VAD 切分由 FunASR 处理,桥接层不会再运行另一套 ASR/VAD 切分流程。
前端继续提供 frontend/static/ 中的腾讯演示文件,并将同源的 /ws 和 /api/stop 请求转发给后端。
模型目录
将模型放入 models/,或在 .env 中设置 MODEL_DIR。默认模型目录如下:
models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onlinemodels/iic/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorchmodels/iic/speech_campplus_sv_zh-cn_16k-common,也可使用清单中配置的damo/模型目录
若模型目录名称不同,可在 .env 中将 FUNASR_ASR_MODEL、FUNASR_HOTWORD_ASR_MODEL 和 FUNASR_VAD_MODEL 设为本地路径。CAM++ 默认按 model_manifest.json 查找;需要自定义目录时设置 CAM_MODEL_PATH。后端会在开放 WebSocket 前检查流式 ASR、Contextual 热词 ASR、VAD 和 CAM++ 模型。
安装与启动
requirements.txt 包含 FunASR、辅助服务和前端依赖。其中 PyTorch 版本面向使用 CUDA 13 的 GB10 环境;其它设备请按其 CUDA 版本调整 PyTorch 软件源和版本。
python -m pip install -r requirements.txt
if (-not (Test-Path .env)) { Copy-Item .env.example .env }
python scripts/download_models.py
在两个终端中分别启动后端和前端:
python backend\run_backend.py
python frontend\run_frontend.py
默认前端端口为 8080,浏览器后端端口为 8082,CAM++ HTTP 端口为 8010,仅本机可访问的 FunASR WebSocket 端口为 10095。需要调整时,在 .env 中同步修改 FRONTEND_PORT、WEB_PORT、AUXILIARY_SERVICE_URL、FUNASR_NATIVE_WS_HOST 和 FUNASR_NATIVE_WS_PORT。前端进程通过 BACKEND_INTERNAL_URL 访问后端;未设置时使用 http://127.0.0.1:${WEB_PORT}。
FUNASR_DEVICE 控制流式 ASR 和 Contextual 最终解码模型的设备,默认使用 cuda:0;FUNASR_VAD_DEVICE 默认使用 CPU。启动器先加载 ASR,再启动 CAM++,优先为识别模型分配显存。若 CAM++ 不与 ASR 共用 GPU,可将 AUXILIARY_DEVICE 设为 cpu。热词以逗号、顿号或分号分隔,开始会话时传入;流式预览不应用热词,最终结果由 Contextual 模型解码。FUNASR_CHUNK_SIZE 和 FUNASR_CHUNK_INTERVAL 控制 FunASR 分块协议;默认值 [0,10,5] 和间隔 10 会按 600 毫秒一组发送当前音频块。
实时文件输入支持原始 PCM16 或 16 kHz 单声道 PCM WAV。每个完成的语音段都会计算说话人标签;语音过短或接近静音时,CAM++ 仍可能将说话人标为未知。