使用IoT大平台語音辨識/語音轉文字(STT)功能


步驟1. 登入IoT大平台會員

Step1. Login CHT IoT platform

我想這不需要多介紹...

步驟2. 取得IoT大平台的API金鑰

Step2. Register X-API-API key for STT/TTS

登入大平台後,右上角個人圖像,點下去會顯示[API金鑰管理]
或是直接前往網址https://iot.cht.com.tw/iot/appkey



申請金鑰時預設是全部都可以使用,如果你只是要用STT功能,找到如下圖所示的chtlasr國語語音辨識服務部分勾選即可。


步驟3. 開始使用

Step3. Ready for use the speech-to-text api

API的說明頁https://iot.cht.com.tw/iot/developer/intelligence

辨識包含三個步驟: (1) 取得ASR ID  (2) 傳送語音資料, 並獲得辨識結果 (3) 結束辨識

我下面假定你步驟2取得的x-api-key是aaaaaaaa-bbbb-cccc-dddd-123456789ab

(1) 取得ASR ID

curl -v -i \
    -X POST \
    -H "X-API-Key: aaaaaaaa-bbbb-cccc-dddd-123456789ab" \
    -H "Accept: application/json" \
https://iot.cht.com.tw/apis/CHTIoT/chtlasr/v2/MyServlet/tlasr?Action=connect

正常的話伺服器會回應http 200,內容會中會包ASR ID(紅色粗體標示){"ResultStatus":"Success","AsrReferenceId":"tlasr_116017588_20190709_145925058_009","ApiProcessingTime":"2019-07-09T14:59:25.058_2019-07-09T14:59:25.339_281ms"}

(2) 傳送語音資料 

這裡演示如何傳送一整個音訊資料給iot大平台,test.pcm是錄音為pcm-16bit的16kHz聲音的資料 。如果你的語音資料是.wav, 要先除去wave header,才丟給IoT大平台。如何用Android手機產生test.pcm錄音檔,請參考https://www.cnblogs.com/renhui/p/7457321.html
curl -v -i \
    -X POST \
    -H "X-API-Key: aaaaaaaa-bbbb-cccc-dddd-123456789ab" \
    -H "Content-Type: application/octet-stream" \
    -H "Accept: application/json" \
    -H "Expect:" \
    --data-binary @test.pcm \
    "https://iot.cht.com.tw/apis/CHTIoT/chtlasr/v2/MyServlet/tlasr?Action=syncData&AsrReferenceId=tlasr_116017588_20190709_145925058_009&ByteNum=104960&SpeechEnd=y"

-H "Expect:" 這個一般程式是不需要的部份,在這裡是為了解決curl當要POST資料大於1024byte時,若沒加此header會卡在server回覆的HTTP/1.1 100 Continue中,然後發生SSL socket timeout,原因是curl遵照http 1.1的要求實作會先詢問server是否能處理, 確認後才會傳大量數據出去,請參考說明:curl Expect:100-continue https://blog.csdn.net/fdipzone/article/details/42463727

--data-binary這參數指定要post的binary data。http query中的參數ByetNum是這次要傳送的資料長度;參數SpeechEnd表示這次傳送是否是結束。

正常的話伺服器會回應http 200,內容包含辨識得結果(藍色粗體標示)
{"ResultStatus":"Success","SpeechIn":1,"RecognitionDone":1,"ApiProcessingTime":"2019-07-09T14:59:36.262_2019-07-09T14:59:36.778_516ms","SpeechGot":1,"Result":["開示關"]}

如果給的參數有問題, 或是比較久才給語音資料時,伺服器可能也會回http 200,但是就會帶失敗狀態和錯誤訊息{"ResultStatus":"Fail","ErrorMessage":"syncData fail, no such ReferenceId!"} 

(3) 結束辨識

curl -v -i \
    -X POST \
    -H "X-API-Key: aaaaaaaa-bbbb-cccc-dddd-123456789ab" \
    -H "Accept: application/json" \
    "https://iot.cht.com.tw/apis/CHTIoT/chtlasr/v2/MyServlet/tlasr?Action=stopRcg&AsrReferenceId=tlasr_116017588_20190709_145925058_009"

正常的話伺服器會回應http 200,內容是{"ResultStatus":"Success","ApiProcessingTime":"2019-07-09T14:58:54.033_2019-07-09T14:58:54.096_63ms"}


串起來使用就變成下面這樣

留言