做了一个 STT 音频网关:弱网下实时断句 + VAD 前置,减少 30% 无效识别

13 天前
 guocf20

大家好,最近在做实时语音识别( STT )相关的项目时,踩了不少坑。

目前市面上大多数 STT 服务,基本都是基于「原始音频流 + TCP 直推」的假设来设计的, 默认网络稳定、客户端性能充足。但在弱网、实时交互、边缘设备等场景下, 音频往往是零碎、不连续的,直接送给 STT 会导致:

所以我单独做了一个 STT 前置音频网关, 放在客户端和 STT 服务之间,专门负责音频的预处理和断句。

这个网关主要做了几件事:

整体效果如下:

实现上目前集成了:

目标并不是替代 STT ,而是在 不改动 STT 服务本身的前提下, 显著改善实时语音交互体验,尤其是在弱网和实时对话场景。

项目地址: https://github.com/guocf20/Aeroshell_audio

目前功能还在持续迭代中,代码也比较原始,欢迎试用、拍砖、提 PR 。

891 次点击
所在节点    分享创造
4 条回复
liangdi
13 天前
有点意思,我部署测试一下
guocf20
13 天前
@liangdi 客户端需要采用 相同的参数编码参数,没有做协商,后面再慢慢完善。并且格式要和数据包对齐哈,音频帧长度(2 字节)+音频帧+参考音频长度(2 字节)+音频参考帧。没有远端输入的话就设置长度为 0 ,主要是用于实时对话的回音消除需要。而且现在没有做 FEC 这些。
hanguofu
12 天前
谢谢分享~请问支持什么语言啊?
guocf20
12 天前
@hanguofu 客户端不限制语言。 这是服务端,你按照代码格式传 opus 数据即可,就会得到干净的 pcm 数据,这样喂给 STT 的数据少,而且清晰,减少误判。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1184603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX