语音识别接口(ASR)
启动ASR识别(和mrcp接口 detect_speech 用法一样)
APPcti_detect_speech_session asrproxy_addr vad_mode vad_min_active_time_ms vad_max_end_silence_time_ms vad_level vad_filter wait_speech_timeout_ms max_speech_time_ms hot_word asr_params asr_notify asr_notify_uuid asr_mode [record_mode] [record_template] [record_format]
例子:
APIuuid_cti_start_detect_speech uuid asrproxy_addr vad_mode vad_min_active_time_ms vad_max_end_silence_time_ms vad_level vad_filter wait_speech_timeout_ms max_speech_time_ms hot_word asr_params asr_notify asr_notify_uuid asr_mode [record_mode] [record_template] [record_format]
asrproxy_addr asrproxy程序IIP和端口,如果多个asrproxy,地址用逗号隔开如
ip1:port,ip2:port
,默认全局轮询模式,如果需要第一个失败才调用第二个,地址前面加一个*
字符,如*ip1:port,ip2:port
,就是先调用ip1,失败后在尝试ip2。vad_mode
- 0:使用本地VAD检测说话开始和结束
- 1:等待ASR反馈说开始和结束(需要ASR支持)
- 2:使用本地VAD检测检测说话开始,等待ASR反馈说话结束。
vad_min_active_time_ms 说话时间大于这个值才开始提交ASR
vad_max_end_silence_time_ms 静音时间大于这个值认为说话停止
vad_level vad检测灵敏度 0-3,值越大越迟钝,建议3
vad_filter 噪音过滤等级0-1.0,建议0.2,值越大过滤范围越大,会导致小的声音给过滤。 0.8启用神经网络的噪音过滤。
wait_speech_timeout_ms 最大等待说话时间,用于一句话识别(asr_mod:0),等待时间超过这个值还没说话,就停止。
max_speech_time_ms 说话事件超过这个值,会强制认为一句话结束。如果对接是是一句话识别ASR接口,建议设置60000以内。
hot_word ASR热词
asr_params ASR自定义参数
asr_notify ASR识别结果通知类型 0:ESL事件 1:FS的内部队列 2:ESL事件和FS的内部队列
asr_notify_uuid asr识别结果通知uuid
asr_mod 0:只识别一句话就停止 1: 执行一次会持续进行ASR识别,直到挂机或者调用uuid_cti_stop_detect_speech才停止ASR识别
停止ASR识别
APIuuid_cti_stop_detect_speech uuid
- uuid 操作通道的UUID
放音的同时执行ASR识别
类似mrcp接口 play_and_detect_speech
appcti_play_and_detect_speech <file> <mode> <interrupt> <vad_mode> <vad_filter> <asrproxy_addr> vad_min_active_time_ms vad_max_end_silence_time_ms wait_speech_timeout_ms max_speech_time_ms hot_word asr_params asr_notify_uuid record_mode record_template record_format
- file 放音文件
- mode 0:不启动ASR识别 1:放音的同时开启ASR识别; 2:放音完成之后才开启ASR识别。
- interrupt 打断模式:
- 0:关键词打断; 【关键词打断的可选功能,可以组合使用,比如要使用128和256,就设置384。】
- 16: 放音结束后识别到一句话就停止等待(执行完成)。
- 32 : 放音时识别到一句话,放音完成后就不等待(执行完成)(隐含16)。
- 64:放音时检测到声音就暂停放音(只暂停放音,识别结果如果没触发新的放音,还会恢复当前放音)。
- 128 : 放音时如果有被禁止打断(disablebreak)过滤的识别结果,放音完成时,如果用户不在说话中,重新尝试关键词匹配(识别结果前面会加一个P)。
- 256 : 放音时如果有未匹配的识别结果,放音完成时,如果用户不在说话中,再次尝试关键词匹配(识别结果前面会加一个P)。
- 512 : dtmf按键打断(默认只有符合按键终止符才会停止放音,如果需要不符合按键终止符也停止放音,就需要设置这个参数)
- 1:检测到声音就打断;
- 2:ASR识别到文字就打断;
- 3:ASR识别到一句话就打断。
- 0:关键词打断; 【关键词打断的可选功能,可以组合使用,比如要使用128和256,就设置384。】
- vad_mode
- 0:使用本地VAD检测说话开始和结束
- 1:等待ASR反馈说开始和结束(需要ASR支持)
- 2:使用本地VAD检测检测说话开始,等待ASR反馈说话结束。
- vad_filter 噪音过滤等级0-1。0.8使用深度神经网络过滤噪音。
- asrproxy_addr asr代理地址。
- vad_min_active_time_ms 说话时间大于这个值才开始提交ASR。
- vad_max_end_silence_time_ms 静音时间大于这个值认为说话停止。
- wait_speech_timeout_ms 放音完成后等待用户说话的等待时间。
- max_speech_time_ms 最大说话时间,说话时间超过这个值就停止ASR。
- hot_word ASR热词。
- asr_params ASR私有参数,JOSN格式
{\"变量\"=\"名字\"}
。例如:{\"group\":\"default\"}
,控制asrproxy使用那个asr配置组去识别。 - asr_notify_uuid asr识别结果通知uuid
- record_mode 录音方式。0:不录音,1:检测到声音开始录音,2:全部录音。
- record_template 录音路径模板。如果不是绝对路径,会把这个路径追加到FreeSWITCH的recordings后面。支持变量,比如日期 ${strftime(%Y-%m-%d)}。最后一个录音文件路径会保存到变量 ${cti_asr_last_record_filename}
- record_format 录音格式wav或者mp3
检测说话相关的参数说明
检测说话的流程如下
- 等待用户说话,等待的最大时间为(wait_speech_timeout_ms),如果超过这个时间不说话,就执行timeout。
- 用户说话了,如果说话的时间大于(vad_min_active_time_ms),就开始提交给ASR。
- 用户停止说话了,如果停止说话的时间大于(vad_max_end_silence_time_ms),就认为用户后面不会在说话了,结束ASR,如果小于(vad_max_end_silence_time_ms),继续等待用户说话。注意大部分ASR会强制这个参数为1秒以内。如果要设置很大的值,需要把打断模式改为0,VAD模式也设置0.
- 如果用户说话时间大于(max_speech_time_ms),强制结束ASR。
ASR识别结果通知
事件类型 SWITCH_EVENT_CUSTOM cti_asr
事件头
- Speech-Notify-UUID asr_notify_uuid
- Speech-Type
- b:检测到开始说话
- 0:识别结果更新,如果结果是空,表示远端VAD检测到开始说话
- 1:一句话结果 ASR_MODE_MULTI模式才有
- f:远端结束
- F:本段结束
- e:本段错误
- E:远端错误
- t:wait_speech_timeout 超时
- P:放音时的识别结果(打断模式128和256时放音时候说话才触发)
- Speech-Time 开始说话时间,linux时间戳(微妙)
事件体 识别结果