ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FunASR 运行时快速上手:Python WebSocket 服务与 Docker 服务化部署实战

FunASR 运行时快速上手:Python WebSocket 服务与 Docker 服务化部署实战 FunASR 运行时快速上手Python WebSocket 服务与 Docker 服务化部署实战【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR本文基于 FunASR 仓库的 运行时快速入门文档系统讲解 FunASR 推理服务的两条落地路径一条是用 Python WebSocket 服务快速搭起支持实时流式、非流式与 2pass 混合识别的 ASR 服务另一条是用 Docker 部署 C 服务化 SDK实现高并发的文件转写与低延迟实时识别。读完后你可以独立完成 FunASR 服务的安装、启动、参数配置与客户端联调并能对照仓库源码理解 2pass 流水线、并发限流与线程模型的底层设计。一、FunASR 运行时的三种使用方式FunASR 的运行时runtime/围绕三类场景组织Service Deployment SDK服务部署 SDK以 WebSocket 协议对外提供识别服务分为 Python 版开发验证、中小并发和 C 版生产环境最大吞吐工业模型 egsIndustrial model egs针对工业级预训练模型的推理/微调示例位于 examples/industrial_data_pretraining/学术模型 egsAcademic model egsAishell、Wenetspeech 等学术数据集上的模型示例位于 examples/。本文聚焦第一种方式——服务部署这也是生产落地最常用的路径。二、路径一Python 版 WebSocket 服务Python 版服务位于 runtime/python/websocket/支持实时流式语音识别并使用非流式模型做纠错、输出带标点的文本。服务端现已支持多客户端并发与非阻塞推理通过--concurrent_vad / --concurrent_asr_online / --concurrent_asr_offline / --concurrent_punc / --concurrent_sv调节各阶段并发度文档同时指出若追求最大吞吐仍建议使用下文介绍的 C 版服务部署 SDK。2.1 环境准备服务端与客户端依赖在 runtime/python/websocket/README.md 中给出pip install -U modelscope funasr git clone https://github.com/modelscope/FunASR.git cd FunASR # 服务端依赖核心依赖即 websockets见 requirements_server.txt cd runtime/python/websocket pip install -r requirements_server.txt # 客户端依赖 pip install -r requirements_client.txt若要从视频文件识别客户端机器需安装ffmpeg。客户端从麦克风推流时还需要pyaudio源码中record_microphone()会显式检查并给出提示。2.2 服务端部署最简启动命令cd runtime/python/websocket python funasr_wss_server.py --port 10095服务端的完整参数结合 funasr_wss_server.py 源码整理参数默认值说明--host0.0.0.0监听地址--port10095WebSocket 服务端口--asr_modeliic/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404非流式离线纠错ASR 模型--asr_model_onlineiic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online流式 ASR 模型--vad_modeliic/speech_fsmn_vad_zh-cn-16k-common-pytorchFSMN-VAD 模型--punc_modeliic/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727标点模型传空字符串可关闭--ngpu10表示纯 CPU1表示使用 GPU--devicecuda推理设备cuda/cpu--ncpu4CPU 线程数--certfile/--keyfile../../ssl_key/server.crt/server.keySSL 证书对应仓库 runtime/ssl_key/证书为空则走明文 ws--worker_threadsmax(4, CPU核数)线程池大小将阻塞推理 offload 出事件循环--concurrent_vad4VADgenerate()最大并发--concurrent_asr_online4流式 ASR 最大并发--concurrent_asr_offline2离线 ASR 最大并发--concurrent_punc1标点模型最大并发--concurrent_sv1声纹SV最大并发--speaker_db_reload_sec5speaker_db.json 最长重载间隔秒避免频繁磁盘 IO--save_offline_segments关闭开启后将 2pass 送入离线 ASR 的每段音频存为 wav用于排查 VAD 切分从源码结构看服务启动时会通过AutoModel一次性加载五个模型离线 ASRparaformer-zh、流式 ASR、FSMN-VAD、标点 CT-Transformer以及用于声纹匹配与说话人归属的 cam 声纹模型iic/speech_campplus_sv_zh-cn_16k-common见 funasr_wss_server.py。2.3 2pass 流水线与并发限流的实现原理服务端的核心处理逻辑集中在ws_serve()协程中funasr_wss_server.py2pass 模式的执行脉络为配置消息先行客户端可先发送 JSON 文本消息设置is_speaking、chunk_size、chunk_interval、hotwords、mode、audio_fs等会话参数音频帧在chunk_size配置完成前会被丢弃并记录错误在线流式识别每累计chunk_interval帧默认 10 帧就把已累积 PCM 交给流式模型增量识别产出 partial 文本VAD 驱动离线触发FSMN-VAD 在线输出speech_start_i / speech_end_i语音起点触发时回溯补齐起点前的音频语音终点或客户端发送is_speaking: false触发离线阶段离线纠错把整段语音送入非流式 Paraformer 精识别再做声纹匹配与标点补全输出带spk_name、text、timestamp、punc_array的最终结果结束确认ack客户端发送{is_speaking: false, is_end: true}后服务端先 flush 未完成的在线/离线推理再回复{is_end: true, is_final: true}若推理失败ack 中携带{is_end: true, is_final: false, error: ...}。并发控制采用「线程池 信号量」双层设计run_blocking()把阻塞的model.generate()调用丢进ThreadPoolExecutor避免卡住 asyncio 事件循环同时每个阶段配一个asyncio.Semaphore限流SEM_VAD、SEM_ASR_ONLINE、SEM_ASR_OFFLINE、SEM_PUNC、SEM_SV防止多客户端同时涌入时把 GPU/模型打爆见 funasr_wss_server.py。这也是文档中「非阻塞推理、多客户端并发」说法的直接来源。2.4 客户端测试最简 2pass 客户端python funasr_wss_client.py --host 127.0.0.1 --port 10095 --mode 2pass --chunk_size 5,10,5关键参数说明依据 funasr_wss_client.py 与 runtime/python/websocket/README.md参数默认值说明--mode2passonline流式、offline非流式、2pass流式非流式统一--chunk_size5, 10, 5流式模型分块参数5,10,5对应 600ms8,8,4对应 480ms--chunk_interval10每多少个发送间隔触发一次推理如1060ms、5120ms、2030ms--audio_in不填填 wav.scpKaldi 风格则读文件否则从麦克风录音--output_dir不填设置后把识别结果写入该目录--thread_num1并发发送线程数--result_timeout300.0等待服务端「输入结束确认」的超时秒数--ssl11走 SSL 连接0明文三种模式的典型调用麦克风输入# 离线非流式模型逐文件识别 python funasr_wss_client.py --host 0.0.0.0 --port 10095 --mode offline # 流式低延迟在线识别 python funasr_wss_client.py --host 0.0.0.0 --port 10095 --mode online --chunk_size 5,10,5 # 2pass在线出 partial离线出 final python funasr_wss_client.py --host 0.0.0.0 --port 10095 --mode 2pass --chunk_size 8,8,4批量识别 wav.scp 并落盘python funasr_wss_client.py --host 0.0.0.0 --port 10095 --mode 2pass \ --chunk_size 8,8,4 --audio_in ./data/wav.scp --output_dir ./results除命令行客户端外仓库还封装了可直接复用的识别器类funasr_client_api.py三步即可完成一次识别from funasr_client_api import Funasr_websocket_recognizer # 1. 创建 recognizer rcg Funasr_websocket_recognizer(host127.0.0.1, port30035, is_sslTrue, mode2pass) # 2. 发送 PCM 数据并获取识别结果 text rcg.feed_chunk(data) print(text, text) # 3. 关闭并取最终结果 text rcg.close(timeout3) print(text, text)仓库中另有更完整的 API 客户端与示例音频runtime/funasr_api/example.py 与 runtime/funasr_api/asr_example.wav可作为联调素材。三、路径二服务部署软件C SDK DockerC 版 SDK 同时支持高精度、高效率、高并发的文件转写与低延迟实时语音识别原生支持 Docker 部署与多并发请求。镜像内置编译好的funasr-wss-server离线与funasr-wss-server-2pass实时二进制模型目录挂载到容器内/workspace/models宿主机的 runtime/funasr-runtime-resources/models/hotwords.txt 对应容器内/workspace/models/hotwords.txt。3.1 Docker 安装可选如果已安装 Docker 可跳过。官方安装脚本可参考仓库 runtime/deploy_tools/install_docker.sh等效于文档给出的sudo bash install_docker.sh3.2 实时语音识别服务2pass在线镜像拉取并启动 Docker 镜像在线镜像版本funasr-runtime-sdk-online-cpu-0.1.13宿主机端口 10096 映射到容器 10095sudo docker pull \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13 mkdir -p ./funasr-runtime-resources/models sudo docker run -p 10096:10095 -it --privilegedtrue \ -v $PWD/funasr-runtime-resources/models:/workspace/models \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13启动服务进入容器后启动funasr-wss-server-2passcd FunASR/runtime nohup bash run_server_2pass.sh \ --download-model-dir /workspace/models \ --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \ --model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx \ --online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx \ --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx \ --itn-dir thuduj12/fst_itn_zh \ --hotword /workspace/models/hotwords.txt log.txt 21 文档中给出了三条重要的部署备注见 runtime/quick_start.md 与 run_server_2pass.sh关闭 SSL追加参数--certfile 0脚本检测到空值或0时会清空 cert/key 路径换用时间戳模型把--model-dir设为damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnxtimestamp换用 nn 热词模型把--model-dir设为damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnxnn hotword服务端热词在宿主机./funasr-runtime-resources/models/hotwords.txt中配置每行一个热词格式为热词 权重例如Alibaba 20。从 run_server_2pass.sh 源码看脚本在模型参数之外还自动配置了线程模型decoder_thread_num取自/proc/cpuinfo的核数失败时回退为 32io_thread_num按multiple_io16均摊计算model_thread_num1最终调用/workspace/FunASR/runtime/websocket/build/bin/funasr-wss-server-2pass启动并默认加载 runtime/ssl_key/server.crt 与 runtime/ssl_key/server.key 启用 SSL。客户端测试端口注意是宿主机的 10096python3 funasr_wss_client.py --host 127.0.0.1 --port 10096 --mode 2pass3.3 文件转写服务普通话CPU 离线镜像拉取并启动 Docker 镜像离线镜像funasr-runtime-sdk-cpu-0.4.7端口 10095 对 10095sudo 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 --privilegedtrue \ -v $PWD/funasr-runtime-resources/models:/workspace/models \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.7启动服务启动funasr-wss-server注意比 2pass 服务多了一个语言模型参数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_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 21 run_server.sh 的线程策略与 2pass 版一致核数探测 multiple_io16均摊 IO 线程区别在于默认模型使用带时间戳/标点的iic/speech_paraformer-large-vad-punc_asr_nat-...-onnx并额外传入--lm-dirn-gram 语言模型iic/speech_ngram_lm_zh-cn-ai-wesp-fst。客户端测试文件转写走--mode offline--audio_in指定音频文件python3 funasr_wss_client.py --host 127.0.0.1 --port 10095 --mode offline --audio_in ../audio/asr_example.wav3.4 两类部署的模型配置对照配置项实时 2pass在线镜像文件转写离线 CPU 镜像服务二进制funasr-wss-server-2passfunasr-wss-server主模型--model-dirdamo/speech_paraformer-large_asr_nat-...-onnx可换 timestamp/nn 热词变体同左脚本默认iic/speech_paraformer-large-vad-punc_...-onnx在线模型--online-model-dirdamo/speech_paraformer-large_asr_nat-...-online-onnx无VAD--vad-dirdamo/speech_fsmn_vad_zh-cn-16k-common-onnxdamo/speech_fsmn_vad_zh-cn-16k-common-onnx标点--punc-dirdamo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnxdamo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx语言模型--lm-dir无damo/speech_ngram_lm_zh-cn-ai-wesp-fstITN--itn-dirthuduj12/fst_itn_zhthuduj12/fst_itn_zh客户端--mode2passoffline客户端端口10096宿主→10095容器10095可以推断2pass 实时链路用「在线模型低延迟出字 离线模型高精度纠错」的组合而离线转写链路则叠加 n-gram 语言模型进一步提升长文本准确率两条链路共享同一套 WebSocket 协议与热词机制。四、延伸阅读与协议细节WebSocket 协议与消息格式runtime/docs/websocket_protocol.md 及各语言 SDK 指南 runtime/docs/SDK_tutorial.md在线/离线服务进阶配置runtime/docs/SDK_advanced_guide_online.md、runtime/docs/SDK_advanced_guide_offline.md含 GPU 版本指南Python WebSocket 服务完整示例runtime/python/websocket/README.md其他运行时栈ONNX Runtimeruntime/onnxruntime/、C# / Java / Go / CSharp 客户端runtime/csharp/、runtime/java/、runtime/golang/以及 runtime/triton_gpu/ 等可按目标平台选型热词后处理服务端热词增强逻辑还可参见 funasr/utils/postprocess_hotwords.py 及其测试 tests/test_postprocess_hotwords.py。五、小结FunASR 的运行时快速上手可归纳为三条决策线开发验证选 Python WebSocket 服务funasr_wss_server.pyfunasr_wss_client.py5 行命令即可跑通 2pass 全链路且源码层面已具备线程池 信号量的多客户端并发能力生产实时链路选在线 Docker 镜像 run_server_2pass.sh批量文件转写选离线 CPU 镜像 run_server.sh。两类 Docker 部署通过统一的/workspace/models模型目录、hotwords.txt热词格式热词 权重与--certfile 0关 SSL 等约定保持一致客户端只需切换--mode与端口即可完成联调。【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表