近日,喜马拉雅语音团队在wenet中增加了基于gRPC的流式语音识别的支持。本文将介绍wenet中的gRPC的设计和实现,并介绍喜马拉雅基于wenet和gRPC的语音识别微服务架构实践。
wenet介绍wenet是由出门问问公司推出的一款开源ASR工具,自问世开始便积聚了大量人气。常规的ASR工具,或把模型训练过程中的复杂细节进行封装,为算法人员的模型训练过程提供便利;或把kaldi的速度与pytorch的便利通过脚本的方式结合了起来,加速了模型的训练过程。
wenet与以往工具不同之处在于,自问世起,它就同时提供了基于python/pytorch的训练脚本和基于c++/libtorch的工程化部署方案,是真正面向工业界的ASR工具。
websocket介绍wenet与以往工具不同之处在于,自问世起,它就同时提供了基于python/pytorch的训练脚本和基于c++/libtorch的工程化部署方案,是真正面向工业界的ASR工具。
wenet自身也提供了基于websocket的服务端/客户端示例。诚然,websocket具备轻量级、简单易用的优点,但在大型服务体系中,它的缺点也很明显。
使用过wenet的websocket客户端的朋友们应该清楚,流式识别过程分为三个步骤。wenet中的协议如下,首先,设置模式为发送text,发送形如{{"signal","start"}{"nbest",1}}的json字符串标志开始,然后,设置模式为发送bytes,发送pcm数据,最后,设置模式为发送text,发送{{"signal","end"}}的json字符串标志结束。websocket服务端的解析逻辑也是相当麻烦。首先需判断获取的数据是text还是bytes,再执行相应逻辑。若为text,还需尝试进行json解析,判断是否存在signal/nbest这些key,解析过程需加上大量的异常处理逻辑。
对接口设计比较敏感的朋友们肯定已经发现了websocket的弊端,即接口无硬性约束,全靠文档或口头对接,调用过程极易出错。肯定有朋友会说,哎呀我不想写这些乱七八糟的消息构造/解析代码,我就想
转载请注明:http://www.0431gb208.com/sjszjzl/219.html