1、在語(yǔ)音識別資源中,MRCP支持了三種事件,它們分別是START-OF-INPUT,RECOGNITION-COMPLETE和INTERPRETATION-COMPLETE。
START-OF-INPUT事件是由語(yǔ)音識別資源側回復的事件消息,它通知MRCP客戶(hù)端資源服務(wù)器已經(jīng)收到了語(yǔ)音輸入或DTMF輸入。具體的輸入數據類(lèi)型通過(guò)消息體中的Input-Type來(lái)表示。大部分情況下,此事件用來(lái)支持MRCP客戶(hù)端檢測打斷或停止語(yǔ)音回放。這里讀者要注意,語(yǔ)音識別資源不會(huì )對熱詞識別模式生成此事件。具體的事件使用場(chǎng)景在上一講做已經(jīng)介紹,讀者可以查閱歷史文檔來(lái)進(jìn)一步學(xué)習。
RECOGNITION-COMPLETE是語(yǔ)音識別資源生成的事件消息,它用來(lái)對MRCP客戶(hù)端說(shuō)明,識別處理已經(jīng)完成,并且通過(guò)消息體傳輸了識別結果。事件消息體中的Completion-Cause和可選的Completion-Reason頭用來(lái)表示完成識別的狀態(tài)。在前面的章節中,我們提供了完整的識別流程消息說(shuō)明,用戶(hù)可以查閱。這里,我們僅簡(jiǎn)單列出一個(gè)RECOGNITION-COMPLETE示例(服務(wù)器端->客戶(hù)端):

這里,如果是成功的識別流程,返回的識別結果通過(guò)語(yǔ)音文件格式。
INTERPRETATION-COMPLETE和前面提到的RECOGNITION-COMPLETE類(lèi)似,但是它表示的是解析過(guò)程完成(不是識別過(guò)程),并且傳輸了解析結果。我們在上一講中也提供了完整的示例流程,讀者可以查閱。這里,我們提供一個(gè)響應部分的具體的示例如下(服務(wù)器端->客戶(hù)端):

2、現在,我們開(kāi)始介紹語(yǔ)音識別資源的headers。因為篇幅比較長(cháng),筆者盡可能對每個(gè)header做出解釋?zhuān)绻胁辉敿毜牡胤剑ㄗh讀者查看RFC標準。現在,我們介紹第一個(gè)header,也是RECOGNITION-COMPLETE事件消息中總是出現的header-Completion-Cause。因為,此頭涉及了失敗原因碼的完整詳解,所以,筆者專(zhuān)門(mén)把此header單獨拿出來(lái)做完整的介紹。它用來(lái)表示完成的具體原因,如果識別失敗的話(huà),它會(huì )支持相關(guān)的識別原因碼。注意,Completion-Cause也會(huì )出現在DEFINE-GRAMMAR的請求的對應響應消息中,它會(huì )說(shuō)明請求中訪(fǎng)問(wèn)結果或編譯的語(yǔ)法結果。具體的細節請看如下示例圖(原因碼,原因名稱(chēng)和具體解釋?zhuān)?/div>

具體的語(yǔ)法示例:Completion-Cause: 001 no-match
3、剛才,筆者介紹了事件消息中的第一大“頭”-Completion-Cause。現在我們列出其余的headers和具體的示例說(shuō)明。
- Completion-Reason,它是可選的header,出現在Completion-Cause中,說(shuō)明請求結束的原因,可用來(lái)支持客戶(hù)端的日志消息。具體的示例如:Completion-Reason:Recursive grammars not supported。
- Failed-URI,此頭用來(lái)表示攜帶的URL資源訪(fǎng)問(wèn)失敗。示例:Failed-URI:http://192.168.1.1/numbers.grxml。
- Failed-URI-Cause,此頭配合Failed-URI使用,表示失敗碼。例如:Failed-URI-Cause:404 Not Found。
- Recognition-Mode,此header用來(lái)表示識別的模式類(lèi)型,可支持normal或hotword模式。我們已經(jīng)在前面的章節中介紹過(guò)這兩種識別類(lèi)型,這里不再介紹。示例如:Recognition-Mode:hotword。
- Input-Type,此header會(huì )出現在START-OF-INPUT的事件中,它用來(lái)表示檢測到的輸入類(lèi)型(DTMF或speech),其示例:Input-Type:speech。
- Confidence-Threshold,此header用來(lái)設置一個(gè)安全閥值,設置最低的識別級別保證識別的成功率。如果識別結果攜帶的安全級別低于安全閥值,則返回一個(gè)Completion-Cause header,錯誤碼為001 no-match。其取值范圍在0.0–1.0之間。示例:Confidence-Threshold:0.5。
- Sensitivity-Level,此header用來(lái)語(yǔ)音識別檢測的敏感度水平,對其背景噪音進(jìn)行過(guò)濾。敏感度比較低的話(huà),則說(shuō)明對其語(yǔ)音畢竟噪音不太敏感。此header通常是在per-RECOGNIZE請求設置。示例:Sensitivity-Level:0.65。
- Speech-Vs-Accuracy,此header用來(lái)控制對性能和準確率的調整設置,其取值范圍從0.0-1.0之間。取值越高,說(shuō)明要求的準確性越高,但是消耗更多的CPU資源。此header通過(guò)per-RECOGNIZE 請求來(lái)進(jìn)行設定。示例:
- Speed-Vs-Accuracy:0.35。
- N-Best-List-Length,此header表示MRCP客戶(hù)端可以接收多個(gè)語(yǔ)音識別資源返回的識別結果,最大可以支持N個(gè)返回的可選識別結果。這里讀者要注意,不同的返回結果支持不同的語(yǔ)法路徑,只有安全級別大于安全閥值的才會(huì )返回到客戶(hù)端。語(yǔ)音設備資源可以返回低于N的結果,如果返回比較大的數值N的話(huà),需要語(yǔ)音識別資源增加其處理能力。這也非常容易理解的,它的取值會(huì )影響語(yǔ)音識別資源的性能。此header通過(guò)per-RECOGNIZE請求設置,默認(最小值)為1。示例:N-Best-List-Length:5。
- No-Input-Timeout,此header是一個(gè)定時(shí)器,它用來(lái)檢測在一定時(shí)間內,識別流程開(kāi)始以后,系統沒(méi)有檢測到用戶(hù)的語(yǔ)音輸入或DTMF。如果No-Input-Timeout超時(shí),語(yǔ)音識別資源會(huì )生成一個(gè)RECOGNITION-COMPLETE事件,攜帶Completion-Cause,其值為:002 no-input-timeout。其時(shí)間取值以毫秒為單位,示例:No-Input-Timeout:3000。
- Recognition-Timeout,此定時(shí)器是用來(lái)限定整個(gè)識別處理時(shí)間。其header也可用來(lái)防止背景噪音占用了語(yǔ)音識別資源而導致的識別時(shí)間延長(cháng)。這里要注意,在兩種識別模式下,返回的錯誤碼有所區別,讀者可以查閱RFC來(lái)做進(jìn)一步的研究。默認設置為10秒,以毫秒為單位,示例:Recognition-Timeout:7000。
- Speech-Complete-Timeout,此header用來(lái)表示說(shuō)話(huà)人已經(jīng)停止說(shuō)話(huà),語(yǔ)音識別資源成功返回結果之間所必須消耗的時(shí)間。當然,如果此設置太短,則可能導致語(yǔ)句被打斷;如果太長(cháng)則會(huì )導致系統響應變慢。其取值以毫秒為單位,取值范圍從300到1000毫秒之間。示例:Speech-Complete-Timeout:500。
- Speech-Incomplete-Timeout,此header和上面的Speech-Complete-Timeout的使用方式非常類(lèi)似,但是它使用的場(chǎng)景有所不同。有的情況下,語(yǔ)音之前的靜音或不正確的語(yǔ)法前綴無(wú)法全部匹配活動(dòng)的語(yǔ)法。如果觸發(fā)了此定時(shí)器的話(huà),語(yǔ)音識別資源會(huì )生成一個(gè)RECOGNITION-RESULT 事件,此事件攜帶Completion-Cause,語(yǔ)言碼設定的值為013 partial-match(部分匹配)。此header也可以使用在另外一種場(chǎng)景中,有可能說(shuō)話(huà)人語(yǔ)音郵件成功匹配了語(yǔ)音識別資源,但是說(shuō)話(huà)人可能呼吸停頓,想繼續說(shuō)的時(shí)候,仍然需要匹配相應的語(yǔ)音識別資源。通常情況下,此定時(shí)器設置的時(shí)長(cháng)會(huì )大于Speech-Complete-Timeout的時(shí)長(cháng),這樣,可以支持說(shuō)話(huà)人短暫的停頓。此取值以毫秒為單位,取值范圍從0到最大值。示例:Speech-Incomplete-Timeout:1000。
- Hotword-Max-Duration,此header只能使用在hotword的模式下,用來(lái)限定需要識別的語(yǔ)句最大長(cháng)度。此header配合Hotword-Min-Duration來(lái)使用,防止識別的語(yǔ)句過(guò)長(cháng)或過(guò)短。示例:Hotword-Max-Duration:5000。
- Hotword-Min-Duration,此header只能使用在hotword的模式下,用來(lái)限定需要識別的語(yǔ)句最小長(cháng)度。此header配合Hotword-Max-Duration來(lái)使用,防止識別的語(yǔ)句過(guò)長(cháng)或過(guò)短。示例:Hotword-Min-Duration:5000。
- DTMF-Interdigit-Timeout,此header用來(lái)設定在語(yǔ)音識別生成結果之前,DTMF按鍵輸入之間的時(shí)間間隔。此header可能出現在RECOGNIZE,SET-PARAMS,或GET-PARAMS。它以毫秒為單位,默認是5000毫秒,示例:DTMF-Interdigit-Timeout:3000。
- DTMF-Term-Timeout,此header和以上header類(lèi)似,但是它應用的場(chǎng)景是成功匹配語(yǔ)法以后,仍然需要進(jìn)一步的DTMF輸入流程。它用來(lái)支持長(cháng)數字序列的輸入和進(jìn)一步的輸入驗證的場(chǎng)景中。示例:DTMF-Term-Timeout:2000。
- DTMF-Term-Char,此header用來(lái)設定某個(gè)特定字符來(lái)結束DTMF輸入。例如,大家經(jīng)常使用的“#”。我們按#來(lái)表示我們的DTMF結果輸入完成。示例:DTMF-Term-Char:#。
- DTMF-Buffer-Time,此header用來(lái)表示表示DTMF類(lèi)型的大小,通過(guò)緩沖的方式保存。語(yǔ)音識別資源可以支持在RECOGNIZE請求之間的DTMF按鍵,并且通過(guò)緩沖來(lái)保存。當發(fā)起新的RECOGNIZE請求時(shí),首先使用緩沖中的數據內容進(jìn)行匹配識別,如果緩沖中的數據不能完全支持識別資源時(shí),用戶(hù)則需要輸入更多的數字按鍵來(lái)匹配活動(dòng)的語(yǔ)法。這里讀者要注意,因為平臺的不同,可能此header的設置也不同。示例:DTMF-Buffer-Time:10000。
- Clear-DTMF-Buffer,此header用來(lái)清理緩沖中的DTMF數據。它通過(guò)RECOGNIZE請求來(lái)設置。默認設置為false。如果設置為true表示清理緩沖。示例:Clear-DTMF-Buffer:true。
- Save-Waveform:此header用來(lái)表示是否保存識別的語(yǔ)音文件。如果保存,則此值設置為true,捕獲的語(yǔ)音流通過(guò)RECOGNITION-COMPLETE事件的Waveform-URI表示。MRCP客戶(hù)端可通過(guò)此URL獲取到從語(yǔ)音文件。默認值是false,示例:Save-Waveform:true。
- Waveform-URI,此header用來(lái)支持MRCP客戶(hù)端通過(guò)此header的URL獲取或訪(fǎng)問(wèn)語(yǔ)音文件。此heade同時(shí)支持了size(以bytes為單位)和duration(毫秒)的取值。其示例是:Waveform-URI:;size=8000;duration=1000。
- Input-Waveform-URI,此header用來(lái)為RECOGNITION提供一個(gè)語(yǔ)音文件而不是使用媒體會(huì )話(huà)來(lái)提供語(yǔ)音文件。此功能的目的是執行一個(gè)重新識別的流程,使用不同的語(yǔ)法和和以前捕捉的語(yǔ)音進(jìn)行對比來(lái)測試語(yǔ)法的覆蓋范圍。其示例:Input-Waveform-URI:http://10.0.0.1/utt01.wav。
- Media-Type,此header表示語(yǔ)音文件支持的媒體類(lèi)型。其示例:Media-Type:audio/x-wav。
- Start-Input-Timers,此header會(huì )出現在RECOGNIZE請求中,通知語(yǔ)音識別引擎是否啟動(dòng)No-Input-Timeout定時(shí)器。默認值為true。示例是:Start-Input-Timers:false。
- Speech-Language,此header表示語(yǔ)音識別默認支持的語(yǔ)法語(yǔ)言。其示例:Speech-Language:de-CH。
- Cancel-If-Queue,此header用來(lái)表示多個(gè)RECOGNIZE請求是有隊列支持。如果此值為true,則表示沒(méi)有使用隊列,IN-PROGRESSRECOGNIZE請求已被取消。已取消的識別請求會(huì )帶一個(gè)RECOGNITION-COMPLETE事件,這個(gè)事件的消息體的header帶Completion-Cause,設置的值為011 cancelled。如果是false,則表示RECOGNIZE請求會(huì )加入到隊列中。此header沒(méi)有默認值,示例為:Cancel-If-Queue:true。
- New-Audio-Channel,此header通過(guò)RECOGNIZE來(lái)設定,如果是true,則表示對語(yǔ)音資源來(lái)說(shuō),從此刻開(kāi)始,從一個(gè)新的通道中收到了語(yǔ)音流。通常情況下,語(yǔ)音識別資源會(huì )解析為一個(gè)新的請求,重新設置終端的算法,因此會(huì )丟棄任何已執行的通道。此功能非常有用,它可使用已存在的會(huì )話(huà)重用在一個(gè)新的電話(huà)呼叫的環(huán)境中。默認值為false,示例為:New-Audio-Channel:true。
- Ver-Buffer-Utterance,此header可以通過(guò)RECOGNIZE請求中設置,如果設置為true,則表示語(yǔ)音識別資源可以使用緩沖中的可用的語(yǔ)音數據,此語(yǔ)音數據可用于后期說(shuō)話(huà)人驗證引擎環(huán)境。當然,這里一定要注意,說(shuō)話(huà)人驗證資源一定要和識別請求共享一個(gè)會(huì )話(huà)。其示例是:Ver-Buffer-Utterance:true。
- Early-No-Match,此header用來(lái)表示語(yǔ)音識別引擎是否執行語(yǔ)法的早期匹配。它可以無(wú)需等待終端提示完成語(yǔ)音輸入然后開(kāi)始識別的流程。語(yǔ)音識別引擎如果不支持早期匹配的話(huà),可能會(huì )忽略此header值。默認值是false。其語(yǔ)法示例為:Early-No-Match:true。
- Interpret-Text,此header用來(lái)支持INTERPRET請求,指示需要解析的文本。INTERPRET請求中攜帶了text/plain消息。其示例為:Interpret-Text:text@example.com。
- Recognizer-Context-Block,此header用來(lái)通過(guò)GET-PARAMS取值或通過(guò)SET-PARAMS來(lái)設置語(yǔ)音識別的內容數據段。每個(gè)識別引擎平臺的內容數據段都是完全不同的,包括了會(huì )話(huà),終端設置等相關(guān)數據。其示例為:Recognizer-Context-Block:data@vendor-x.com。
4、語(yǔ)音注冊的headers包括了十二個(gè)headers。
Enroll-Utterance用來(lái)表示短語(yǔ)是否被注冊,是通過(guò)RECOGNIZE請求中設定。如果RECOGNIZE請求中設置了Enroll-Utterance為true的話(huà),它僅能支持注冊會(huì )話(huà)。其示例為:Enroll-Utterance:true。
- Num-Min-Consistent-Pronunciations,此header表示從用戶(hù)側獲得的最少連續的發(fā)音短語(yǔ)。此短語(yǔ)會(huì )成為注冊的短語(yǔ),最后接納為個(gè)人的語(yǔ)法。此header可以通過(guò)per-START-PHRASE-ENROLLMENT請求或SET-PARAMS來(lái)設置,其示例為:Num-Min-Consistent-Pronunciations:1。
- Consistency-Threshold,此header應用在語(yǔ)法注冊的過(guò)程中,用來(lái)表示前面注冊短語(yǔ)的發(fā)音和當前短語(yǔ)的相似性。此值越高,說(shuō)明介于其句子和短語(yǔ)發(fā)音匹配非常接近。其語(yǔ)法示例為:Consistency-Threshold:0.75。
- Clash-Threshold,此header用來(lái)衡量語(yǔ)句短語(yǔ)和當前個(gè)人語(yǔ)法中的短語(yǔ)的相似度或接近程度。例如:兩個(gè)不同的拼寫(xiě)但是它們的發(fā)音困難非常相似:
“John Smith”和“Jon Smits”。這樣就會(huì )導致識別資源發(fā)現他們的不同。較小的取值會(huì )降低已檢測到的差異的數量。取值范圍從0到1,其語(yǔ)法示例:Consistency-Threshold:0.75 。
- Personal-Grammar-URI,其header表示此URL是一個(gè)個(gè)人的語(yǔ)法。它會(huì )出現在START-PHRASE-ENROLLMENT,MODIFY-PHRASE,或DELETE-PHRASE的請求中。其語(yǔ)法示例為:Personal-Grammar-URI:http://example.com/enroll/user1.dat。
- Phrase-ID,此header表示的一個(gè)短語(yǔ)ID確認消息。在START-PHRASE-ENROLLMENT,MODIFY-PHRASE或者DELETE-PHRASE的請求中使用,表明其特別的ID號,對此ID進(jìn)行相應的處理。其語(yǔ)法示例為:Phrase-ID:name_joe_bloggs。
- New-Phrase-ID,此header應用在MODIFY-PHRASE請求中,用來(lái)表示對目前存在的ID聲明一個(gè)新的短語(yǔ)ID。其語(yǔ)法示例為:New-Phrase-ID:name_joe_bloggs_02。
- Phrase-NL,此header用來(lái)表示注冊語(yǔ)法相應的自然語(yǔ)言或語(yǔ)義解析。當短語(yǔ)識別以后,返回的解析文本結果。其語(yǔ)法示例為:Phrase-NL:item01。
- Weight,此header表示一個(gè)短語(yǔ)發(fā)生的似然程度。從概念上來(lái)說(shuō),這個(gè)權重值和SRGS語(yǔ)法中的item屬性weight類(lèi)似。此header可能出現在START-PHRASE-ENROLLMENT請求中來(lái)設定一個(gè)注冊語(yǔ)法的權重,也可能出現在MODIFY-PHRASE的請求中來(lái)修改權重值。其語(yǔ)法示例為:Weight:2.0。
- Save-Best-Waveform,此header設置為true的話(huà),用來(lái)支持客戶(hù)端要求語(yǔ)音識別資源在注冊會(huì )話(huà)的生命周期內保存捕捉的語(yǔ)音數據,此數據是最佳的重復短語(yǔ)。語(yǔ)音識別資源必須對識別語(yǔ)音進(jìn)行錄制,并且通過(guò)URL來(lái)返回到客戶(hù)端,在END-PHRASE-ENROLLMENT中攜帶一個(gè)Waveform-URI表示語(yǔ)音URL路徑。如果沒(méi)有錄制成功或發(fā)送錯誤的話(huà),語(yǔ)音識別資源必須返回一個(gè)空的URL。
- Confusable-Phrases-URI,此header會(huì )出現在RECOGNIZE的請求中用來(lái)表示一個(gè)語(yǔ)法URL,這個(gè)URL中的短語(yǔ)可能沒(méi)有注冊或無(wú)效的短語(yǔ)。無(wú)法注冊的短語(yǔ)也可能是一個(gè)命令短語(yǔ),所以不能注冊。其語(yǔ)法示例為:Confusable-Phrase-URI:file://c:\data\commands.dat。
- Abort-Phrase-Enrollment,此header會(huì )出現在END-PHRASE-ENROLLMENT的請求中。如果其值設置為true,則表示語(yǔ)音識別資源會(huì )終止正在被注冊的短語(yǔ)。其語(yǔ)法示例為:Abort-Phrase-Enrollment:true。
5、在今天的分享中,我們完整地介紹了語(yǔ)音識別資源中的三個(gè)事件,三十三個(gè)headers和十二個(gè)語(yǔ)音注冊的headers。針對每一個(gè)header,筆者給出了具體的解釋?zhuān)褂米⒁馐马椇鸵恍┍匾恼Z(yǔ)法示例。筆者相信,筆者的解釋也可能出現偏差,雖然完全覆蓋了語(yǔ)音識別資源的所有headers,但這些分享也不一定完全能夠滿(mǎn)足讀者學(xué)習的需要,讀者仍然需要在使用過(guò)程中不斷測試加深對這些header的學(xué)習。到此為止,筆者已經(jīng)完整介紹了語(yǔ)音識別資源所有相關(guān)的methods,事件和headers。




unimrcp-MRCP協(xié)議學(xué)習分享,QQ群號:208136295
關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的行業(yè)分享
freepbx 技術(shù)論壇:www.ippbx.org.cn
Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
歐米(Omni)智能客服解決方案
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。
相關(guān)熱詞搜索: MRCP學(xué)習筆記
相關(guān)閱讀:
- ·MRCP學(xué)習筆記-語(yǔ)音合成資源事件和header介紹2018-07-17 14:20:38
- ·MRCP學(xué)習筆記-Pronunciation Lexicon Specification (PLS)2018-07-09 10:08:09
- ·MRCP學(xué)習筆記-自然語(yǔ)言語(yǔ)義標識語(yǔ)言(NLSML)2018-07-05 11:18:24
- ·MRCP學(xué)習筆記-語(yǔ)音識別語(yǔ)法技術(shù)細節(SRGS)2018-06-28 09:52:52
- ·MRCP學(xué)習筆記-控制會(huì )話(huà)中的Generic headers2018-06-04 13:31:44
- ·MRCP學(xué)習筆記-控制會(huì )話(huà)的消息體、參數設置和頭域說(shuō)明2018-05-31 09:14:36
- ·MRCP學(xué)習筆記-通過(guò)SIP協(xié)議實(shí)現會(huì )話(huà)管理2018-05-21 09:37:41
- ·MRCP學(xué)習筆記-通過(guò)SIP協(xié)議實(shí)現會(huì )話(huà)管理2018-05-16 14:20:48