什么是打断
打断,就是机器人说话的时候,用户没等机器人说完,就开始说话。一般做法是检测到用户声音持续100-200ms就停止机器人说话,这样存在一个弊端,就是如果噪音很大的环境,或者用户身边有人说话,会导致错误的打断,本文主要介绍几个方法,来避免这个问题。
动态最小声音时间
VAD有这样一个参数 min_speak_ms [数字] 可选参数 默认100ms 最小的声音时间 单位毫秒
,默认值 100ms。
这个参数的含义是,设置一个最小的声音时间,只有声音持续时间超过这个值才认为是有效声音,触发打断和提交到ASR服务器识别。
为什么我选择了这个100ms作为这个默认值呢,因为电话接通后,很多人习惯说一声”喂”,或者”您好”, “喂”的持续时间一般是100-200s,”您好”的持续时间是 200-300ms.
开发业务流程的时候,可以动态设置这个值,来避免无效声音打断,比如电话接通后的第一个声音,设置100ms,后续声音设置,200-300ms。就可以非常有效避免错误打断。
关键词打断
2.1版本已经实现,用户停顿一下就提交ASR识别,把识别结果发送给业务程序,就是让业务程序控制是否需要打断。
检测到说话声音先暂停放音,识别不到有效文字后,恢复放音
VAD模块检测到用户声音后,暂停播放机器人说话声,同时开始提交声音流到ASR服务器识别,如果ASR服务器返回的不是有效语句, 恢复机器人说话(不是简单的从暂停的地方开始,而是利用VAD算法,定位到最近声音的起点,然后开始播放)下面举个例子说明。
机器人:你好,我是XX售楼部,请问你最近有(这个时候检查到用户端声音,暂停播放)
ASR识别到的文字不是有效回答。可能是环境噪音等。机器人恢复说话。
机器人:请问你最近有打算买房吗。(利用VAD检测到 打断点最近一个句子的开始位置开始放音,不再重复播放“你好,我是XX售楼部”,也不是简单的从打断点开始播放)。
这个方案,可以有效的解决 环境噪音等打断,导致机器人说话给停止,可以像真人一样,听到用户声音停顿一下继续接着说下去。
转自:http://www.ddrj.com/smartivr/break.html
相关推荐
VAD 的代码,用于语音的活跃检测,基础代码需要的可以下来看看
调用webrtc中的VAD算法,可以实现录音文件的语音端点检测,时延7.8ms
VAD算法的源程序,可用于静音检测方面算法的参考
语音端点检测算法,在matlab里面实现语音端点的准确检测。为读者开发噪声环境下的精确VAD提供思路。
android webrtc vad(静音检测) demo webrtc的vad静音检测音频处理模块,含源码。VAD 录音过程中,实时检测当前是否有人在讲话(语音活动检测,或者叫静音检测)。讲话时webRtcVad_Process返回true,不讲话时返回...
实现了使用DNN来做VAD的功能,模型非常小,使用了TDNN的网络结构,注意:需要在LINUX上执行,感觉效果还不错,欢迎大家使用并提出宝贵意见。
webrtc的静音检测(vad)部分单独封装为动态库,附带源码可以编译
使用ubuntu环境编译 从webrtc中抽离vad代码 编译后生成libwebrtc_vad_my.so test目录下是测试demo 将长语音中得speech片段分割保存成wav文件,在较高信噪比得测试文件中断句效果良好
VAD基于短时能量的端点检测函数,AudioVAD函数包括两个参数:short*的数据,long的数据长度。返回值为int类型的1或者0,表示该段数据是voice还是silence。 并附上用于测试的pcm数据。
基于c语言的语音活动检测算法,用于VAD开发借鉴和使用
vad_2010_03_01 from pudn. well.
适合VAD算法研究用的数据集,主要以噪声为主,16kz的wav格式,可自行合成
Silk VAD noise level estimation.
webrtc中的vad检测。 是从webrtc中把vad检测的代码给提取出来的,在vs2010下编译生成的,其中signal_process编成了静态库,在文件里面也包含。 webrtc vad检测
webrtc 去除vad
基于相关检测算法的语音活动检测( VAD),程序采用 matlab编程。
VAD函数调用关系(done).vsdx
语音边缘检测算法VAD检测,零熵法检测matlab
编译过的WEBRTC VAD代码,VC编译通过,能调试。