語(yǔ)音技術(shù)
接口描述
實(shí)時(shí)語(yǔ)音識(shí)別接口采用websocket協(xié)議的連接方式,邊上傳音頻邊獲取識(shí)別結(jié)果??梢詫⒁纛l流實(shí)時(shí)識(shí)別為文字,也可以上傳音頻文件進(jìn)行識(shí)別;返回結(jié)果包含每句話(huà)的開(kāi)始和結(jié)束時(shí)間,適用于長(zhǎng)句語(yǔ)音輸入、音視頻字幕、直播質(zhì)檢、會(huì)議記錄等場(chǎng)景。
WebSocket簡(jiǎn)介
WebSocket 是基于TCP的全雙工協(xié)議,即建立連接后通訊雙方都可以不斷發(fā)送數(shù)據(jù)。
WebSocket 協(xié)議由rfc6455定義, 下面介紹常見(jiàn)WebSocket 庫(kù)的調(diào)用流程及參數(shù)
一般需要各編程語(yǔ)言的WebSocket庫(kù)來(lái)實(shí)現(xiàn)接入。WebSocket庫(kù)需支持rfc6455描述的協(xié)議, 即支持Sec-WebSocket-Version: 13
主要流程
連接 連接成功后發(fā)送數(shù)據(jù)2.1 發(fā)送開(kāi)始參數(shù)幀
2.2 實(shí)時(shí)發(fā)送音頻數(shù)據(jù)幀
2.3 庫(kù)接收識(shí)別結(jié)果
2.4 發(fā)送結(jié)束幀 關(guān)閉連接

發(fā)送數(shù)據(jù)幀:Sending Data Frame, 類(lèi)似包的概念,指一次發(fā)送的內(nèi)容 。從客戶(hù)端到服務(wù)端。
文本幀:Opcode 0x1 (Text), 實(shí)時(shí)語(yǔ)音識(shí)別api發(fā)送的第一個(gè)開(kāi)始參數(shù)幀和最后一個(gè)結(jié)束幀,文本的格式是json 二進(jìn)制幀:Opcode0x2 (Binary), 實(shí)時(shí)語(yǔ)音識(shí)別api 發(fā)送的中間的音頻數(shù)據(jù)幀接收數(shù)據(jù)幀: Receiving Data Frame, 類(lèi)似包的概念,指一次發(fā)送的內(nèi)容 。從服務(wù)端到客戶(hù)端。
文本幀:Opcode 0x1 (Text), 識(shí)別結(jié)果或者報(bào)錯(cuò),文本的格式是json 二進(jìn)制幀:實(shí)時(shí)語(yǔ)音識(shí)別api 不會(huì)收到 關(guān)閉連接:Closing Handshake。 百度服務(wù)端識(shí)別結(jié)束后會(huì)自行關(guān)閉連接,部分WebSocket庫(kù)需要得知這個(gè)事件后手動(dòng)關(guān)閉客戶(hù)端連接。通常WebSocket庫(kù)用需要用戶(hù)自己定義下面的3個(gè)回調(diào)函數(shù)實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。
連接成功后的回調(diào)函數(shù): {#通常需要開(kāi)啟一個(gè)新線程,以避免阻塞無(wú)法接收數(shù)據(jù)2.1 發(fā)送開(kāi)始參數(shù)幀2.2 實(shí)時(shí)發(fā)送音頻數(shù)據(jù)幀2.4 發(fā)送結(jié)束幀 } 接收數(shù)據(jù)的回調(diào)函數(shù) {2.3 庫(kù)接收識(shí)別結(jié)果,自行解析json獲得識(shí)別結(jié)果 } 服務(wù)端關(guān)閉連接的回調(diào)函數(shù) {3. 關(guān)閉客戶(hù)端連接, 部分庫(kù)可以自動(dòng)關(guān)閉客戶(hù)端連接。 }
在線調(diào)試&示例代碼
Demo 目前提供如下demo及演示功能,點(diǎn)擊進(jìn)入下載頁(yè)面
編程語(yǔ)言 操作系統(tǒng)及版本 使用文件流演示接口基本識(shí)別功能 耗時(shí)計(jì)算 模擬實(shí)時(shí)音頻流 斷網(wǎng)補(bǔ)發(fā)數(shù)據(jù) Java 任意,支持Java 8或以上 √ √ √ Android Android Api Level 15 或以上 √ √ √ Python 任意,支持Python3 √ C++ Linux ,支持C++ 11 以上 √請(qǐng)求說(shuō)明
連接
連接地址(WebSocket URI):wss://vop.baidu.com/realtime_asr?sn=XXXX-XXXX-XXXX-XXX 參數(shù) sn由用戶(hù)自定義用于排查日志,建議使用隨機(jī)字符串如UUID生成。 sn的格式為英文數(shù)字及“-” ,長(zhǎng)度128個(gè)字符內(nèi),即[a-zA-Z0-9-]{1, 128}
如果連接成功,一般WebSocket庫(kù)會(huì)發(fā)起回調(diào)。
發(fā)送開(kāi)始參數(shù)幀
注意幀的類(lèi)型(Opcode)是Text, 使用json序列化
示例:
{ "type": "START", "data": { "appid": 105xxx17, "appkey": "UA4oPSxxxxkGOuFbb6", "dev_pid": 15372, # 識(shí)別模型,比如普通話(huà)還是英語(yǔ),是否要加標(biāo)點(diǎn)等 "lm_id": xxxx, # 自訓(xùn)練平臺(tái)才有這個(gè)參數(shù) "cuid": "cuid-1", # 隨便填不影響使用。機(jī)器的mac或者其它唯一id,頁(yè)面上計(jì)算UV用。 # 下面是固定參數(shù) "format": "pcm", "sample": 16000 } }
具體參數(shù)說(shuō)明
參數(shù)名稱(chēng) 類(lèi)型 是否必填 說(shuō)明 type String 必填,固定值 START,開(kāi)始幀的類(lèi)型 data Array 必填 具體見(jiàn)下表data參數(shù)說(shuō)明
參數(shù)名稱(chēng) 類(lèi)型 是否必填 說(shuō)明 appid int 必填 控制臺(tái)網(wǎng)頁(yè)上應(yīng)用的鑒權(quán)信息 AppID appkey string 必填 控制臺(tái)網(wǎng)頁(yè)上應(yīng)用的鑒權(quán)信息 API Key dev_pid int 必填 識(shí)別模型,推薦15372,見(jiàn)下一個(gè)表格 lm_id int 可選 填入自訓(xùn)練平臺(tái)訓(xùn)練上線的模型id,需要和訓(xùn)練的基礎(chǔ)模型dev-pid對(duì)齊。參考平臺(tái)模型調(diào)用部分的提示。 cuid string 必填 統(tǒng)計(jì)UV使用,發(fā)起請(qǐng)求設(shè)備的唯一id,如服務(wù)器的mac地址。隨意填寫(xiě)不影響識(shí)別結(jié)果。長(zhǎng)度128個(gè)字符內(nèi),即[a-zA-Z0-9-_]{1, 128} format string 必填,固定值 pcm , 固定格式 sample int 必填,固定值 16000, 固定采樣率開(kāi)放平臺(tái)模型(無(wú)在線語(yǔ)義功能)
PID 模型 是否有標(biāo)點(diǎn)及后處理 推薦場(chǎng)景 1537 中文普通話(huà) 弱標(biāo)點(diǎn)(逗號(hào),句號(hào)) 手機(jī)近場(chǎng)輸入 15372 中文普通話(huà) 加強(qiáng)標(biāo)點(diǎn)(逗號(hào)、句號(hào)、問(wèn)號(hào)、感嘆號(hào)) 手機(jī)近場(chǎng)輸入 1737 英語(yǔ) 無(wú)標(biāo)點(diǎn) 手機(jī)近場(chǎng)輸入 17372 英語(yǔ) 加強(qiáng)標(biāo)點(diǎn)(逗號(hào)、句號(hào)、問(wèn)號(hào)) 手機(jī)近場(chǎng)輸入語(yǔ)音自訓(xùn)練平臺(tái)模型訓(xùn)練
實(shí)時(shí)語(yǔ)音識(shí)別接口支持在語(yǔ)音自訓(xùn)練平臺(tái)上訓(xùn)練中文普通話(huà)模型
訓(xùn)練后的模型注意必須填寫(xiě)上線模型的模型參數(shù),可在自訓(xùn)練平臺(tái)的模型調(diào)用模塊進(jìn)行查看。
示例 獲取專(zhuān)屬模型參數(shù)pid:1537或15372 modelid:1235, 則調(diào)用websocket API時(shí)必須填寫(xiě)參數(shù) dev_pid=1537或15372(PID功能見(jiàn)下表);同時(shí)lm_id 設(shè)置為1235。
PID 模型 是否有標(biāo)點(diǎn) 備注 1537 中文普通話(huà) 無(wú)標(biāo)點(diǎn) 15372 中文普通話(huà) 加強(qiáng)標(biāo)點(diǎn)(逗號(hào)、句號(hào)、問(wèn)號(hào)、感嘆號(hào))發(fā)送音頻數(shù)據(jù)幀
這里需要注意,服務(wù)端5s沒(méi)有收到音頻數(shù)據(jù)會(huì)斷開(kāi)并報(bào)錯(cuò),發(fā)送間隔控制在5s以?xún)?nèi)
注意幀的類(lèi)型(Opcode)是Binary
內(nèi)容是二進(jìn)制的音頻內(nèi)容。 除最后一個(gè)音頻數(shù)據(jù)幀, 每個(gè)幀的音頻數(shù)據(jù)長(zhǎng)度為20-200ms。 建議最佳160ms一個(gè)幀,有限制的也建議80ms。
160ms = 160 (16000 2 /1000) = 5120 bytes
計(jì)算方式: 16000采樣率: 1s音頻 16000采樣點(diǎn) 16bits: 一個(gè)采樣點(diǎn) 16bits = 2 bytes 1s : = 1000ms 即 160ms * 16000 * 2bytes / 1000ms = 5120bytes
實(shí)時(shí)語(yǔ)音識(shí)別api 建議實(shí)時(shí)發(fā)送音頻,即每個(gè)160ms的幀之后,下一個(gè)音頻數(shù)據(jù)幀需要間隔160ms。即:文件,此處需要sleep(160ms) 如果傳輸過(guò)程中網(wǎng)絡(luò)異常, 需要補(bǔ)斷網(wǎng)時(shí)的識(shí)別結(jié)果,發(fā)送的音頻數(shù)據(jù)幀之間可以沒(méi)有間隔。具體見(jiàn)下文“斷網(wǎng)補(bǔ)發(fā)數(shù)據(jù)”一節(jié)
發(fā)送結(jié)束幀
注意幀的類(lèi)型(Opcode)是Text, 使用json序列化
示例:
具體參數(shù)說(shuō)明
參數(shù)名稱(chēng) 類(lèi)型 是否必填 說(shuō)明 type String 必填,固定值 , 結(jié)束幀的類(lèi)型發(fā)送取消幀
取消與結(jié)束不同,結(jié)束表示音頻正常結(jié)束,取消表示不再需要識(shí)別結(jié)果,服務(wù)端會(huì)迅速關(guān)閉連接 示例:
具體參數(shù)說(shuō)明
參數(shù)名稱(chēng) 類(lèi)型 是否必填 說(shuō)明 type String 必填,固定值 CANCEL 立即取消本次識(shí)別發(fā)送心跳幀
注意幀的類(lèi)型(Opcode)是Text, 使用json序列化 正常情況下不需要發(fā)這個(gè)幀,僅在網(wǎng)絡(luò)異常的時(shí)候,需要補(bǔ)傳使用,具體見(jiàn)“斷網(wǎng)補(bǔ)發(fā)數(shù)據(jù)”
示例:
具體參數(shù)說(shuō)明
參數(shù)名稱(chēng) 類(lèi)型 是否必填 說(shuō)明 type String 必填,固定值 HEARTBEAT, 心跳幀的類(lèi)型返回說(shuō)明
接收數(shù)據(jù)幀
注意需要接收的幀類(lèi)型(Opcode)是Text, 本接口不會(huì)返回Binary類(lèi)型的幀。 text的內(nèi)容, 使用json序列化
臨時(shí)及最終識(shí)別結(jié)果
一段音頻由多句話(huà)組成,實(shí)時(shí)識(shí)別api會(huì)依次返回每句話(huà)的臨時(shí)識(shí)別結(jié)果和最終識(shí)別結(jié)果
一句話(huà)的臨時(shí)識(shí)別結(jié)果示例:
{"err_no":0,"err_msg":"OK","type": "MID_TEXT","result": "北京天氣怎","log_id": 45677785,"sn": "399427ce-e999-11e9-94c8-fa163e4e6064_ws_2" }
一句話(huà)的最終識(shí)別結(jié)果:
{"err_no":0,"err_msg":"OK","type":"FIN_TEXT","result":"北京天氣怎么樣","start_time":53220,"end_time":73340,"err_no":0,"err_msg":"OK","log_id":45677785,"sn":"399427ce-e999-11e9-94c8-fa163e4e6064_ws_2" }
心跳幀(收到后,請(qǐng)忽略)
示例:
與發(fā)送的心跳幀不同,這個(gè)是接收服務(wù)端下發(fā)的,5s一次,收到后可以忽略。
服務(wù)端報(bào)錯(cuò) 如-3005錯(cuò)誤碼,是針對(duì)的是一個(gè)句子的,其它句子依舊可以識(shí)別,請(qǐng)求是否結(jié)束以服務(wù)端是否關(guān)閉連接為準(zhǔn)。 具體錯(cuò)誤碼含義見(jiàn)文末“錯(cuò)誤碼“一節(jié)
{"err_msg": "asr authentication failed","err_no": -3004,"log_id": 106549729,"result": "","sn": "0d25b5e1-ffa6-11e9-8968-f496349f3917","type": "FIN_TEXT" }
一句話(huà)的開(kāi)始時(shí)間及結(jié)束時(shí)間:識(shí)別過(guò)程中,百度服務(wù)端在每句話(huà)的最終識(shí)別結(jié)果中帶有這句話(huà)的開(kāi)始和結(jié)束時(shí)間。最終識(shí)別結(jié)果是指"type":"FIN_TEXT",即一句話(huà)的最后識(shí)別結(jié)果,包括這句話(huà)的報(bào)錯(cuò)結(jié)果。
通常一個(gè)音頻會(huì)得到如下的時(shí)間信息:
# s1 e1 指第一句話(huà)的開(kāi)始和結(jié)束時(shí)間start_time,end_time [靜音][s1:e1][靜音][s2:e2]....[靜音][s10:e10][靜音] 一句話(huà)不能超過(guò)60s,否則會(huì)被強(qiáng)制切割
參數(shù)說(shuō)明
參數(shù)名稱(chēng) 名稱(chēng) 類(lèi)型 說(shuō)明 err_no 錯(cuò)誤碼 int 0 表示正確, 其它錯(cuò)誤碼見(jiàn)文末 err_msg 錯(cuò)誤信息 string err_no!=0時(shí),具體的報(bào)錯(cuò)解釋。 type 結(jié)果類(lèi)型 string 見(jiàn)下面3行示臨時(shí)識(shí)別結(jié)果 ~ ~ MID_TEXT 一句話(huà)以及臨時(shí)識(shí)別結(jié)果 ~ ~ FIN_TEXT 一句話(huà)的最終識(shí)別結(jié)果或者報(bào)錯(cuò), 是否報(bào)錯(cuò)由err_no判斷 ~ ~ HEARTBEAT 僅斷網(wǎng)補(bǔ)發(fā)音頻數(shù)據(jù)需要,見(jiàn)下文“斷網(wǎng)補(bǔ)發(fā)數(shù)據(jù)”一節(jié) result 識(shí)別結(jié)果 string 音頻的識(shí)別結(jié)果 start_time 一句話(huà)的開(kāi)始時(shí)間 int,毫秒 一句話(huà)的開(kāi)始時(shí)間,臨時(shí)識(shí)別結(jié)果MID_TEXT 無(wú)此字段 end_time 一句話(huà)的結(jié)束時(shí)間 int,毫秒 一句話(huà)的結(jié)束時(shí)間,臨時(shí)識(shí)別結(jié)果MID_TEXT 無(wú)此字段 logid 日志id long 日志id,用這個(gè)id可以百度服務(wù)端定位請(qǐng)求,排查問(wèn)題 sn 請(qǐng)求sn string 用這個(gè)sn可以百度服務(wù)端定位請(qǐng)求,排查問(wèn)題。ws URI里的參數(shù)及識(shí)別句子的組合斷網(wǎng)補(bǔ)發(fā)數(shù)據(jù)
請(qǐng)先看“發(fā)送音頻數(shù)據(jù)幀” 和 “接收數(shù)據(jù)幀” 這2節(jié)。
斷網(wǎng)補(bǔ)發(fā)數(shù)據(jù)的目的是將一個(gè)語(yǔ)音流,在網(wǎng)絡(luò)不佳的情況下,通過(guò)自己的代碼邏輯拼接,使得多次請(qǐng)求的結(jié)果看上去像一次。
簡(jiǎn)單來(lái)說(shuō)就是哪里斷開(kāi),從哪里開(kāi)始重新發(fā)一次請(qǐng)求,“哪里”=最后一次接收的“end_time”。服務(wù)端對(duì)每個(gè)請(qǐng)求獨(dú)立,需要自行拼接補(bǔ)發(fā)數(shù)據(jù)的請(qǐng)求時(shí)間。
如果一個(gè)音頻的10個(gè)句子時(shí)間如下:
# s1 e1 指第一句話(huà)的開(kāi)始和結(jié)束時(shí)間start_time,end_time [靜音][s1:e1][靜音][s2:e2]...[s7:e7]...[靜音][s10:e10][靜音]
如果發(fā)送過(guò)程中,比如在第七句e7之后,網(wǎng)絡(luò)抖動(dòng)或者遇見(jiàn)其它錯(cuò)誤。但是為了不影響最終的用戶(hù)體驗(yàn),期望連續(xù)的10個(gè)句子的識(shí)別結(jié)果。
此時(shí),可以發(fā)起一個(gè)新的請(qǐng)求,從e7開(kāi)始發(fā)數(shù)據(jù),在,語(yǔ)音數(shù)據(jù)幀之間不需要sleep。
如果超過(guò)5s沒(méi)有發(fā)送音頻數(shù)據(jù)給服務(wù)端,服務(wù)端會(huì)下發(fā)報(bào)錯(cuò)并結(jié)束連接,建議至少2s 發(fā)送一次。
完整流程如下
開(kāi)始一次請(qǐng)求,正常發(fā)送音頻數(shù)據(jù),并緩存音頻數(shù)據(jù), 接收到數(shù)據(jù)幀, 保存end_time 如果此時(shí)斷網(wǎng),讀取最后一次的end_time如7000ms 開(kāi)始一次新請(qǐng)求, 從緩存的音頻數(shù)據(jù)中找到7000ms(224000bytes)以后的數(shù)據(jù),發(fā)送給服務(wù)端。每個(gè)幀160ms的音頻數(shù)據(jù),補(bǔ)數(shù)據(jù)時(shí),每個(gè)幀之間不需要間隔sleep。 一直追上實(shí)時(shí)音頻數(shù)據(jù),開(kāi)始實(shí)時(shí)發(fā)送 新請(qǐng)求的start_time和end_time可以加上7000ms,然后展示給用戶(hù) 如果補(bǔ)發(fā)數(shù)據(jù)過(guò)大,新請(qǐng)求過(guò)快結(jié)束,在新請(qǐng)求結(jié)束時(shí),需要補(bǔ)type=HEARTBEAT心跳幀,建議2-3s發(fā)一次,避免5s服務(wù)端讀超時(shí)。 如果再次斷網(wǎng)流程依舊相關(guān)知識(shí)
語(yǔ)音識(shí)別抑郁癥的關(guān)鍵技術(shù)研究
智能語(yǔ)音識(shí)別技術(shù):賦能人工智能應(yīng)用新篇章
電銷(xiāo)機(jī)器人=AI人工智能+語(yǔ)音識(shí)別技術(shù)+語(yǔ)音知識(shí)庫(kù)+話(huà)術(shù)邏輯+智能學(xué)習(xí)
語(yǔ)音識(shí)別技術(shù)在手機(jī)心理健康軟件中的應(yīng)用
言語(yǔ)治療技術(shù)
語(yǔ)音識(shí)別
什么是智能語(yǔ)音服務(wù)(智能語(yǔ)音服務(wù)介紹)
ai語(yǔ)音識(shí)別聲音防沉迷
【基本建成】言語(yǔ)治療技術(shù)
言語(yǔ)聽(tīng)覺(jué)康復(fù)技術(shù)專(zhuān)業(yè)介紹
網(wǎng)址: 語(yǔ)音技術(shù) http://www.u1s5d6.cn/newsview681642.html
推薦資訊
- 1發(fā)朋友圈對(duì)老公徹底失望的心情 12775
- 2BMI體重指數(shù)計(jì)算公式是什么 11235
- 3補(bǔ)腎吃什么 補(bǔ)腎最佳食物推薦 11199
- 4性生活姿勢(shì)有哪些 盤(pán)點(diǎn)夫妻性 10425
- 5BMI正常值范圍一般是多少? 10137
- 6在線基礎(chǔ)代謝率(BMR)計(jì)算 9652
- 7一邊做飯一邊躁狂怎么辦 9138
- 8從出汗看健康 出汗透露你的健 9063
- 9早上怎么喝水最健康? 8613
- 10五大原因危害女性健康 如何保 7826
- 西鈺休閑食品加盟 費(fèi)用 代理?xiàng)l件 招商電
- 線上研討助力居家心育 ——臨沂西郊實(shí)驗(yàn)學(xué)
- 科學(xué)防疫,“宅”趣無(wú)窮——西溪學(xué)??茖W(xué)科
- 玉淵潭中學(xué)居家學(xué)習(xí)健康小貼士
- 有哪些休閑游戲 放松身心的好選擇
- plus會(huì)員:美的(Midea) 10K
- PLUS會(huì)員、需搶券:LittleSwa
- plus會(huì)員:海爾(Haier)全自動(dòng)8
- 再降價(jià)、PLUS會(huì)員:LittleSwa
- 無(wú)縫連接健康服務(wù)!探索日照首個(gè)居家醫(yī)養(yǎng)云