對長時間的語音數據流進行識別,適用于會議演講、視頻直播等長時間不間斷識別的場景。
功能簡介
NUI SDK提供更小的工具包和更完善的狀態管理。為滿足不同用戶需求,NUI SDK既能提供全鏈路的語音能力,同時可做原子能力SDK進行使用,并保持接口的統一。
使用須知
輸入格式:PCM編碼、16bit采樣位數、單聲道(mono)。
音頻采樣率:8000Hz/16000Hz。
設置返回結果:是否返回中間識別結果、在后處理中添加標點、將中文數字轉為阿拉伯數字輸出。
設置多語言識別:在管控臺編輯項目中進行模型選擇,詳情請參見模型選擇。
服務地址
訪問類型 | 說明 | URL |
外網訪問(默認上海地域) | 所有服務器均可使用外網訪問URL(SDK中默認設置了外網訪問URL)。 |
|
ECS內網訪問 | 使用阿里云上海、北京、深圳ECS(即ECS地域為華東2(上海)、華北2(北京)、華南1(深圳)),可使用內網訪問URL。 ECS的經典網絡不能訪問AnyTunnel,即不能在內網訪問語音服務;如果希望使用AnyTunnel,需要創建專有網絡在其內部訪問。 重要
|
|
交互流程
服務端的響應除了音頻流之外,都會在返回信息的header包含本次識別任務的task_id參數,該參數是本次請求的唯一標識。
1. 鑒權和初始化
客戶端在與服務端建立WebSocket連接時,使用Token進行鑒權。關于Token獲取請參見獲取Token概述。
初始化參數如下。
參數 | 類型 | 是否必選 | 說明 |
workspace | String | 是 | 工作目錄路徑,SDK從該路徑讀取配置文件。 |
app_key | String | 是 | 管控臺創建項目的Appkey。 |
token | String | 是 | 請確保該Token可以使用并在有效期內。 說明 Token可以在初始化時設置,也可通過參數設置進行更新。 |
device_id | String | 是 | 設備標識,唯一表示一臺設備(如Mac地址/SN/UniquePsuedoID)。 |
debug_path | String | 否 | debug目錄。當初始化SDK時的save_log參數取值為true時,該目錄用于保存中間音頻文件。 |
save_wav | String | 否 | 當初始化SDK時的save_log參數取值為true時,該參數生效。表示是否保存音頻debug,該數據保存在debug目錄中,需要確保debug_path有效可寫。 |
2. 開始識別
客戶端發起實時語音識別請求前需要進行參數設置,各參數由SDK中setParams接口以JSON格式設置,該參數設置一次即可。各參數含義如下。
參數 | 類型 | 是否必選 | 說明 |
app_key | String | 否 | 管控臺創建的項目Appkey,一般在初始化時設置。 |
token | String | 否 | 如果需要更新,則進行設置。 |
service_type | Int | 是 | 需要請求的語音服務類型,實時語音識別為“4”。 |
direct_ip | String | 否 | 支持客戶端自行DNS解析后傳入IP進行訪問。 |
nls_config | JsonObject | 否 | 訪問語音服務相關的參數配置,詳情請參見下表。 |
參數nls_config配置如下。
參數 | 類型 | 是否必選 | 說明 |
sr_format | String | 否 | 音頻編碼格式,支持OPUS編碼和PCM原始音頻。默認值:OPUS。 說明 如果使用8000Hz采樣率,則只支持PCM格式。 |
sample_rate | Integer | 否 | 音頻采樣率,默認值:16000Hz。根據音頻采樣率在管控臺對應項目中配置支持該采樣率及場景的模型。 |
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~2000ms,默認值:800ms。 |
enable_words | Boolean | 否 | 是否開啟返回詞信息。默認值:false。 |
disfluency | Boolean | 否 | 過濾語氣詞,即聲音順滑,默認值false(關閉)。 |
vad_model | String | 否 | 設置服務端的vad模型id,默認無需設置。 |
speech_noise_threshold | float | 否 | 噪音參數閾值,取值范圍:-1~+1。
說明 該參數屬高級參數,調整需謹慎并進行重點測試。 |
extend_config | JsonObject | 否 | 若需要設置交互協議支持但是接口說明中未說明的參數,可通過此萬能設置接口進行配置。具體設置方法請見代碼示例。 |
3. 發送數據
客戶端循環發送語音數據,持續接收識別結果:
EVENT_SENTENCE_START事件表示服務端檢測到了一句話的開始。實時語音識別服務的智能斷句功能會判斷出一句話的開始與結束,如:
{ "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
狀態碼。表示請求是否成功,參見錯誤碼。
message_id
String
本次消息的ID,由SDK自動生成。
task_id
String
任務全局唯一ID,請記錄該值,便于排查問題。
status_text
String
狀態消息。
payload對象參數說明:
參數
類型
說明
index
Integer
句子編號,從1開始遞增。
time
Integer
當前已處理的音頻時長,單位:毫秒。
若enable_intermediate_result設置為true,SDK會持續多次通過onNuiEventCallback回調上報EVENT_ASR_PARTIAL_RESULT事件,即中間識別結果,如:
{ "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,值越大表示置信度越高。
EVENT_SENTENCE_END事件表示服務端檢測到了一句話的結束,并返回該句話的識別結果,如:
{ "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 }] } }
說明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,值越大表示置信度越高。
其中,Word對象:
參數
類型
說明
text
String
文本。
startTime
Integer
詞開始時間,單位:毫秒。
endTime
Integer
詞結束時間,單位:毫秒。
4. 結束識別
客戶端通知服務端語音數據發送完畢,服務端識別結束后通知客戶端識別完畢。
錯誤碼
通用錯誤碼
狀態碼 | 狀態消息 | 原因 | 解決方案 |
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! | 在請求處理完成前客戶端主動結束。 | 無,或者請在服務端響應完成后再關閉鏈接。 |
40270003 | DECODE_ERROR | 音頻解碼失敗。 | 請根據實際音頻格式,設置對應的format參數。 |
41000002 | APPKEY_KEY_IS_NULL | 沒有正確設置appkey。 | 請參考官網文檔及示例代碼。 |
一句話識別/實時語音識別/錄音文件識別極速版
配置或參數錯誤
狀態碼
狀態消息
原因
解決方案
240999
DEFAULT_ERROR
內部默認錯誤。
內部未明確錯誤。
240001
NUI_CONFIG_INVALID
配置文件錯誤。
配置文件錯誤,請確認傳入的資源路徑內是否有資源文件。如果是Android平臺,請參考代碼樣例主動使用copyAssets接口。
240002
ILLEGAL_PARAM
非法參數。
請確認傳入的格式是否正確,包括字段類型、值范圍限制。
例如enable_voice_detection需要設置成bool類型的true,而不是1或者字符串"true"。
240003
ILLEGAL_INIT_PARAM
初始化參數非法。
請確認初始化參數格式是否錯誤或缺少必須字段。
240004
NECESSARY_PARAM_LACK
缺少必須參數。
請確認接口調用時的必須參數。
240005
NULL_PARAM_ERROR
參數為空。
確認參數是否為空。
240006
NULL_LISTENER_ERROR
未定義事件回調。
確認回調事件是否正確賦值。
240007
NULL_DIALOG_ERROR
無有效對話實例,一般在內部狀態錯誤時發生。
請確認接口調用前是否為正確狀態,可使用cancel接口恢復idle狀態。
240008
NULL_ENGINE_ERROR
無有效引擎實例,請檢查是否初始化成功。
請確認是否初始化成功。
240009
ILLEGAL_DATA
傳入音頻數據地址或長度非法。
請確認傳入的數據長度值。
SDK狀態錯誤
狀態碼
狀態消息
原因
解決方案
240010
ILLEGAL_REENTRANT
退出后調用SDK接口。
不影響功能時可忽略。
240011
SDK_NOT_INIT
SDK未正確初始化。
確認初始化返回值正確后再進行其他接口使用。
240012
SDK_ALREADY_INIT
重復調用SDK初始化接口。
確認初始化調用邏輯。
240013
DIALOG_INVALID_STATE
內部對話狀態錯誤。
請閱讀SDK流程圖,確認是否在錯誤狀態下調用接口。
240014
STATE_INVALID
SDK內部狀態錯誤。
請閱讀SDK流程圖,確認是否在錯誤狀態下調用接口。
240015
ILLEGAL_FUNC_CALL
該模式無法調用接口。
請確認接口調用是否合理。
系統調用錯誤
狀態碼
狀態消息
原因
解決方案
240020
MEM_ALLOC_ERROR
內存分配錯誤。
檢查內存是否不足。
240021
FILE_ACCESS_FAIL
文件訪問錯誤。
檢查文件是否提供讀寫權限。
240022
CREATE_DIR_ERROR
創建目錄錯誤。
檢查是否有寫權限。
SDK內部調用錯誤
狀態碼
狀態消息
原因
解決方案
240030
CREATE_NUI_ERROR
引擎創建失敗。
創建實例失敗,一般為系統資源不足。
240031
TEXT_DIALOG_START_FAIL
發起文本理解失敗。
文本轉語義理解失敗,檢查網絡連接或URL以及Token等信息是否有效。
240032
TEXT_CANCEL_START_FAIL
取消文本理解失敗。
可忽略。
240033
WUW_DUPLICATE
動態喚醒詞重復。
可忽略。
本地引擎調用錯誤
狀態碼
狀態消息
原因
解決方案
240040
CEI_INIT_FAIL
本地引擎初始化失敗。
請確認本地引擎的模型是否有效、目錄是否可讀寫。
音頻錯誤
狀態碼
狀態消息
原因
解決方案
240051
UPDATE_AUDIO_ERROR
推送音頻錯誤,一般為輸入音頻長度大于所需音頻。
確認推送的音頻長度是否非法。
240052
MIC_ERROR
連續2s未獲取到音頻。
請確認在音頻數據回調中是否正確提供所需長度的音頻。
網絡錯誤
狀態碼
狀態消息
原因
解決方案
240060
CREATE_DA_REQUEST_ERROR
創建對話助手實例失敗
可忽略。
240061
START_DA_REQUEST_ERROR
發起對話助手請求失敗
可忽略。
240062
DEFAULT_NLS_ERROR
服務端發生錯誤。
說明該錯誤同時包含服務端返回錯誤內容。
請參考服務端錯誤碼進一步定位。
240063
SSL_ERROR
創建SSL實例錯誤。
偶現請忽略。
240064
SSL_CONNECT_FAILED
SSL連接失敗。
連接異常,請檢查服務URL或者本地網絡連接是否正常。
240065
HTTP_CONNECT_FAILED
HTTP連接失敗。
服務連接錯誤,可通過日志文件查看HTTP返回值確認原因。
240066
DNS_FAILED
DNS解析失敗。
請檢查本地網絡是否正常、DNS服務是否正常。
240067
CONNECT_FAILED
Socket連接失敗。
檢查網絡連接。
240068
SERVER_NOT_ACCESS
服務端無法訪問。
請檢查Token是否過期或者URL是否正確。
240069
SOCKET_CLOSED
Socket已關閉。
偶現請忽略。
240070
AUTH_FAILED
鑒權失敗。
請檢查是否提供正確的ak_secret,ak_id,app_key,sdk_code和device_id等信息,以及確認是否開通足夠配額。
240071
HTTPDNS_FAILED
使用客戶端傳入的IP連接失敗。
如果使用直接傳入IP進行訪問,請確認IP是否可訪問。
240072
HTTP_SEND_FAILED
文件轉寫HTTP發送失敗。
確認網絡連接是否正常。
240073
HTTP_RECEIVE_FAILED
文件轉寫HTTP接收失敗。
確認網絡連接是否正常。
240074
HTTP_RESPONSE_ERROR
文件轉寫接收內容解析失敗
服務端返回內容錯誤。
240075
HTTP_SERVER_ERROR
文件轉寫服務錯誤。
請參考服務端錯誤碼進一步定位。