跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言AIjava算法

FunASR 离线语音转写服务部署与客户端开发实战

FunASR 离线文件转写服务提供完整的语音识别链路,支持长音频视频识别及标点生成。详述基于 Docker 的部署流程,包括服务端启动参数配置、多语言客户端(Python/C++/Java)调用方法及常见问题处理。通过实际测试对比,验证了其在中文场景下的识别效果,适合需要私有化部署语音转写能力的开发者参考。

魔法巫师发布于 2026/4/9更新于 2026/9/1069 浏览

FunASR 离线语音转写服务部署与客户端开发实战

1. 概述

FunASR(Automatic Speech Recognition)离线文件转写软件包提供了一款功能强大的语音离线文件转写服务。它拥有完整的语音识别链路,结合了语音端点检测(VAD)、语音识别、标点等模型,可以将几十个小时的长音频与视频识别成带标点的文字,支持上百路请求同时进行转写。

输出结果包含带标点的文字及字级别时间戳,支持 ITN(逆文本规范化)与用户自定义热词。服务端集成有 ffmpeg,支持各种音视频格式输入。软件包提供 HTML、Python、C++、Java 与 C# 等多种编程语言客户端,方便直接集成与二次开发。

推荐配置:

  • 配置 1: X86 计算型,4 核 vCPU,内存 8G,单机约支持 32 路请求
  • 配置 2: X86 计算型,16 核 vCPU,内存 32G,单机约支持 64 路请求
  • 配置 3: X86 计算型,64 核 vCPU,内存 128G,单机约支持 200 路请求

2. 快速上手

2.1 Docker 安装

推荐使用官方脚本进行安装:

# 下载安装脚本
curl -O https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/shell/install_docker.sh
# 执行安装命令
sudo bash install_docker.sh

2.2 镜像启动

拉取并启动 FunASR 软件包的 Docker 镜像:

# 拉取镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.7
# 创建资源文件夹
mkdir -p ./funasr-runtime-resources/models
# 交互式启动容器
sudo docker run -p 10095:10095 -it --privileged=true \
-v $PWD/funasr-runtime-resources/models:/workspace/models \
registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.7

2.3 服务端启动

进入容器后启动 funasr-wss-server 服务程序:

# 容器内的操作
cd FunASR/runtime
nohup bash run_server.sh \
--download-model-dir /workspace/models \
--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \
--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx \
--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \
--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \
--itn-dir thuduj12/fst_itn_zh \
--hotword /workspace/models/hotwords.txt > log.txt 2>&1 &

参数说明:
  • 若需关闭 SSL,增加参数 --certfile 0。
  • 若使用 SenseVoiceSmall 模型,设置 --model-dir 为对应模型 ID。
  • 热词文件配置在宿主机 ./funasr-runtime-resources/models/hotwords.txt,Docker 映射地址为 /workspace/models/hotwords.txt。每行一个热词,格式为 (热词 权重),例如 阿里巴巴 20。

日志示例: 服务启动时会下载模型并初始化,日志中会显示各模块加载状态。若遇到 ffmpeg is not installed 警告,可使用 torchaudio 加载音频,或安装 ffmpeg 以提升兼容性。

2.4 客户端测试与使用

下载客户端测试工具目录 samples:

wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/sample/funasr_samples.tar.gz

以 Python 语言客户端为例,支持多种音频格式(.wav, .pcm, .mp3 等)及视频输入:

python3 funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav"

运行结果: 终端将输出识别文本及字级别的时间戳信息。若出现 ModuleNotFoundError: No module named 'websockets',请执行 pip install websockets==13.1 安装依赖。

3. 客户端用法详解

完成服务部署后,可通过以下步骤测试和使用离线文件转写服务。目前支持以下几种编程语言客户端:

3.1 Python Client

简易调用示例:

python3 funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline \
--audio_in "../audio/asr_example.wav" --output_dir "./results"

关键参数:

  • --host: 服务部署机器 IP,默认为本机。
  • --port: 部署端口号,默认 10095。
  • --mode: 设为 offline 表示离线文件转写。
  • --audio_in: 音频文件路径或列表文件 wav.scp。
  • --ssl: 是否开启 SSL 证书校验,默认 1 开启,0 关闭。
  • --hotword: 热词文件路径。
  • --use_itn: 是否使用 ITN,默认 1 开启。

效果对比: 在实际测试中,FunASR 对中文口语的识别准确率较高,能够修正部分口语化表达。相比 Whisper 等模型,FunASR 在特定中文场景下表现更为稳定,标点生成能力也较强。

3.2 C++ Client

进入 samples/cpp 目录进行测试:

./funasr-wss-client --server-ip 127.0.0.1 --port 10095 --wav-path ../audio/asr_example.wav

返回结果为 JSON 格式,包含识别文本、时间戳及分段信息。

3.3 HTML 网页版

在浏览器中打开 html/static/index.html,即可体验麦克风输入与文件上传功能。需输入 ASR 服务地址 wss://IP:10095/。

注意: 若遇到 TLS 握手失败错误,需在服务端启动时添加 --certfile 0 关闭 SSL,并将前端地址改为 ws://IP:10095/。

3.4 Java Client

FunasrWsClient --host localhost --port 10095 --audio_in ./asr_example.wav --mode offline

详细构建步骤可参考官方文档。Linux/Unix 环境下需先安装 OpenJDK 环境,然后编译运行。

4. 服务端用法详解

4.1 启动 FunASR 服务

cd /workspace/FunASR/runtime
nohup bash run_server.sh \
--download-model-dir /workspace/models \
--model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx \
--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \
--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \
--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \
--itn-dir thuduj12/fst_itn_zh \
--certfile ../../../ssl_key/server.crt \
--keyfile ../../../ssl_key/server.key \
--hotword ../../hotwords.txt > log.txt 2>&1 &

run_server.sh 命令参数介绍:

  • --download-model-dir: 模型下载地址,支持 ModelScope ID。
  • --model-dir, --vad-dir, --punc-dir, --lm-dir, --itn-dir: 各组件模型路径或 ModelScope ID。
  • --port: 监听端口,默认 10095。
  • --decoder-thread-num: 线程池个数,控制最大并发路数。
  • --io-thread-num: IO 线程数。
  • --model-thread-num: 推理线程数,建议 decoder-thread-num * model-thread-num 等于总线程数。
  • --certfile, --keyfile: SSL 证书与密钥路径,设为 0 可关闭 SSL。
  • --hotword: 热词文件路径,服务端热词全局生效。

4.2 关闭 FunASR 服务

ps -x | grep funasr-wss-server
kill -9 PID

4.3 修改模型及其他参数

替换模型或参数需先停止服务,修改配置后重新启动。若指定 ModelScope 中的 Model ID,服务会自动下载相应模型。

对于微调后的模型(如 10epoch.pb),需手动重命名为 model.pb 并替换原文件,指定 model_dir 路径即可。

5. 如何定制服务部署

FunASR-runtime 代码已开源,若标准服务无法满足需求,可进行二次开发。

  • C++ 客户端: GitHub 仓库
  • Python 客户端: GitHub 仓库
  • 自定义客户端: 参考 WebSocket 通信协议文档。

C++ 服务端开发示例:

VAD 模型使用:

// VAD 模型的使用分为 FsmnVadInit 和 FsmnVadInfer 两个步骤
FUNASR_HANDLE vad_hanlde = FsmnVadInit(model_path, thread_num);
FUNASR_RESULT result = FsmnVadInfer(vad_hanlde, wav_file.c_str(), NULL, 16000);

ASR 模型使用:

// ASR 模型的使用分为 FunOfflineInit 和 FunOfflineInfer 两个步骤
FUNASR_HANDLE asr_hanlde = FunOfflineInit(model_path, thread_num);
FUNASR_RESULT result = FunOfflineInfer(asr_hanlde, wav_file.c_str(), RASR_NONE, NULL, 16000);

PUNC 模型使用:

// PUNC 模型的使用分为 CTTransformerInit 和 CTTransformerInfer 两个步骤
FUNASR_HANDLE punc_hanlde = CTTransformerInit(model_path, thread_num);
FUNASR_RESULT result = CTTransformerInfer(punc_hanlde, txt_str.c_str(), RASR_NONE, NULL);

更多示例详见官方 GitHub 仓库。

目录

  1. FunASR 离线语音转写服务部署与客户端开发实战
  2. 1. 概述
  3. 2. 快速上手
  4. 2.1 Docker 安装
  5. 下载安装脚本
  6. 执行安装命令
  7. 2.2 镜像启动
  8. 拉取镜像
  9. 创建资源文件夹
  10. 交互式启动容器
  11. 2.3 服务端启动
  12. 容器内的操作
  13. 2.4 客户端测试与使用
  14. 3. 客户端用法详解
  15. 3.1 Python Client
  16. 3.2 C++ Client
  17. 3.3 HTML 网页版
  18. 3.4 Java Client
  19. 4. 服务端用法详解
  20. 4.1 启动 FunASR 服务
  21. 4.2 关闭 FunASR 服务
  22. 4.3 修改模型及其他参数
  23. 5. 如何定制服务部署

更多推荐文章

查看全部
  • learn-claude-code:从零理解 AI Agent 设计与实现
  • 手撕 STL 源码:基于红黑树封装 map 与 set
  • Python 实现手机号归属地查询工具
  • 25 本最受推崇的经典 Python 书籍推荐
  • AI 大模型入门:AI 产品经理必备知识与落地逻辑
  • 分布式文件系统 HDFS 存储原理
  • WebRTC 直播流前端播放方案:原生与封装库对比
  • Python 语言优势与核心应用场景解析
  • Python 使用 Pygame 实现五子棋游戏完整教程
  • SBUS 协议详解:从原理到 STM32 实战应用
  • C++ 递归算法实战:汉诺塔问题详解
  • Linux 常用基础命令
  • OpenClaw 为何爆火?AI Agent 从技术圈走向大众场景的观察
  • Vue3+Python 气象数据共享平台设计与实现
  • 二级 Python 考试真题与基础代码解析
  • 飞算 JavaAI 智能开发助手功能详解与安装实践
  • 程序员转行方向推荐:数据分析师、AI 大模型工程师、产品经理与云计算工程师
  • 大模型如何逐步侵蚀人类对真相的认知与信任
  • 算法实战:Z 字形变换与外观数列解析
  • OpenClaw 安装与飞书机器人接入指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online