WebRTC端点检测使用中遇到的部分问题汇总
WebRTC端点检测使用中遇到的部分问题汇总
背景
端点检测技术作为语音识别等技术预处理截断的一项非常重要的技术一直以来是业界研究的重点,也可以说语音信号的端点检测精度直接影响后面进行的语音识别精度,而目前的端点检测算法主要受到以下几个因素的制约:
就目前端点检测算法来说主要有基于能量阈值的检测方法(能量方法又包括多中能量)、基于能量与过零率的检测方法、基于谱熵的检测方法、基于倒谱的检测方法等,这些方法在实际应用中对于环境的泛化能力较弱,算法的鲁棒性较低,主要受噪声、音量、远近场的不同等因素影响。
正文
几个月前公司的一个项目中需要做一个鲁棒性较好的端点检测算法来更换公司在用的基于能量与过零率实现的端点检测算法,经过一段时间的折腾(为什么说折腾呢?因为公司也没告诉我用什么算法,所以全靠我自己摸索了),最后我决定用Google的开源项目WebRTC试试(无奈,我只是个来实习生啊,苦)经过一个月的探索终于有点眉目了,我通过修改了WebRTC底层算法的部分逻辑实现又经过无数次实际环境中的测试终于有一天项目经理说合格了(激动的心,颤抖的手啊)。下面我将使用WebRTC的过程中遇到的部分问题分享出来供大家参考:
首先WebRTC的VAD模块返回的是每一帧音频数据是否为语音信号的标志位,也就是直接使用的话接收到的是一帧一帧拼接的语音数据,在实际项目中使用时不能满足实际需要,听到的声音断断续续的,所以这时就需要在WebRTC中VAD算法的基础上再进行一次封装,这次封装主要解决的为题是按照实际应用中的那样将每帧音频按照语音,非语音分成完整的段。
由于我们的使用环境噪声较大,信噪比较低,实际测试中端点检测时出现了将大量噪声判别为语音的情况,所以此时我通过修改WebRTC底层判别语音信号的能量阈值(vad_core.h)KMinEnergy,这样就可以过滤掉大部分低能量的噪声对端点检测算法的影响。
其次在WebRTC的VAD中判别语音还是非语音的高斯模型中在计算六个频段的似然比之后与设定的阈值比较时,分为两种情况:
原始的算法当满足这两者之一时就可以认为此帧为语音帧,通过实验这样做的方式得到的效果并不好,所以我通过屏蔽局部逻辑判断进行了测试,实验表明这样做效果更好,端点检测精度更高。
最后在修改上述地方后我通过开放似然比阈值接口实现了再多种环境下的端点检测模式的设定。
今天就先记录到这里,后期我再详细的描述WebRTC算法的工作流程和低信噪比环境下的优化。
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的WebRTC端点检测使用中遇到的部分问题汇总的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: MATLAB算法(函数)编译为C++动态
- 下一篇: Harbor2.2.1配置(trivy扫