44 lines
3.3 KiB
Markdown
44 lines
3.3 KiB
Markdown
# 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-online`
|
||
- `models/iic/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404`
|
||
- `models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch`
|
||
- `models/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 软件源和版本。
|
||
|
||
~~~powershell
|
||
python -m pip install -r requirements.txt
|
||
if (-not (Test-Path .env)) { Copy-Item .env.example .env }
|
||
python scripts/download_models.py --funasr-runtime
|
||
~~~
|
||
|
||
在两个终端中分别启动后端和前端:
|
||
|
||
~~~powershell
|
||
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++ 仍可能将说话人标为未知。
|