這個文檔主要是介紹一下我自己封裝了 6 家廠商的短語音識別
和實時流語音識別
接口的一個包,以及對這些接口的一個對比。分別是,阿里,快商通,百度,騰訊,科大,字節。
zxmfke/asrfactory (github.com)
之前剛好在測試各家的語音識別相關功能,但是每家的返回值都不同,調用方式都不同,所以就封裝了這么一個包。主要就是用簡易工廠模式封裝了一下,可以用來內部做測試。
功能方面,只是單純的返回識別結果,實時流也是,正常是要再返回時間戳的,不過各家在時間戳上更是五花八門,就之后有空再封裝。
有什么需求也歡迎討論,另外,接口的app,賬號需要自己去生成。
本文檔偏主觀,不喜勿噴
接口官方文檔地址
短語音識別 | URL |
---|---|
阿里 | 智能語音交互RESTfulAPI(ROA)示例_智能語音交互-阿里云幫助中心 (aliyun.com) |
快商通 | 快商通AI開放平臺-短語音識別 |
百度 | 短語音識別標準版API - 語音技術 (baidu.com) |
騰訊 | 語音識別 一句話識別-一句話識別相關接口-API 中心-騰訊云 (tencent.cn) |
科大 | 語音聽寫_語音識別-訊飛開放平臺 (xfyun.cn) |
字節 | 一句話識別–語音技術-火山引擎 (volcengine.com) |
實時流語音識別 | URL |
---|---|
阿里 | 如何自行開發代碼訪問阿里語音服務_智能語音交互-阿里云幫助中心 (aliyun.com) |
快商通 | 快商通AI開放平臺-實時語音識別 |
百度 | 語音技術 (baidu.com) |
騰訊 | 語音識別 實時語音識別(websocket)-API 文檔-文檔中心-騰訊云 (tencent.com) |
科大 | 實時語音轉寫_實時語音識別服務-訊飛開放平臺 (xfyun.cn) |
字節 | 流式語音識別–語音技術-火山引擎 (volcengine.com) |
包封裝實現
短語音識別
短語音比較簡單,主要就是一個 http
請求,實現 Do
方法就可以了。
type Asr interface {Do(fileName string, sampleRate define.AudioSampleRate) (string, error)
}
實時流語音識別
實時流識別主要是抽象成 5 個函數,均通過 websocket 的方式對接
type AsrWs interface {// 初始化,創建 websocket 連接。把創建和發送 start 的邏輯封在一起。Init() error// 發送語音流數據Send([]byte) error// 接收識別結果Recv(chan<- define.Output)// 發送結束標識End() error// 關閉 websocket 連接Close()
}
實時流語音識別可以分成 7 個步驟:
- 建立 web socket 連接;
- 發送 start 的 Text message;
這兩步就是在 Init 里面實現,如果 start 沒有,那 Init 里面就不會做 start 的邏輯
-
發送完 start 后,會返回給 client 可以發送的 message;
-
循環發送語音,通過 Send 方法;
-
同時接收識別結果,Recv 來接收識別結果;
-
語音數據發送結束后,發送給 server 端數據發送完畢的標識,即 End 方法;
-
發送 End 后,不要立馬斷開 web socket 連接。End 只是發送我沒有要 server 端識別的數據了,不過還是要等 server 端把所有語音數據都是識別完成,返回全部識別結束。這時候才能 Close 連接。
Recv 和 End 方法在各家的實現里面是最不同的,所以抽象的地方主要是在這兩個函數。不過無論后面要再加什么廠商的接口,基本上按照這 5 個方法,是沒什么問題的。字節的就是,我在最后才加的。
接口語音要求
我只列常用的
語音要求 | |
---|---|
阿里 | 16k/8k wav/pcm |
快商通 | 16k/8k wav |
百度 | 16k pcm |
騰訊 | 16k/8k wav/pcm |
科大 | 16k/8k pcm |
字節 | 16k/8k wav/pcm |
接口文檔是否易懂
文檔易懂 | |
---|---|
阿里 | 有完整文檔,字段描述清晰,范例代碼挺多。 |
快商通 | 有完整文檔,字段描述清晰,范例代碼就一個js。 |
百度 | 有完整文檔,字段描述清晰,邏輯性不是很強。 |
騰訊 | 有完整文檔,字段描述清晰,邏輯性強,范例代碼多 |
科大 | 有完整文檔,字段描述清晰,過于復雜,字段命名不直觀 |
字節 | 看文檔看不懂,只能看懂調用邏輯,字段怎么用,只能直接看范例,范例也不知道為什么這么寫 |
接口對接難易度
對接難易度這邊更多指的是最后抽象成幾個方法的難易度。
調用難易度 | |
---|---|
阿里 | 易,發數據前要先發,開始message |
快商通 | 沒有 go 范例,得自己寫,不過邏輯還算比較簡單清晰 |
百度 | 易,發數據前要先發,開始message |
騰訊 | 易,創建 ws 連接的時候得先獲取 signature |
科大 | 有點麻煩,范例太過復雜,創建 ws 連接的時候得先獲取 signature。嵌套多層,且字段名不直觀,抽象過程麻煩。 |
字節 | 有點麻煩,范例太過復雜,發數據前要先發,開始message,抽象過程麻煩。 |
接口識別效果
識別效果我只測了中文,16k。8k 跟 16k 結果差不多。在正常語音,正常噪音情況下,騰訊,阿里排在前兩位,后面的差不多。在有噪音前提下,大體相差不了多少。其中,快商通不支持多方言和多語種,其他的都可以。
響應時間,識別速度,騰訊 > 阿里 > 百度 > 快商通 > 科大 > 字節
接口免費調用次數
各平臺免費調用次數都比較充足,價格就直接官網看比較直觀,因為有階梯的不好比較。直接跟商務談的也會有所區別。
總結
這個包就是來封裝一下各家的語音識別接口,方便調用。選哪家因人而異,考量的點挺多。我個人覺得騰訊的是最好的,它文檔很豐富,邏輯清晰,范例也很清楚,識別效果,識別速度都是最好的。快商通的簡單,識別也還行,就是支持的功能太少了。科大的應該是不錯的,不過不知道為什么識別效果怪怪的。字節的每太理解需要這么設計的邏輯,會給使用者增加一些不必要的麻煩,可能是我功力還不能理解他們的設計巧思。