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扫