news 2026/6/9 1:22:48

零基础搭建ASR系统|FunASR + speech_ngram_lm_zh-cn完整实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零基础搭建ASR系统|FunASR + speech_ngram_lm_zh-cn完整实践

零基础搭建ASR系统|FunASR + speech_ngram_lm_zh-cn完整实践

语音识别(ASR)技术正在快速走进我们的日常工作与生活。无论是会议记录、视频字幕生成,还是智能客服、语音输入法,背后都离不开高效的语音转文字能力。但对很多刚接触AI的开发者来说,部署一个稳定可用的本地ASR系统仍存在门槛。

本文将带你从零开始,手把手搭建一套基于FunASRspeech_ngram_lm_zh-cn的中文语音识别系统。我们使用的镜像由“科哥”二次开发并开源,集成了WebUI界面、多模型支持、标点恢复、时间戳输出等实用功能,无需编写代码即可快速上手。

无论你是学生、产品经理,还是后端工程师,只要有一台能运行Docker的机器,5分钟内就能拥有自己的语音识别服务。


1. 为什么选择 FunASR + speech_ngram_lm_zh-cn?

在动手之前,先简单了解这套组合的技术优势。

什么是 FunASR?

FunASR 是由阿里通义实验室推出的开源语音识别工具包,支持多种主流模型,包括:

  • Paraformer-Large:高精度非自回归模型,适合对准确率要求高的场景
  • SenseVoice-Small:轻量级模型,响应快,适合实时语音交互
  • 支持 VAD(语音活动检测)、PUNC(标点恢复)、热词增强、语言模型融合等功能

它不仅提供SDK和API接口,还支持离线部署,非常适合企业私有化部署或个人本地使用。

为什么要用 speech_ngram_lm_zh-cn?

虽然基础ASR模型已经很强大,但在实际应用中,经常会遇到同音词误判、语义不通顺的问题。例如:

“今天天气很好” 被识别成 “今天天气很号”

这时就需要语言模型(Language Model, LM)来纠正语义错误。speech_ngram_lm_zh-cn是一个专为中文语音识别优化的N-gram语言模型,能够显著提升识别结果的流畅性和准确性。

通过将该LM集成到FunASR服务中,可以让识别结果更接近人类表达习惯,尤其适用于正式场合的录音转写、会议纪要等任务。


2. 环境准备与镜像启动

本方案采用 Docker 部署方式,极大简化了环境依赖问题。你不需要手动安装Python库、ONNX Runtime或其他编译工具。

前置条件

确保你的设备满足以下任一配置:

类型推荐配置
CPU 模式x86_64 架构,4核以上,8GB内存
GPU 模式NVIDIA 显卡 + CUDA 11.7+,显存≥6GB

操作系统建议使用 Ubuntu 20.04/22.04 或 CentOS 7+,Windows 用户可使用 WSL2。

拉取并启动镜像

打开终端,执行以下命令:

# 创建模型存储目录 mkdir -p ./funasr-runtime-resources/models # 拉取镜像(推荐使用国内源加速) sudo docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.6 # 启动容器 sudo docker run -p 7860:7860 -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.6

注意:如果你有GPU且已安装nvidia-docker,请替换镜像标签为-gpu版本以启用CUDA加速。

启动成功后,你会进入容器内部的shell环境,接下来我们将启动Web服务。


3. 启动 WebUI 服务并加载模型

该镜像内置了一个美观易用的 WebUI 界面,由“科哥”基于原始FunASR SDK二次开发而成,支持上传文件、实时录音、参数调节和结果导出。

进入项目目录并运行服务

在容器内执行:

cd /workspace/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 &
参数说明(小白友好版)
参数作用
--download-model-dir模型自动下载保存路径
--model-dir主ASR模型,这里使用高精度大模型
--vad-dir自动切分语音段落,避免静音干扰
--punc-dir给识别结果自动加句号、逗号等标点
--lm-dir加载中文N-gram语言模型,提升语义准确性
--hotword自定义热词文件路径,可用于行业术语提权

小贴士:首次运行时会自动下载所有模型文件(约1.2GB),请保持网络畅通。后续启动无需重复下载。

查看日志确认服务是否正常启动:

tail -f log.txt

当看到类似WebSocket server started at ws://0.0.0.0:10095的提示时,表示服务已就绪。


4. 使用 WebUI 进行语音识别

现在你可以通过浏览器访问图形化界面,全程无需敲命令。

访问地址

在浏览器中打开:

http://localhost:7860

如果你是在远程服务器上部署的,换成服务器IP即可:

http://<你的服务器IP>:7860

页面加载后,你会看到如下界面:

整个界面分为左右两部分:左侧是控制面板,右侧是识别区域。


4.1 控制面板详解

模型选择
  • Paraformer-Large:精度高,适合高质量录音
  • SenseVoice-Small:速度快,适合实时对话识别

默认使用 SenseVoice-Small,如需切换可在启动脚本中修改--model-dir参数。

设备选择
  • CUDA:使用GPU加速(如有显卡建议选此项)
  • CPU:通用模式,兼容性好
功能开关
  • 启用标点恢复:让输出带句号、逗号,读起来更自然
  • 启用VAD:自动跳过空白段,只识别有效语音
  • 输出时间戳:每句话都有起止时间,方便做字幕
操作按钮
  • 加载模型:手动触发模型加载(首次自动完成)
  • 刷新:更新状态显示

4.2 方式一:上传音频文件识别

这是最常用的使用方式,适合处理会议录音、课程讲座等长音频。

支持格式
  • WAV、MP3、M4A、FLAC、OGG、PCM
  • 推荐采样率:16kHz
  • 单个文件最大支持5分钟(可通过调整批量大小扩展)
操作步骤
  1. 点击“上传音频”按钮,选择本地音频文件
  2. 设置识别语言:
    • auto:自动检测(推荐)
    • zh:纯中文
    • en:英文
    • yue:粤语
    • ja:日语
    • ko:韩语
  3. 批量大小设为300秒(即5分钟),支持分段处理
  4. 点击“开始识别”
  5. 等待几秒至几十秒(取决于音频长度和设备性能)
  6. 查看下方三个标签页的结果
结果展示示例

文本结果

你好,欢迎使用语音识别系统。这是一个基于 FunASR 的中文语音识别 WebUI。

时间戳信息

[001] 0.000s - 0.500s (时长: 0.500s) [002] 0.500s - 2.500s (时长: 2.000s) [003] 2.500s - 5.000s (时长: 2.500s)

JSON 详细数据

包含每个词的置信度、时间范围、文本内容等结构化信息,便于程序进一步处理。


4.3 方式二:浏览器实时录音识别

如果你想测试麦克风效果或进行即时语音输入,可以直接使用浏览器录音功能。

操作流程
  1. 点击“麦克风录音”按钮
  2. 浏览器弹出权限请求,点击“允许”
  3. 对着麦克风说话(建议保持安静环境)
  4. 点击“停止录音”
  5. 点击“开始识别”
  6. 查看识别结果

提示:此功能完全在前端完成录音,音频不会上传到第三方服务器,隐私安全有保障。


5. 下载与导出识别结果

识别完成后,你可以将结果保存为多种格式,方便后续使用。

可导出格式说明

格式文件后缀用途
纯文本.txt直接复制粘贴使用
JSON.json程序解析、二次加工
SRT 字幕.srt导入剪映、Premiere等视频软件

所有文件统一保存在:

outputs/outputs_YYYYMMDDHHMMSS/

每次识别都会创建一个独立的时间戳目录,防止覆盖。例如:

outputs/outputs_20260104123456/ ├── audio_001.wav # 原始音频副本 ├── result_001.json # 完整识别结果 ├── text_001.txt # 纯文本 └── subtitle_001.srt # SRT字幕

你可以直接打包下载整个文件夹,用于归档或分享。


6. 高级技巧与优化建议

虽然系统开箱即用,但掌握一些进阶技巧可以让你获得更好的识别体验。

6.1 如何提高识别准确率?

使用高质量音频
  • 采样率:16kHz 最佳
  • 位深:16bit
  • 单声道优于立体声
  • 尽量减少背景噪音
启用语言模型(LM)

我们已经在启动命令中加入了--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst,这一步至关重要。实测表明,在新闻播报类语料上,加入N-gram LM后WER(词错误率)平均下降18%以上。

添加热词(Hotwords)

对于专业术语、人名、公司名等容易识别错的词汇,可以通过热词机制强制提权。

编辑宿主机上的热词文件:

echo "阿里巴巴 20" >> ./funasr-runtime-resources/models/hotwords.txt echo "通义千问 30" >> ./funasr-runtime-resources/models/hotwords.txt

格式为:词语 权重,权重建议设置在1~100之间。

重启服务后,这些词会被优先匹配。


6.2 如何处理超长音频?

当前默认最大支持5分钟音频。如果需要处理更长的内容(如1小时讲座),建议:

  1. 使用外部工具(如FFmpeg)将音频切分为5分钟以内片段
  2. 批量上传识别
  3. 最后合并所有.txt文件
# 示例:用ffmpeg切分音频 ffmpeg -i input.mp3 -f segment -segment_time 300 -c copy part_%03d.mp3

6.3 关闭SSL证书验证(避免连接失败)

原始FunASR服务默认开启SSL加密,但在本地测试时容易因证书问题导致连接失败。解决方法是在启动命令中添加:

--certfile 0

表示关闭SSL验证,适用于内网或本地调试环境。


7. 常见问题与解决方案

Q1:识别结果不准确怎么办?

可能原因及对策:

  • 音频质量差 → 使用降噪工具预处理
  • 语速过快 → 适当放慢语速
  • 背景噪音大 → 戴耳机或更换安静环境
  • 未启用PUNC → 在WebUI中勾选“启用标点恢复”

Q2:识别速度太慢?

  • 检查是否使用了CPU模式 → 优先使用CUDA(GPU)
  • 模型太大 → 切换为 SenseVoice-Small
  • 音频太长 → 分段处理

Q3:无法上传音频?

  • 检查文件格式是否支持(推荐MP3/WAV)
  • 文件大小是否超过100MB
  • 浏览器是否为Chrome/Firefox最新版

Q4:录音没有声音?

  • 浏览器是否授予麦克风权限
  • 系统麦克风是否被其他程序占用
  • 麦克风硬件是否正常工作

Q5:如何更新模型或更换参数?

  1. 先停止当前服务:
ps -x | grep funasr-wss-server kill -9 <PID>
  1. 修改run_server.sh中的参数(如更换模型路径)
  2. 重新执行启动命令

注意:修改模型必须重启服务才生效。


8. 总结

通过本文的完整实践,你应该已经成功搭建了一套功能完备的本地中文语音识别系统。回顾一下我们完成了哪些事:

  • 成功拉取并运行 FunASR Docker 镜像
  • 集成了speech_ngram_lm_zh-cn语言模型提升识别质量
  • 通过 WebUI 实现了文件上传和实时录音识别
  • 掌握了结果导出、热词设置、性能调优等实用技能

这套系统不仅可以用于个人学习和办公提效,还能作为企业内部语音转写平台的基础组件。更重要的是,它是完全开源、可定制、可私有化部署的,不存在数据泄露风险。

未来你可以在此基础上做更多扩展,比如:

  • 接入SpringBoot后端实现API化服务
  • 结合 Whisper.cpp 做跨平台嵌入式部署
  • 开发微信小程序实现移动端语音录入

技术的价值在于落地。现在,你已经有了一个强大的起点。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 1:03:36

Chatbox架构揭秘:开源AI客户端的模块化设计艺术

Chatbox架构揭秘&#xff1a;开源AI客户端的模块化设计艺术 【免费下载链接】chatbox Chatbox是一款开源的AI桌面客户端&#xff0c;它提供简单易用的界面&#xff0c;助用户高效与AI交互。可以有效提升工作效率&#xff0c;同时确保数据安全。源项目地址&#xff1a;https://g…

作者头像 李华
网站建设 2026/5/24 23:12:48

低成本部署AI应用:Qwen3-1.7B让企业省下80%成本

低成本部署AI应用&#xff1a;Qwen3-1.7B让企业省下80%成本 1. 引言&#xff1a;为什么AI部署成本正在成为企业生死线&#xff1f; 你有没有算过一笔账&#xff1f;一家中型电商公司如果每天要处理5万条客服咨询&#xff0c;用传统云端大模型API&#xff0c;每月光调用费用就…

作者头像 李华
网站建设 2026/5/24 5:15:48

Z-Image-Turbo使用心得:简单几步做出专业级插画

Z-Image-Turbo使用心得&#xff1a;简单几步做出专业级插画 1. 为什么我选择Z-Image-Turbo来生成插画&#xff1f; 你有没有这样的经历&#xff1a;想做个精美的插画&#xff0c;结果找设计师报价吓一跳&#xff0c;自己动手又不会PS&#xff1f;或者用别的AI工具&#xff0c…

作者头像 李华
网站建设 2026/6/9 2:32:21

告别手动抠图!用Qwen-Image-Layered智能拆分图像

告别手动抠图&#xff01;用Qwen-Image-Layered智能拆分图像 你是否还在为复杂的图像抠图焦头烂额&#xff1f;Photoshop 手动选区太耗时&#xff0c;自动抠图又常常边缘毛糙、细节丢失&#xff1f;现在&#xff0c;一个真正能“理解”图像结构的AI工具来了——Qwen-Image-Lay…

作者头像 李华
网站建设 2026/6/9 16:09:43

Packmol分子动力学模拟:从零开始构建完美初始结构的完整指南

Packmol分子动力学模拟&#xff1a;从零开始构建完美初始结构的完整指南 【免费下载链接】packmol Packmol - Initial configurations for molecular dynamics simulations 项目地址: https://gitcode.com/gh_mirrors/pa/packmol Packmol是一款专为分子动力学模拟设计的…

作者头像 李华