對長時間的語音數據流進行識別,適用于會議演講、視頻直播等長時間不間斷識別的場景。
使用須知
如需使用Android或iOS SDK,請參見移動端接口說明。
支持的輸入格式:單聲道(mono)、16 bit采樣位數,包括PCM、PCM編碼的WAV、OGG封裝的OPUS、OGG封裝的SPEEX、AMR、MP3、AAC。
支持的音頻采樣率:8000 Hz、16000 Hz。
支持設置返回結果:是否返回中間識別結果,在后處理中添加標點,將中文數字轉為阿拉伯數字輸出。
支持情感分析:目前僅開放中文8k情感識別功能,且使用時需關閉語義斷句功能(即enable_semantic_sentence_detection=False)。
支持設置多語言識別:在控制臺編輯項目中進行模型選擇,詳情請參見管理項目。
目前支持的語種和方言模型如下:
就近地域智能接入
實時語音識別支持就近地域智能接入,域名為nls-gateway.aliyuncs.com
。
推薦終端用戶使用就近地域接入域名。根據調用接口時客戶端所在的地理位置,系統會自動解析到最近的某個具體地域的服務器。例如在北京地域發起請求,系統會自動解析到北京地域的服務器,與指定域名nls-gateway-cn-beijing.aliyuncs.com
的實現效果一致。
服務地址
訪問類型 | 說明 | URL |
外網訪問(默認上海地域) | 所有服務器均可使用外網訪問URL(SDK中默認設置了外網訪問URL)。 |
|
ECS內網訪問 | 使用阿里云上海、北京、深圳ECS(即ECS地域為華東2(上海)、華北2(北京)、華南1(深圳)),可使用內網訪問URL。 ECS的經典網絡不能訪問AnyTunnel,即不能在內網訪問語音服務;如果希望使用AnyTunnel,需要創建專有網絡在其內部訪問。 說明
|
|
交互流程
所有服務端的響應都會在返回信息的header包含表示本次識別任務的Task_id參數。
1. 鑒權
客戶端與服務端建立WebSocket連接時,使用Token進行鑒權。關于Token獲取請參見獲取Token概述。
2. 開始識別
客戶端發起請求,服務端確認請求有效。其中在請求消息中需要進行參數設置,各參數由SDK中SpeechTranscriber對象的set方法設置,各參數含義如下:
參數 | 類型 | 是否必選 | 說明 |
appkey | String | 是 | 管控臺創建的項目Appkey。獲取Appkey請前往控制臺。 |
format | String | 否 | 音頻格式,包括PCM、WAV、OPUS、SPEEX、AMR、MP3、AAC。 |
sample_rate | Integer | 否 | 音頻采樣率,默認是16000 Hz,根據音頻采樣率在管控臺對應項目中配置支持該采樣率及場景的模型。 |
enable_intermediate_result | Boolean | 否 | 是否返回中間識別結果,默認是false。 |
enable_punctuation_prediction | Boolean | 否 | 是否在后處理中添加標點,默認是false。 |
enable_inverse_text_normalization | Boolean | 否 | ITN(逆文本inverse text normalization)中文數字轉換阿拉伯數字。設置為True時,中文數字將轉為阿拉伯數字輸出,默認值:False。 |
customization_id | String | 否 | 自學習模型ID。 |
vocabulary_id | String | 否 | 定制泛熱詞ID。 |
max_sentence_silence | Integer | 否 | 語音斷句檢測閾值,靜音時長超過該閾值會被認為斷句,參數范圍200ms~6000ms,默認值800ms。 開啟語義斷句enable_semantic_sentence_detection后,此參數無效。 |
enable_words | Boolean | 否 | 是否開啟返回詞信息,默認是false。 |
disfluency | Boolean | 否 | 過濾語氣詞,即聲音順滑,默認值false(關閉)。 |
speech_noise_threshold | Float | 否 | 噪音參數閾值,參數范圍:[-1,1]。取值說明如下:
重要 該參數屬高級參數,調整需慎重并重點測試。 |
enable_semantic_sentence_detection | Boolean | 否 | 是否開啟語義斷句,可選,默認是False。語義斷句參數需要和開啟中間結果配合使用,即開啟該語義斷句參數需將中間結果參數同時打開:enable_intermediate_result=true。 |
special_word_filter | String(結構為JSON格式) | 否 | 敏感詞過濾功能,支持開啟或關閉,支持自定義敏感詞。該參數可實現: 不處理(默認,即展示原文)、過濾、替換為*。 具體調用說明請見下文的自定義過濾詞調用示例。 說明 開啟但未配置敏感詞,則會過濾默認詞表:敏感詞表。 |
自定義過濾詞調用示例如下:
// 以實時轉寫為例,
JSONObject root = new JSONObject();
root.put("system_reserved_filter", true);
// 將以下詞語替換成空
JSONObject root1 = new JSONObject();
JSONArray array1 = new JSONArray();
array1.add("開始");
array1.add("發生");
root1.put("word_list", array1);
// 將以下詞語替換成*
JSONObject root2 = new JSONObject();
JSONArray array2 = new JSONArray();
array2.add("測試");
root2.put("word_list", array2);
// 可以全部設置,也可以部分設置
root.put("filter_with_empty", root1);
root.put("filter_with_signed", root2);
transcriber.addCustomedParam("special_word_filter", root);
3. 接收識別結果
客戶端循環發送語音數據,持續接收識別結果:
SentenceBegin事件表示服務端檢測到了一句話的開始。實時語音識別服務的智能斷句功能會判斷出一句話的開始與結束,舉例如下:
{ "header": { "namespace": "SpeechTranscriber", "name": "SentenceBegin", "status": 20000000, "message_id": "a426f3d4618447519c9d85d1a0d1****", "task_id": "5ec521b5aa104e3abccf3d361822****", "status_text": "Gateway:SUCCESS:Success." }, "payload": { "index": 1, "time": 0 } }
header對象參數說明:
參數
類型
說明
namespace
String
消息所屬的命名空間。
name
String
消息名稱,SentenceBegin表示一個句子的開始。
status
Integer
狀態碼,表示請求是否成功,見服務狀態碼。
status_text
String
狀態消息。
task_id
String
任務全局唯一ID,請記錄該值,便于排查問題。
message_id
String
本次消息的ID。
payload對象參數說明:
參數
類型
說明
index
Integer
句子編號,從1開始遞增。
time
Integer
當前已處理的音頻時長,單位是毫秒。
TranscriptionResultChanged事件表示識別結果發生了變化。僅當enable_intermediate_result取值為true時會多次返回此消息,即一句話的中間識別結果,舉例如下:
{ "header": { "namespace": "SpeechTranscriber", "name": "TranscriptionResultChanged", "status": 20000000, "message_id": "dc21193fada84380a3b6137875ab****", "task_id": "5ec521b5aa104e3abccf3d361822****", "status_text": "Gateway:SUCCESS:Success." }, "payload": { "index": 1, "time": 1835, "result": "北京的天", "confidence": 1.0, "words": [{ "text": "北京", "startTime": 630, "endTime": 930 }, { "text": "的", "startTime": 930, "endTime": 1110 }, { "text": "天", "startTime": 1110, "endTime": 1140 }] } }
header對象參數同上述表格說明,name為TranscriptionResultChanged:表示句子的中間識別結果。
payload對象參數說明:
參數
類型
說明
index
Integer
句子編號,從1開始遞增。
time
Integer
當前已處理的音頻時長,單位是毫秒。
result
String
當前句子的識別結果。
words
List< Word >
當前句子的詞信息,需要將enable_words設置為true。
confidence
Double
當前句子識別結果的置信度,取值范圍:[0.0,1.0]。值越大表示置信度越高。
SentenceEnd事件表示服務端檢測到了一句話的結束,并附帶返回該句話的識別結果,舉例如下:
{ "header": { "namespace": "SpeechTranscriber", "name": "SentenceEnd", "status": 20000000, "message_id": "c3a9ae4b231649d5ae05d4af36fd****", "task_id": "5ec521b5aa104e3abccf3d361822****", "status_text": "Gateway:SUCCESS:Success." }, "payload": { "index": 1, "time": 1820, "begin_time": 0, "result": "北京的天氣。", "confidence": 1.0, "words": [{ "text": "北京", "startTime": 630, "endTime": 930 }, { "text": "的", "startTime": 930, "endTime": 1110 }, { "text": "天氣", "startTime": 1110, "endTime": 1380 }], "emo_tag": "neutral", "emo_confidence": 0.931 } }
header對象參數同上述表格說明,name為SentenceEnd表示識別到句子的結束。
payload對象參數說明:
參數
類型
說明
index
Integer
句子編號,從1開始遞增。
time
Integer
當前已處理的音頻時長,單位是毫秒。
begin_time
Integer
當前句子對應的SentenceBegin事件的時間,單位是毫秒。
result
String
當前的識別結果。
words
List< Word >
當前句子的詞信息,需要將enable_words設置為true。
confidence
Double
當前句子識別結果的置信度,取值范圍:[0.0,1.0]。值越大表示置信度越高。
emo_tag
String
當前句子的情感,包含positive(正面情感,如開心、滿意)、negative(負面情感,如憤怒、沉悶、失望)、neutral (無明顯情感)三種類別。
emo_confidence
Double
當前句子識別情感的置信度,取值范圍:[0.0,1.0]。值越大表示置信度越高。
Words對象參數說明:
參數
類型
說明
text
String
文本。
startTime
Integer
詞開始時間,單位為毫秒。
endTime
Integer
詞結束時間,單位為毫秒。
4. 結束識別
通知服務端語音數據發送完成,服務端識別結束后通知客戶端識別完畢。
服務狀態碼
在服務的每一次響應中,都包含status字段,即服務狀態碼,此處列舉通用錯誤碼、網關錯誤碼、配置錯誤碼表格,如下表所示。
通用錯誤碼
狀態碼 | 狀態消息 | 原因 | 解決方案 |
40000000 | 默認的客戶端錯誤碼,對應了多個錯誤消息。 | 用戶使用了不合理的參數或者調用邏輯。 | 請參考官網文檔示例代碼進行對比測試驗證。 |
40000001 | The token 'xxx' has expired; The token 'xxx' is invalid | 用戶使用了不合理的參數或者調用邏輯。通用客戶端錯誤碼,通常是涉及Token相關的不正確使用,例如Token過期或者非法。 | 請參考官網文檔示例代碼進行對比測試驗證。 |
40000002 | Gateway:MESSAGE_INVALID:Can't process message in state'FAILED'! | 無效或者錯誤的報文消息。 | 請參考官網文檔示例代碼進行對比測試驗證。 |
40000003 | PARAMETER_INVALID; Failed to decode url params | 用戶傳遞的參數有誤,一般常見于RESTful接口調用。 | 請參考官網文檔示例代碼進行對比測試驗證。 |
40000005 | Gateway:TOO_MANY_REQUESTS:Too many requests! | 并發請求過多。 | 如果是試用版調用,建議您升級為商用版本以增大并發。 如果已是商用版,可購買并發資源包,擴充您的并發額度。 |
40000009 | Invalid wav header! | 錯誤的消息頭。 | 如果您發送的是WAV語音文件,且設置 |
40000009 | Too large wav header! | 傳輸的語音WAV頭不合法。 | 建議使用PCM、OPUS等格式發送音頻流,如果是WAV,建議關注語音文件的WAV頭信息是否為正確的數據長度大小。 |
40000010 | Gateway:FREE_TRIAL_EXPIRED:The free trial has expired! | 試用期已結束,并且未開通商用版、或賬號欠費。 | 請登錄控制臺確認服務開通狀態以及賬戶余額。 |
40010001 | Gateway:NAMESPACE_NOT_FOUND:RESTful url path illegal | 不支持的接口或參數。 | 請檢查調用時傳遞的參數內容是否和官網文檔要求的一致,并結合錯誤信息對比排查,設置為正確的參數。 比如您是否通過curl命令執行RESTful接口請求, 拼接的URL是否合法。 |
40010003 | Gateway:DIRECTIVE_INVALID:[xxx] | 客戶端側通用錯誤碼。 | 表示客戶端傳遞了不正確的參數或指令,在不同的接口上有對應的詳細報錯信息,請參考對應文檔進行正確設置。 |
40010004 | Gateway:CLIENT_DISCONNECT:Client disconnected before task finished! | 在請求處理完成前客戶端主動結束。 | 無,或者請在服務端響應完成后再關閉鏈接。 |
40010005 | Gateway:TASK_STATE_ERROR:Got stop directive while task is stopping! | 客戶端發送了當前不支持的消息指令。 | 請參考官網文檔示例代碼進行對比測試驗證。 |
40020105 | Meta:APPKEY_NOT_EXIST:Appkey not exist! | 使用了不存在的Appkey。 | 請確認是否使用了不存在的Appkey,Appkey可以通過登錄控制臺后查看項目配置。 |
40020106 | Meta:APPKEY_UID_MISMATCH:Appkey and user mismatch! | 調用時傳遞的Appkey和Token并非同一個賬號UID所創建,導致不匹配。 | 請檢查是否存在兩個賬號混用的情況,避免使用賬號A名下的Appkey和賬號B名下生成的Token搭配使用。 |
403 | Forbidden | 使用的Token無效,例如Token不存在或者已過期。 | 請設置正確的Token。Token存在有效期限制,請及時在過期前獲取新的Token。 |
41000003 | MetaInfo doesn't have end point info | 無法獲取該Appkey的路由信息。 | 請檢查是否存在兩個賬號混用的情況,避免使用賬號A名下的Appkey和賬號B名下生成的Token搭配使用。 |
41010101 | UNSUPPORTED_SAMPLE_RATE | 不支持的采樣率格式。 | 當前實時語音識別只支持8000 Hz和16000 Hz兩種采樣率格式的音頻。 |
41040201 | Realtime:GET_CLIENT_DATA_TIMEOUT:Client data does not send continuously! | 獲取客戶端發送的數據超時失敗。 | 客戶端在調用實時語音識別時請保持實時速率發送,發送完成后及時關閉鏈接。 |
50000000 | GRPC_ERROR:Grpc error! | 受機器負載、網絡等因素導致的異常,通常為偶發出現。 | 一般重試調用即可恢復。 |
50000001 | GRPC_ERROR:Grpc error! | 受機器負載、網絡等因素導致的異常,通常為偶發出現。 | 一般重試調用即可恢復。 |
52010001 | GRPC_ERROR:Grpc error! | 受機器負載、網絡等因素導致的異常,通常為偶發出現。 | 一般重試調用即可恢復。 |
實時語音識別錯誤碼
狀態碼 | 狀態消息 | 原因 | 解決方案 |
40000004 | Gateway:IDLE_TIMEOUT:Websocket session is idle for too long time | 請求建立鏈接后,長時間沒有發送任何數據,超過10s后,服務端會返回此錯誤信息。 | 請在建立鏈接后和服務端保持交互,比如持續發送語音流,您可以在采集音頻的同時進行發送, 發送結束后及時關閉鏈接。 |
40010004 | Gateway:CLIENT_DISCONNECT:Client disconnected before task finished! | 在請求處理完成前客戶端主動結束。 | 無,或者請在服務端響應完成后再關閉鏈接。 |
40270002 | NO_VALID_AUDIO_ERROR | 無效的音頻。 | 從音頻中沒有識別出有效文本。 |
40270003 | DECODE_ERROR | 音頻解碼失敗。 | 請根據實際音頻格式,設置對應的format參數。 |
41000002 | APPKEY_KEY_IS_NULL | 沒有正確設置appkey。 | 請參考官網文檔及示例代碼。 |