您的位置:首页 > 编程语言 > Python开发

Python实现基于BIC的语音对话分割(二)

2017-08-13 12:23 1276 查看

1. 语音多分割点检测

在上一篇博客<Python实现基于BIC的语音对话分割(一)>中,我们介绍了基于BIC(贝叶斯信息准则)的语音分割问题,有一个假设是这段语音中只有一个分割点,即语音对应的特征服从下面的分布:

模型H1:x1...xi∼N(μ1,Σ1);xi+1...xN∼N(μ2,Σ2)

但是一个分割点的检测在实际语音应用中不是很实用,因此我们提出多分割点的检测算法,基本思想如下:

初始化检测窗口[wStart,wEnd];

在[wStart,wEnd]运行BIC算法检测是否有分割点;

若2中存在分割点,则移动检测窗口[wStart+BICloc,wEnd+BICloc],不改变检测窗口大小;若2中不存在分割点,则不移动检测窗口的位置,调整wEnd,检测窗口变为[wStart,wEnd+wGrow];

重复2,3步直到wEnd超过整个语音的结束点,停止检测过程。

可以参看下面这个形象的图来理解多分割点检测过程:



图 基于BIC的多分割点检测流程

2. VAD对分割点进行筛选

在python中实现上述的多分割点检测算法,对一个四对话的语音材料进行仿真,最终的分割结果如下图所示,可以看到,语音的分割点位置基本正确,但是语音最开始的那段静音的结束点也被记录成分割点。



为了解决非法分割点的问题,我们在实现中引入VAD(Voice Activity Detection)来筛选分割点:

根据Multi segmentation处理结束的分割点进行语音分段;

对每段语音进行VAD检测,若VAD检测有语音端点,则不做处理;若VAD检测无语音端点,则剔除该分割点。那么最终的语音分割效果如下图所示:



3. 代码

Sample代码请访问如下的Github地址:

https://github.com/wblgers/py_speech_seg

欢迎使用并提出建议!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语音分割 BIC VAD python