新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleSpeech 流式 ASR 客户端实战:从 WebSocket 协议到麦克风实时识别

发布时间:2026/9/25 3:11:52来源:尧图网络
PaddleSpeech 流式 ASR 客户端实战:从 WebSocket 协议到麦克风实时识别
人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载本文基于 PaddleSpeech 仓库中流式语音识别服务测试目录下的客户端文档README.md / README_cn.md展开完整讲解流式 ASR 服务的两种客户端用法基于 WAV 文件的paddlespeech_client asr_online命令行客户端以及直接调用本地麦克风设备的microphone_client.py。读完后你将能够独立搭建“服务端 客户端”的流式识别链路理解 start/end 信号、分块音频发送与服务端就绪应答的 WebSocket 交互协议并能根据源码为客户端扩展自定义采样参数或标点恢复功能。一、功能定位流式 ASR 服务为什么需要客户端测试脚本PaddleSpeech 将语音能力封装为可部署的 Server 服务流式 ASRonline ASR通过 WebSocket 协议提供低延迟的边说边识别能力。仓库中paddlespeech/server/tests/asr/online/目录专门放置了用于验证该服务的客户端脚本microphone_client.py基于 PyAudio 抓取麦克风音频模拟真实实时说话场景README_cn.md给出了基于 WAV 文件的paddlespeech_client asr_online命令用法。两者共同构成了一套完整的流式 ASR 客户端验证工具集前者验证“设备级实时链路”后者验证“文件级分块传输链路”。理解这两种客户端也是理解整个流式 ASR 服务通信协议的最佳切入点。二、环境准备与安装文档给出的环境前提摘自原文档“Install”一节推荐paddlepaddle 2.4rc 及以上版本PaddleSpeech 可从 medium、hard 两种安装方式中选择一种安装具体步骤见 安装文档。除主包外本文涉及的两类客户端还依赖以下第三方库从源码 import 语句可确认客户端关键依赖依据paddlespeech_client asr_onlinewebsockets、soundfile、requestspaddlespeech_client.py 顶部 importmicrophone_client.pypyaudio、websocketsmicrophone_client.py 顶部 import其中pyaudio依赖系统 PortAudio 库仅麦克风客户端需要纯文件客户端无需安装。三、先启动流式 ASR 服务端客户端文档隐含了一个前提本地已运行流式 ASR 服务端。PaddleSpeech Server 通过统一入口paddlespeech_server启动流式 ASR 对应的示例配置为 ws_conformer_application.yaml同目录还有 ws_ds2_application.yaml、ws_conformer_wenetspeech_application_faster.yaml 等cd paddlespeech/server paddlespeech_server start --config_file conf/ws_conformer_application.yaml该配置的关键字段摘自配置原文host: 0.0.0.0 port: 8090 # task choices [asr_online, tts_online] # websocket only support online engine type. protocol: websocket engine_list: [asr_online] asr_online: model_type: conformer_online_multicn am_model: # am 静态模型 pdmodel 文件 [可选] am_params: # am 静态模型 pdiparams 文件 [可选] lang: zh sample_rate: 16000 num_decoding_left_chunks: -1 # -1 表示使用全部左 chunk非严格流式约束 continuous_decoding: True # endpoint 触发后继续解码 device: cpu chunk_buffer_conf: window_n: 7 # 窗口帧数 shift_n: 4 # 步长帧数 window_ms: 25 # 窗口长度(ms) shift_ms: 10 # 步进长度(ms) sample_rate: 16000 sample_width: 2需要特别注意的端口一致性示例配置中服务端监听port: 8090而本文客户端的默认端口是8091见下文参数表。实际使用时要么修改配置中的port为 8091要么在客户端命令中显式传--port 8090两侧必须对齐。四、准备测试音频文档明确要求客户端输入应为WAV 文件.wav且采样率必须与模型一致示例模型为 16000 Hz。仓库提供的示例音频下载命令wget -c https://paddlespeech.cdn.bcebos.com/PaddleAudio/zh.wav从源码可以确认这一约束的落地方式asr_online客户端的底层处理器 ASRWsAudioHandler.read_wave 在读取音频时断言sample_rate 16000并按85ms为一个 chunk 切分音频chunk_size int(85 * sample_rate / 1000)不足一个 chunk 的尾部会补零填充后发送。也就是说WAV 文件会被切成若干 85ms 的 int16 PCM 小块逐块通过 WebSocket 发送这正是模拟流式输入的关键设计。五、命令行客户端paddlespeech_client asr_online文档给出的核心命令# 流式ASR paddlespeech_client asr_online --server_ip 127.0.0.1 --port 8091 --input ./zh.wav该命令由 ASROnlineClientExecutor 实现其完整参数含默认值如下参数默认值说明--server_ip127.0.0.1流式 ASR 服务端 IP--port8091流式 ASR 服务端端口--input必填待识别音频文件路径--sample_rate16000音频采样率需与服务端模型一致--langzh_cn语言类型--audio_formatwav音频格式--punc.server_ipNone标点恢复文本服务服务端 IP可选--punc.port8190标点恢复服务端端口可选执行流程上execute解析参数后调用ASRWsAudioHandler(server_ip, port, punc_server_ip..., punc_server_port...)并跑完handler.run(input)最终返回res[result]文本若配置了标点服务客户端会在拿到识别结果后调用TextHttpHandler完成标点恢复见 audio_handler.py 中punc_server的两处调用。5.1 客户端与服务端的 WebSocket 协议细节结合 ASRWsAudioHandler.run 与服务端 ws/asr_api.py 的源码一次完整的asr_online交互为客户端连接ws://{server_ip}:{port}/paddlespeech/asr/streamingPython 服务与 C 服务通过endpoint参数兼容见 audio_handler.py客户端发送 JSON 控制帧{name: test.wav, signal: start, nbest: 1}服务端收到start信号后才创建识别连接处理器并应答server_ready状态asr_api.pyresp {status: ok, signal: server_ready}客户端按 85ms 分块发送二进制 PCM 数据每发一块收一次中间识别结果客户端发送{signal: end}帧服务端返回finished信号并输出最终结果随后断开。这一“先 start 握手、二进制流、后 end 收尾”的三段式协议是 PaddleSpeech 流式 ASR 服务端的核心交互契约microphone_client.py与命令行客户端都严格遵循它。六、麦克风客户端microphone_client.py 源码解析文档第二种用法是直接使用麦克风设备# 直接调用麦克风设备 python microphone_client.pymicrophone_client.py 共约 160 行可拆成“录音线程 WebSocket 协程”两条线6.1 录音线程固定参数的 PyAudio 采集ASRWsAudioHandler注意与本节无关的同名类是paddlespeech/server/utils/audio_handler.py中的 HTTP/WS 文件客户端此处的类是麦克风场景的独立实现定义了固定的采集参数参数值含义formatpyaudio.paInt1616bit PCMchannels1单声道rate16000采样率 16kHz与模型匹配chunk5120每帧 5120 采样点即 320ms 一包urlws://127.0.0.1:8091/ws/asr硬编码的 WebSocket 地址microphone_client.pystartrecord开启后台线程持续从声卡读取 320ms 的数据块追加到self._frames用于实时发送与self.data_backup用于结束后落盘。6.2 WebSocket 协程与文档协议一一对应run()方法microphone_client.py的流程交互确认提示“是否开始录音(y/n)”输入y才启动录音发送 start 控制帧注意与命令行客户端的差异——这里nbest为5命令行客户端为 1且请求中的name固定为test.wav主循环中只要self._frames非空就await ws.send(...)取出最早的 320ms 块发送并打印每条服务端返回的中间结果用户按Ctrl cSIGINT时asyncio的CancelledError分支接管补发{signal: end}帧、读取最终结果、调用stoprecord停止录音并通过save()把data_backup中的原始音频写成./output.wav方便事后核对识别内容与实际音频是否一致__main__部分microphone_client.py将SIGINT/SIGTERM绑定到主任务取消保证 CtrlC 能优雅地走完“end 收尾 保存音频”流程而不是直接中断进程。从源码结构看该脚本的 WebSocket 地址硬编码为ws://127.0.0.1:8091/ws/asr。若你需要连接其他主机、端口或服务端路径需自行修改构造函数入参ASRWsAudioHandler(127.0.0.1, 8091)与 URL 拼接处第 34、151 行。七、两种客户端的选型与验证要点维度paddlespeech_client asr_onlinemicrophone_client.py输入来源WAV 文件16kHz本地麦克风实时采集分块粒度85ms源码固定320mschunk5120连接地址由--server_ip/--port指定endpoint/paddlespeech/asr/streaming硬编码ws://127.0.0.1:8091/ws/asrnbest15额外能力可挂标点恢复服务--punc.server_ip自动保存录音为./output.wav适用场景功能验证、回归测试、CI真机实时链路、体验调试验证时建议关注三点服务端是否在收到start后返回server_ready每个音频块是否都有中间结果回传流式性的直接体现end后的finished帧中result是否为完整文本。命令行客户端还会额外打印音频时长、耗时与 RTF 统计见 audio_handler.py可作为链路延迟的粗略参考。八、小结本文围绕 PaddleSpeech 流式 ASR 客户端测试文档梳理了从安装前提、示例音频准备到服务端启动、paddlespeech_client asr_online命令行客户端与microphone_client.py麦克风客户端的完整用法并基于 paddlespeech_client.py、audio_handler.py 与 ws/asr_api.py 的源码补充了 start/end 信号协议、85ms 分块、nbest 差异等文档未展开的实现细节。掌握这套客户端协议后你可以将同样的 start-流式传输-end 模式复用到 PaddleSpeech 的其他 WebSocket 流式服务如流式 TTS也可以在此基础上为麦克风客户端增加服务端地址参数化、标点服务等能力。仓库中 demos/streaming_asr_server/README_cn.md 与 paddlespeech/server/README_cn.md 进一步覆盖了服务端部署与 C Runtime 部署细节可作为延伸阅读。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐大麦抢票自动化从克隆到五分钟出票的完整操作手册大麦抢票自动化从克隆到五分钟出票的完整操作手册 零点点击后弹出已售罄的那一秒 零点整你在大麦抢票页面点下预订已售罄三个字已经出现在眼前。人类最GUI 自动化RPAPaddleSpeech 离线 ASR HTTP 客户端实战从 wav 到识别文本的完整请求链路解析PaddleSpeech 离线 ASR HTTP 客户端实战从 wav 到识别文本的完整请求链路解析 导读 本文聚焦 PaddleSpeech 服务端测试模块人工智能语音音频NLP媒体生成MNN sherpa-mnn C 示例详解从波文件离线识别、麦克风实时识别到 WebSocket 服务MNN sherpa mnn C 示例详解从波文件离线识别、麦克风实时识别到 WebSocket 服务 本文基于 MNN 仓库中 apps/framewo推理引擎大模型上一篇容器安全防护实战用Clair扫描Docker镜像漏洞的完整指南下一篇一键生成全链路性能报告Pinpoint Agent自动化分析工具详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TypeDoc @include 与 @includeCode 标签实战指南:在文档注释中嵌入外部文件、代码区域与行号片段 2026/9/25 4:54:30

TypeDoc @include 与 @includeCode 标签实战指南:在文档注释中嵌入外部文件、代码区域与行号片段

开发工具文档 【免费下载链接】typedoc Documentation generator for TypeScript projects. 项目地址: https://gitcode.com/gh_mirrors/ty/typedoc 点击查看 免费下载 TypeDoc 的 {include} 标签族允许你在 TSDoc 文档注释或外部 Markdown 文档中直接嵌入仓库里的…

阅读更多 →
LTSPICE参数变量与参数扫描实操指南:批量仿真高效探索设计空间 2026/9/25 4:54:24

LTSPICE参数变量与参数扫描实操指南:批量仿真高效探索设计空间

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
机械仪表与自动化会议论文投稿指南:EI/Scopus检索与见刊策略 2026/9/25 4:54:24

机械仪表与自动化会议论文投稿指南:EI/Scopus检索与见刊策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
TRON钱包选型指南:TronLink、Ledger、Bitget钱包深度对比 2026/9/25 4:54:24

TRON钱包选型指南:TronLink、Ledger、Bitget钱包深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
拯救者Y9000P软件卡顿根因与精准治理方案 2026/9/25 4:54:24

拯救者Y9000P软件卡顿根因与精准治理方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南 2026/9/25 4:54:23

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle 打开老页面只剩一块灰底,还提示“需要安装 Flash”…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉