语音检测
语音段指的是音频数据中人在说话的部分。音频数据包含人声以及其他部分,例如,静音或背景噪音等。在进行语音识别之前,会先检测语音段,并只针对语音段进行处理。这是为了忽略不必要的音频段,从而减少计算量,并防止错误地将非语音部分识别为语音。AmiVoice API 使用深度学习模型来区分人声和其他声音,相比仅使用音量的语音检测方法,能够以更高的精度检测语音。
下图显示了客户端向 AmiVoice API 发送音频数据时的流程。首先进行语音检测,然后进行语音识别处理。图中紫色带表示语音段。检测到 3 个语音段,并对每个语音段进行语音识别处理。
异步 HTTP 接口和 WebSocket 接口可以获取每个语音段的时间信息、语音识别结果和置信度。详情请参阅语音段结果。此外,WebSocket 接口可以实时接收语音开始和结束的时间。详情请参阅获取状态事件。
同步 HTTP 接口无法获取语音段结果。
调整语音检测参数
可以根据使用场景调整语音检测参数。默认值已设置为适合 AmiVoice API 大多数使用场景的值,因此建议先使用默认设置进行语音识别测试,观察效果后再根据需要调整参数。对于口述笔录或会议记录等应用,通常无需更改。对于呼叫中心 IVR 或与机器人对话等应用,可能需要更改灵敏度或语音结束检测时间等特定参数。有关可调整参数的详细信息和设置方法,请参阅 segmenterProperties。
以下是参数调整的示例:
声音非常小的场景
降低 powerThreshold 的值可以更容易检测到较小音量的声音。
segmenterProperties="powerThreshold=0"
有大量背景音乐、保持音乐或非稳态噪音的场景
在噪音非常多的场景中,可能会错误地将不包含人声的噪音检测为人声。在这种情况下,增加 threshold 的值可以降低语音检测的灵敏度,从而减少噪音的误检测。
然而,如果设置的值过大,可能会导致漏检语音。
segmenterProperties="threshold=9000"
需要快速响应"是"、"否"等短语音时
默认情况下,系统会等待语音结束后 postTime 设置的 550 毫秒静音时间,才判断为语音结束。对于"是"、"否"等短语音,这个时间通常太长,可以将其缩短到 250-300 毫秒左右,以缩短获取语音识别结果的时间,实现更实时的交互。
但是,如果设置得太短,可能会在语音中途就判断为结束,所以通常不需要更改。
segmenterProperties="postTime=250"