您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

MRCP学习笔记-语音识别资源的事件和headers详解

2018-07-23 16:24:06   作者:   来源:CTI论坛   评论:0  点击:


  在上一节的分享中,我们介绍了语音识别资源的六个标准的methods和五个语音注册的methods。今天,我们继续介绍语音识别资源中的三个事件,三十三个headers和十二个语音注册的headers。
  1、在语音识别资源中,MRCP支持了三种事件,它们分别是START-OF-INPUT,RECOGNITION-COMPLETE和INTERPRETATION-COMPLETE。
  START-OF-INPUT事件是由语音识别资源侧回复的事件消息,它通知MRCP客户端资源服务器已经收到了语音输入或DTMF输入。具体的输入数据类型通过消息体中的Input-Type来表示。大部分情况下,此事件用来支持MRCP客户端检测打断或停止语音回放。这里读者要注意,语音识别资源不会对热词识别模式生成此事件。具体的事件使用场景在上一讲做已经介绍,读者可以查阅历史文档来进一步学习。
  RECOGNITION-COMPLETE是语音识别资源生成的事件消息,它用来对MRCP客户端说明,识别处理已经完成,并且通过消息体传输了识别结果。事件消息体中的Completion-Cause和可选的Completion-Reason头用来表示完成识别的状态。在前面的章节中,我们提供了完整的识别流程消息说明,用户可以查阅。这里,我们仅简单列出一个RECOGNITION-COMPLETE示例(服务器端->客户端):
  
  这里,如果是成功的识别流程,返回的识别结果通过语音文件格式。
  INTERPRETATION-COMPLETE和前面提到的RECOGNITION-COMPLETE类似,但是它表示的是解析过程完成(不是识别过程),并且传输了解析结果。我们在上一讲中也提供了完整的示例流程,读者可以查阅。这里,我们提供一个响应部分的具体的示例如下(服务器端->客户端):
  2、现在,我们开始介绍语音识别资源的headers。因为篇幅比较长,笔者尽可能对每个header做出解释,如果有不详细的地方,建议读者查看RFC标准。现在,我们介绍第一个header,也是RECOGNITION-COMPLETE事件消息中总是出现的header-Completion-Cause。因为,此头涉及了失败原因码的完整详解,所以,笔者专门把此header单独拿出来做完整的介绍。它用来表示完成的具体原因,如果识别失败的话,它会支持相关的识别原因码。注意,Completion-Cause也会出现在DEFINE-GRAMMAR的请求的对应响应消息中,它会说明请求中访问结果或编译的语法结果。具体的细节请看如下示例图(原因码,原因名称和具体解释):
  具体的语法示例:Completion-Cause: 001 no-match
  3、刚才,笔者介绍了事件消息中的第一大“头”-Completion-Cause。现在我们列出其余的headers和具体的示例说明。
  • Completion-Reason,它是可选的header,出现在Completion-Cause中,说明请求结束的原因,可用来支持客户端的日志消息。具体的示例如:Completion-Reason:Recursive grammars not supported。
  • Failed-URI,此头用来表示携带的URL资源访问失败。示例:Failed-URI:http://192.168.1.1/numbers.grxml。
  • Failed-URI-Cause,此头配合Failed-URI使用,表示失败码。例如:Failed-URI-Cause:404 Not Found。
  • Recognition-Mode,此header用来表示识别的模式类型,可支持normal或hotword模式。我们已经在前面的章节中介绍过这两种识别类型,这里不再介绍。示例如:Recognition-Mode:hotword。
  • Input-Type,此header会出现在START-OF-INPUT的事件中,它用来表示检测到的输入类型(DTMF或speech),其示例:Input-Type:speech。
  • Confidence-Threshold,此header用来设置一个安全阀值,设置最低的识别级别保证识别的成功率。如果识别结果携带的安全级别低于安全阀值,则返回一个Completion-Cause header,错误码为001 no-match。其取值范围在0.0–1.0之间。示例:Confidence-Threshold:0.5。
  • Sensitivity-Level,此header用来语音识别检测的敏感度水平,对其背景噪音进行过滤。敏感度比较低的话,则说明对其语音毕竟噪音不太敏感。此header通常是在per-RECOGNIZE请求设置。示例:Sensitivity-Level:0.65。
  • Speech-Vs-Accuracy,此header用来控制对性能和准确率的调整设置,其取值范围从0.0-1.0之间。取值越高,说明要求的准确性越高,但是消耗更多的CPU资源。此header通过per-RECOGNIZE 请求来进行设定。示例:
  • Speed-Vs-Accuracy:0.35。
  • N-Best-List-Length,此header表示MRCP客户端可以接收多个语音识别资源返回的识别结果,最大可以支持N个返回的可选识别结果。这里读者要注意,不同的返回结果支持不同的语法路径,只有安全级别大于安全阀值的才会返回到客户端。语音设备资源可以返回低于N的结果,如果返回比较大的数值N的话,需要语音识别资源增加其处理能力。这也非常容易理解的,它的取值会影响语音识别资源的性能。此header通过per-RECOGNIZE请求设置,默认(最小值)为1。示例:N-Best-List-Length:5。
  • No-Input-Timeout,此header是一个定时器,它用来检测在一定时间内,识别流程开始以后,系统没有检测到用户的语音输入或DTMF。如果No-Input-Timeout超时,语音识别资源会生成一个RECOGNITION-COMPLETE事件,携带Completion-Cause,其值为:002 no-input-timeout。其时间取值以毫秒为单位,示例:No-Input-Timeout:3000。
  • Recognition-Timeout,此定时器是用来限定整个识别处理时间。其header也可用来防止背景噪音占用了语音识别资源而导致的识别时间延长。这里要注意,在两种识别模式下,返回的错误码有所区别,读者可以查阅RFC来做进一步的研究。默认设置为10秒,以毫秒为单位,示例:Recognition-Timeout:7000。
  • Speech-Complete-Timeout,此header用来表示说话人已经停止说话,语音识别资源成功返回结果之间所必须消耗的时间。当然,如果此设置太短,则可能导致语句被打断;如果太长则会导致系统响应变慢。其取值以毫秒为单位,取值范围从300到1000毫秒之间。示例:Speech-Complete-Timeout:500。
  • Speech-Incomplete-Timeout,此header和上面的Speech-Complete-Timeout的使用方式非常类似,但是它使用的场景有所不同。有的情况下,语音之前的静音或不正确的语法前缀无法全部匹配活动的语法。如果触发了此定时器的话,语音识别资源会生成一个RECOGNITION-RESULT 事件,此事件携带Completion-Cause,语言码设定的值为013 partial-match(部分匹配)。此header也可以使用在另外一种场景中,有可能说话人语音邮件成功匹配了语音识别资源,但是说话人可能呼吸停顿,想继续说的时候,仍然需要匹配相应的语音识别资源。通常情况下,此定时器设置的时长会大于Speech-Complete-Timeout的时长,这样,可以支持说话人短暂的停顿。此取值以毫秒为单位,取值范围从0到最大值。示例:Speech-Incomplete-Timeout:1000。
  • Hotword-Max-Duration,此header只能使用在hotword的模式下,用来限定需要识别的语句最大长度。此header配合Hotword-Min-Duration来使用,防止识别的语句过长或过短。示例:Hotword-Max-Duration:5000。
  • Hotword-Min-Duration,此header只能使用在hotword的模式下,用来限定需要识别的语句最小长度。此header配合Hotword-Max-Duration来使用,防止识别的语句过长或过短。示例:Hotword-Min-Duration:5000。
  • DTMF-Interdigit-Timeout,此header用来设定在语音识别生成结果之前,DTMF按键输入之间的时间间隔。此header可能出现在RECOGNIZE,SET-PARAMS,或GET-PARAMS。它以毫秒为单位,默认是5000毫秒,示例:DTMF-Interdigit-Timeout:3000。
  • DTMF-Term-Timeout,此header和以上header类似,但是它应用的场景是成功匹配语法以后,仍然需要进一步的DTMF输入流程。它用来支持长数字序列的输入和进一步的输入验证的场景中。示例:DTMF-Term-Timeout:2000。
  • DTMF-Term-Char,此header用来设定某个特定字符来结束DTMF输入。例如,大家经常使用的“#”。我们按#来表示我们的DTMF结果输入完成。示例:DTMF-Term-Char:#。
  • DTMF-Buffer-Time,此header用来表示表示DTMF类型的大小,通过缓冲的方式保存。语音识别资源可以支持在RECOGNIZE请求之间的DTMF按键,并且通过缓冲来保存。当发起新的RECOGNIZE请求时,首先使用缓冲中的数据内容进行匹配识别,如果缓冲中的数据不能完全支持识别资源时,用户则需要输入更多的数字按键来匹配活动的语法。这里读者要注意,因为平台的不同,可能此header的设置也不同。示例:DTMF-Buffer-Time:10000。
  • Clear-DTMF-Buffer,此header用来清理缓冲中的DTMF数据。它通过RECOGNIZE请求来设置。默认设置为false。如果设置为true表示清理缓冲。示例:Clear-DTMF-Buffer:true。
  • Save-Waveform:此header用来表示是否保存识别的语音文件。如果保存,则此值设置为true,捕获的语音流通过RECOGNITION-COMPLETE事件的Waveform-URI表示。MRCP客户端可通过此URL获取到从语音文件。默认值是false,示例:Save-Waveform:true。
  • Waveform-URI,此header用来支持MRCP客户端通过此header的URL获取或访问语音文件。此heade同时支持了size(以bytes为单位)和duration(毫秒)的取值。其示例是:Waveform-URI:;size=8000;duration=1000。
  • Input-Waveform-URI,此header用来为RECOGNITION提供一个语音文件而不是使用媒体会话来提供语音文件。此功能的目的是执行一个重新识别的流程,使用不同的语法和和以前捕捉的语音进行对比来测试语法的覆盖范围。其示例:Input-Waveform-URI:http://10.0.0.1/utt01.wav。
  • Media-Type,此header表示语音文件支持的媒体类型。其示例:Media-Type:audio/x-wav。
  • Start-Input-Timers,此header会出现在RECOGNIZE请求中,通知语音识别引擎是否启动No-Input-Timeout定时器。默认值为true。示例是:Start-Input-Timers:false。
  • Speech-Language,此header表示语音识别默认支持的语法语言。其示例:Speech-Language:de-CH。
  • Cancel-If-Queue,此header用来表示多个RECOGNIZE请求是有队列支持。如果此值为true,则表示没有使用队列,IN-PROGRESSRECOGNIZE请求已被取消。已取消的识别请求会带一个RECOGNITION-COMPLETE事件,这个事件的消息体的header带Completion-Cause,设置的值为011 cancelled。如果是false,则表示RECOGNIZE请求会加入到队列中。此header没有默认值,示例为:Cancel-If-Queue:true。
  • New-Audio-Channel,此header通过RECOGNIZE来设定,如果是true,则表示对语音资源来说,从此刻开始,从一个新的通道中收到了语音流。通常情况下,语音识别资源会解析为一个新的请求,重新设置终端的算法,因此会丢弃任何已执行的通道。此功能非常有用,它可使用已存在的会话重用在一个新的电话呼叫的环境中。默认值为false,示例为:New-Audio-Channel:true。
  • Ver-Buffer-Utterance,此header可以通过RECOGNIZE请求中设置,如果设置为true,则表示语音识别资源可以使用缓冲中的可用的语音数据,此语音数据可用于后期说话人验证引擎环境。当然,这里一定要注意,说话人验证资源一定要和识别请求共享一个会话。其示例是:Ver-Buffer-Utterance:true。
  • Early-No-Match,此header用来表示语音识别引擎是否执行语法的早期匹配。它可以无需等待终端提示完成语音输入然后开始识别的流程。语音识别引擎如果不支持早期匹配的话,可能会忽略此header值。默认值是false。其语法示例为:Early-No-Match:true。
  • Interpret-Text,此header用来支持INTERPRET请求,指示需要解析的文本。INTERPRET请求中携带了text/plain消息。其示例为:Interpret-Text:text@example.com。
  • Recognizer-Context-Block,此header用来通过GET-PARAMS取值或通过SET-PARAMS来设置语音识别的内容数据段。每个识别引擎平台的内容数据段都是完全不同的,包括了会话,终端设置等相关数据。其示例为:Recognizer-Context-Block:data@vendor-x.com。
  4、语音注册的headers包括了十二个headers。
  Enroll-Utterance用来表示短语是否被注册,是通过RECOGNIZE请求中设定。如果RECOGNIZE请求中设置了Enroll-Utterance为true的话,它仅能支持注册会话。其示例为:Enroll-Utterance:true。
  • Num-Min-Consistent-Pronunciations,此header表示从用户侧获得的最少连续的发音短语。此短语会成为注册的短语,最后接纳为个人的语法。此header可以通过per-START-PHRASE-ENROLLMENT请求或SET-PARAMS来设置,其示例为:Num-Min-Consistent-Pronunciations:1。
  • Consistency-Threshold,此header应用在语法注册的过程中,用来表示前面注册短语的发音和当前短语的相似性。此值越高,说明介于其句子和短语发音匹配非常接近。其语法示例为:Consistency-Threshold:0.75。
  • Clash-Threshold,此header用来衡量语句短语和当前个人语法中的短语的相似度或接近程度。例如:两个不同的拼写但是它们的发音困难非常相似:
  “John Smith”和“Jon Smits”。这样就会导致识别资源发现他们的不同。较小的取值会降低已检测到的差异的数量。取值范围从0到1,其语法示例:Consistency-Threshold:0.75 。
  • Personal-Grammar-URI,其header表示此URL是一个个人的语法。它会出现在START-PHRASE-ENROLLMENT,MODIFY-PHRASE,或DELETE-PHRASE的请求中。其语法示例为:Personal-Grammar-URI:http://example.com/enroll/user1.dat。
  • Phrase-ID,此header表示的一个短语ID确认消息。在START-PHRASE-ENROLLMENT,MODIFY-PHRASE或者DELETE-PHRASE的请求中使用,表明其特别的ID号,对此ID进行相应的处理。其语法示例为:Phrase-ID:name_joe_bloggs。
  • New-Phrase-ID,此header应用在MODIFY-PHRASE请求中,用来表示对目前存在的ID声明一个新的短语ID。其语法示例为:New-Phrase-ID:name_joe_bloggs_02。
  • Phrase-NL,此header用来表示注册语法相应的自然语言或语义解析。当短语识别以后,返回的解析文本结果。其语法示例为:Phrase-NL:item01。
  • Weight,此header表示一个短语发生的似然程度。从概念上来说,这个权重值和SRGS语法中的item属性weight类似。此header可能出现在START-PHRASE-ENROLLMENT请求中来设定一个注册语法的权重,也可能出现在MODIFY-PHRASE的请求中来修改权重值。其语法示例为:Weight:2.0。
  • Save-Best-Waveform,此header设置为true的话,用来支持客户端要求语音识别资源在注册会话的生命周期内保存捕捉的语音数据,此数据是最佳的重复短语。语音识别资源必须对识别语音进行录制,并且通过URL来返回到客户端,在END-PHRASE-ENROLLMENT中携带一个Waveform-URI表示语音URL路径。如果没有录制成功或发送错误的话,语音识别资源必须返回一个空的URL。
  • Confusable-Phrases-URI,此header会出现在RECOGNIZE的请求中用来表示一个语法URL,这个URL中的短语可能没有注册或无效的短语。无法注册的短语也可能是一个命令短语,所以不能注册。其语法示例为:Confusable-Phrase-URI:file://c:\data\commands.dat。
  • Abort-Phrase-Enrollment,此header会出现在END-PHRASE-ENROLLMENT的请求中。如果其值设置为true,则表示语音识别资源会终止正在被注册的短语。其语法示例为:Abort-Phrase-Enrollment:true。
  5、在今天的分享中,我们完整地介绍了语音识别资源中的三个事件,三十三个headers和十二个语音注册的headers。针对每一个header,笔者给出了具体的解释,使用注意事项和一些必要的语法示例。笔者相信,笔者的解释也可能出现偏差,虽然完全覆盖了语音识别资源的所有headers,但这些分享也不一定完全能够满足读者学习的需要,读者仍然需要在使用过程中不断测试加深对这些header的学习。到此为止,笔者已经完整介绍了语音识别资源所有相关的methods,事件和headers。
  



  unimrcp-MRCP协议学习分享,QQ群号:208136295
  关注微信公众号:asterisk-cn,获得有价值的行业分享
  freepbx 技术论坛:www.ippbx.org.cn
  Asterisk, freepbx技术文档: www.freepbx.org.cn
  欧米(Omni)智能客服解决方案
  融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com

【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题