使用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 apiAPI的說明頁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"}
-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!"}
正常的話伺服器會回應http 200,內容是{"ResultStatus":"Success","ApiProcessingTime":"2019-07-09T14:58:54.033_2019-07-09T14:58:54.096_63ms"}
串起來使用就變成下面這樣
(2) 傳送語音資料
這裡演示如何傳送一整個音訊資料給iot大平台,test.pcm是錄音為pcm-16bit的16kHz聲音的資料 。如果你的語音資料是.wav, 要先除去wave header,才丟給IoT大平台。如何用Android手機產生test.pcm錄音檔,請參考https://www.cnblogs.com/renhui/p/7457321.htmlcurl -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"}
串起來使用就變成下面這樣
留言