免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


揭秘AI语音识别:从AI语音服务搭建到K8s容器化部署

发布日期:2025-09-07 11:32:26 浏览次数: 1673
作者:参码思想汇

微信搜一搜,关注“参码思想汇”

推荐语

告别手忙脚乱的会议记录!揭秘如何用AI语音识别技术实现高效会议速记,从技术选型到K8s部署全解析。

核心内容:
1. 会议场景痛点分析与AI语音识别解决方案
2. FunASR开源框架的技术优势与实现原理
3. 从本地demo到K8s容器化部署的完整实践路径

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家
日常会议场景介绍AI速记产品搭建过程遇到系列问题阐述如何通过一步步技术调优结合FunASR框架语音模型提升效果语音效果实现高精度语音识别能力

场景与痛点

日常工作开会时总得有个人当 “会议秘书”,左手攥着笔,右手敲着键盘,一边紧跟老板的思路,一边还要把同事们 “嗯这个” 的零散发言快速记下来。这活儿不光要脑子转得快,即时总结归纳,碰上长会,更是对专注力的极大考验,一不小心就可能漏掉关键信息。
伴随AI浪潮人们开始思考能不能把会议录音转成文字,再让大语言模型来归纳总结会议内容?这样一来,不仅可以减轻人工记录的负担,还能提高会议纪要的生成效率。但要实现这个想法,第一步就得解决 “语音变文本” 的问题。这时候,需要搭建实时语音转写服务(Real-time ASR)。
方便理解整理搭建AI速记核心实现链路现状
图片来源:大参林信息中心


技术选型

语音服务商能力POC

云服务商
语音转写准确率
是否收费
个性化能力
信息安全
**ASR
89.40%
不支持
无法管控
**ASR
89.30%
不支持
无法管控
**ASR
89.10%
不支持
无法管控
FunASR
85.00%
支持
内部可控
服务商ASR能力对比为了完成语音文本获取我们进行了多个主流云服务商实时语音转写服务产品调研,这些云服务商的服务具有以下特点: 
  • WebSocket协议完成数据接收与结果推送保证实时性
  • 根据连接时长收费成本与使用时间直接挂钩
  • 基础版本只支持普通话、英语对于小众语言或特定场景的语音识别支持不足
  • 个性化热词功能全局生效某些需要针对特定领域或会议主题进行精准识别的场景下,灵活性不够。

结论基于FunASR自建语音转写服务语音转写准确率差别不大情况拓展性成本企业内部信息安全方面考虑我们把方向云服务商移到私有化搭建语音服务并且确定技术选型Funasr开源项目

Funasr开源项目

FunASR 是由阿里巴巴达摩院开发的开源语音识别工具包,其凭借高精度模型、多语言支持和友好技术设计提供企业级语音处理解决方案
其核心能力除了语音识别以外还集成语音端点检测VAD多人对话语音识别自定义语言模型语言类别支持能力简单工作流程如下图

图片引用自funasr

该开源项目提供非常丰富部署使用资料依托这个项目我们快速本地搭建起一个使用CPU资源进行实时语音转写demo并且经过对比验证语音转写文本质量云服务商并无太大差异

语音转写技术解析

核心能力实时语音转写依托websocket协议接收推送的语音数据,通过网管完成握手后代理连接到Funasr核心服务。而2pass模型则是同时协调模型,兼顾返回语音的实时性要求同时,提供结束点监控,当语句结束后会对整体语音信息进行一次回顾重新生成协作优化结果,该总体服务流程如下图:

图片引用自funasr

  1. 音频信息 VAD起始点检测
  2. 实时语音识别返回结果
  3. VAD尾点预测
  4. 获取非静音段落语音数据
  5. ITN文本正则化处理
  6. 返回具有上下连贯性的音频文本信息

上述流程中,SenseVoice负责离线回归部分,Paraformer模型负责实时识别,speech_paramformer负责VAD端点识别在上述模型协作下完成了2pass模型的语音实时别工作。整体来看FunASR具备准确性多语言支持实时性特点满足我们使用场景

搭建ASR服务-核心代码示例

实时语音转文本--系统交互流程

交互流程图

语音转文字--示例代码

# fastapi实现离线语音转写接口@app.post('/api/v1/asr')async def turn_audio_to_text(        file: UploadFile,        lang: Annotated[Language, Form(description="语言类型")] = 'auto'):    # 生成格式化文件    file_path = await convert_audio(file)    try:        import librosa        import numpy as np        # 加载文件        audio_data, _ = librosa.load(file_path, sr=16000, mono=True)        print(f'file_path: {file_path}')        # 确保音频数据是float32类型        audio_data = audio_data.astype(np.float32)        # 语音文件转写文本        text = model.generate(            input=audio_data,            language=lang,            use_itn=True,            batch_size_s=60,            merge_vad=True)        result_txt = clean_result_label(text[0]['text'])         # 获取音频元数据        try:            info = torchaudio.info(file_path)            metadata = {                "sample_rate": info.sample_rate,                "num_channels": info.num_channels,                "num_frames": info.num_frames,                "duration": info.num_frames / info.sample_rate if info.sample_rate > 0 else 0,                "encoding": str(info.encoding) if hasattr(info, 'encoding') else None,                "bits_per_sample": info.bits_per_sample if hasattr(info, 'bits_per_sample') else None            }        except Exception as meta_error:            # 错误处理...        finally:        # 删除临时文件        os.remove(file_path)

多语言支持

多语言能力基于SenseVoice模型内置支持并且通过实时语音转写初始化协议进行定义默认语言类型auto自动识别当需要指定语音类型可以使用参数svs_lang完成如下
{    "mode": "offline",    "wav_name": "wav_name",    "wav_format": "pcm",    "is_speaking": true,    "hotwords": "{}",    "itn": true,    "svs_lang": "zh"}

底层模型能力

SenseVoice除了上述基础能力SenseVoice模型支持一些额外能力比如ITN文本规范化能力可以对于语音输入内容进行矫正让其更容易机器理解用户语音输入下午三点经过逆文本规范化之后转化15:00
Paraformer模型一种高效回归端到端中文通用语音识别模型实时语音端点检测效果较好适用于实时语音识别转写

企业级应用-服务容器化

为了语音服务稳定企业内部使用k8s进行服务部署管理调度因此服务落地最重要工作就是服务容器化官方提供funasr-runtime-sdk-online-cpudocker基础镜像虽然镜像对于快速本地启动验证提供了非常帮助但是直接使用镜像存在以下问题
问题1服务拉起进行语音转写模型下载工作
问题2该项目部分模型指定版本当你调整模型版本缺少参数注入手段
图片来源:大参林信息中心

难点1:语音模型下载-耗时过长

由于项目默认拉起服务检查本地模型文件是否存在若不存在则会下载相关模型语音识别模型往往比较因此会有很长启动等待时间不预下载模型出现一个服务拉起需要2030分钟不等其中大部分时间等待模型文件下载
解决方案
  • 使用PVC挂载容器模型文件目录
  • 定制化镜像构建阶段完成模型文件下载

由于内部系统限制第一个方案无法使用只能定制化镜像构建阶段完成模型下载确定了方案开始深入项目预下载可行性项目启动入口一个启动脚本`run_server_2pass.sh`我们脚本开始入手根据启动脚本看到实际上使用可执行`Funasr/runtime/websocket/build/bin/funasr-wss-server-2pass.cpp`入口文件中这么一段代码
图片来源:大参林信息中心
通过上述代码发现,项目里面存在可直接使用的模型下载python代码因此我们构建镜像需要使用脚本提前完成相关模型下载工作即可。然后我们进入到下载脚本文件,能得知该脚本支持的核心启动参数,而具体执行的命令如下:
RUN python -m funasr.download.runtime_sdk_download_tool --type onnx --quantize True --model-name iic/SenseVoiceSmall-onnx --model_revision v2.0.5 --export-dir /workspace/models

至此,需要用到东西都具备我们开始编写镜像构建脚本官方基础镜像基础加入预下载模型能力
脚本构建步骤
截至目前,我们通过定制化镜像解决启动服务模型下载速度导致启动等待时间过长问题模型打包镜像也能有效保证服务镜像稳定出现因为模型仓库删除导致启动无法下载模型问题

难点2:启动脚本缺少模型版本参数

由于我们并不使用脚本默认模型因此我们需要调整官方项目提供启动脚本修改模型同时还需要支持指定相关模型版本信息而不是使用模型master分支从启动脚本入手通过启动脚本传入额外参数调整服务文件支持该参数
解决思路
  • 调整服务启动文件支持模型版本参数
  • 修改cpp文件支持额外提供参数

从启动文件入手,阅读项目的启动文件项目支持通过启动参数传入指定的语音识别模型版本信息分别为: offline_model_revision 和 online_model_revision。
图片来源:大参林信息中心
找到适配参数我们不需要修改源文件并重新编译只需要参数通过启动脚本传递进去即可调整启动脚本`run_server_2pass.sh`如下
图片来源:大参林信息中心
完成启动脚本调整之后只需要镜像构建启动脚本替换到容器即可至此Funasr项目容器定制化问题基本解决

AI中台-语音服务平台


Q: 当完成了一个功能的交付之后,就会进入到下一步,如何将该能力提供给内部其他系统使用?如何对系统流量和负载进行监控?是否需要拓展更多语音识别的能力等一系列问题,这些都会影响到系统的稳定性与对内提供服务的质量。
A: 为了解决上述问题,在Funasr服务的搭建完成后,我们还需要做一些额外的事情,一个网关,用于监控和提供统一的API接口提供给其他系统。
系统架构如下
 
语音服务架构
在上述系统架构蓝图描述中,通过Funasr-Api-Gateway作为统一的入口端点,在该系统上完成一些业务需要的能力开发如支持语音文件转写、实时语音转写等。并且能够在该统一入口端点进行系统流量的监控、Funasr服务资源调度与内部系统调用统计等相关服务指标的监测。底层以私有化部署的语音模型为底座。
当前,语音服务平台作为AI中台的核心能力之一,已经具备较好的语音识别能力,除了已经在AI速记落地使用,也提供了API供部分业务系统接入。未来可作为企业级的AI语音平台,探索更多可落地的场景。

end

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询