摘要:如果你有疑問,或許可以參考創建密鑰使用谷歌將語音轉換為文字。將其取出,得到字典。
在之前發布的使用谷歌Cloud Speech API將語音轉換為文字一文中,我們實現了在控制臺使用curl發送post請求,得到語音轉文字的結果;而在Python中使用谷歌Cloud Speech API將語音轉換為文字一文中,我們實現了安裝Cloud Speech API客戶端庫,通過調用庫函數得到語音轉文字的結果。
如果你嘗試過這兩種方法,就會發現其實后者得到結果需要的時間要長一些(筆者使用這兩種方法得到結果的耗時分別大約是5秒、7秒)。那么,有沒有辦法在python中像第一種方法那樣,使用curl命令發送post請求呢。當然是可行的,所以今天我們將介紹在Python中使用Cloud Speech API將語音轉換為文字的另一種方案,另外這次我們將把音頻文件編碼為base64嵌入到json請求文件中,省去了上傳聲音文件到Cloud Storage的步驟。
相關說明之類的在上面兩篇文章里已經寫了很多,這邊就直接貼代碼。
*使用python3
import json import urllib.request import base64 # ① api_url = "https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=你的API密鑰" audio_file = open("/home/pi/chat/test-speech/output.wav", "rb") audio_b64 = base64.b64encode(audio_file.read()) audio_b64str = audio_b64.decode() # ② # print(type(audio_b64)) # print(type(audio_b64str)) audio_file.close() # ③ voice = { "config": { #"encoding": "WAV", "languageCode": "cmn-Hans-CN" }, "audio": { "content": audio_b64str } } # 將字典格式的voice編碼為utf8 voice = json.dumps(voice).encode("utf8") req = urllib.request.Request(api_url, data=voice, headers={"content-type": "application/json"}) response = urllib.request.urlopen(req) response_str = response.read().decode("utf8") # ④ # print(response_str) response_dic = json.loads(response_str) transcript = response_dic["results"][0]["alternatives"][0]["transcript"] confidence = response_dic["results"][0]["alternatives"][0]["confidence"] print(transcript) print(confidence)
幾點說明:
注釋①:請求API的鏈接,請替換你的API密鑰 。如果你有疑問,或許可以參考 創建API密鑰 | 使用谷歌Cloud Speech API將語音轉換為文字 。
audio_file 路徑替換為你的本地聲音文件路徑。
注釋②:這次上傳音頻的方式是,將聲音文件編碼為base64,把對應的整個字符串放進json請求中。如果你執行 print(type(audio_b64)) 就會發現編碼后的audio_b64是 bytes 類型,所以還需要做一次decode(),轉成字符串。
注釋③:先以字典格式保存json請求內容,代表聲音文件的字符串就在這里放入。
注釋④:API返回的結果保存在 response_str ,如果你直接運行 print(response_str) 就會發現這個字符串可以看做一個有很多“層”的字典,要提取出識別結果,需要搞清楚這個字典到底是怎么組成的:
第1層:花括號{}說明字符串 response_str 在執行 json.loads 后變成一個"字典"。得到"字典" response_dic 。
第2層:字典中只有一組鍵-值, response_dic["results"] 取出唯一的鍵"results"對應的值。觀察這個值,發現中括號[],說明這個值的類型是”列表“。
第3層:觀察列表 response_dic["results"] ,發現列表中只有一項數據,但這項數據又是"字典"類型。將其取出,得到"字典" response_dic["results"][0] 。
第4層:字典中又是只有一組鍵-值, response_dic["results"][0]["alternatives"] 取出唯一的鍵"alternatives"對應的值。觀察這個值,[]說明我們得到的結果又是一個"列表"。
第5層:觀察列表 response_dic["results"][0]["alternatives"] ,列表中只有一項數據, response_dic["results"][0]["alternatives"][0] 再將這唯一一項數據取出,發現得到的是一個"字典",而這次得到的字典中有兩組鍵-值,分別取出就是我們要的結果和置信度了。
transcript = response_dic["results"][0]["alternatives"][0]["transcript"] confidence = response_dic["results"][0]["alternatives"][0]["confidence"]
小結:
今天介紹的這種方案,獲取結果需要的時間比用API客戶端庫要快一些,另外應用了把本地語音編碼后放入json請求的方式,也能方便后期和錄音程序結合在一起使用。但稍有一點缺點是API密鑰直接暴露在代碼中,對實際應用可能會有一些影響。
下一步的目標是和錄音功能結合起來,實現自動識別當前錄制的語音。
感謝你閱讀文章!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44630.html
摘要:之前我們總結了使用谷歌將語音轉換為文字的基本流程,然而那只是在命令行中使用實現的。配置開發環境筆者使用的是樹莓派進行試驗的,其他平臺的配置方法可以在這里查找。設置驗證登錄谷歌云平臺控制臺,前往創建服務賬號密鑰界面。 之前我們總結了使用谷歌Cloud Speech API將語音轉換為文字的基本流程,然而那只是在命令行中使用curl實現的。這次我們將總結在Python中使用Cloud Sp...
摘要:全球主要的云計算提供商現在提供基于云計算的人工智能產品。顯然,由于從頭開始構建這樣一個系統的費用高昂,人工智能作為一項服務仍然一直位于行業巨頭所在的領域。在用于人工智能服務的品牌下,公司提供不少于項服務。如今,采用人工智能的企業遇到了一個主要障礙,那就是在內部開發人工智能產品成本高昂,因此有了外包人工智能產品的需求。而對于從中小企業到預算受限的大型企業來說,通過云計算來采用人工智能的成本要低...
閱讀 3199·2021-09-29 09:34
閱讀 3551·2021-09-10 10:51
閱讀 1948·2021-09-10 10:50
閱讀 6731·2021-08-12 13:31
閱讀 3000·2019-08-30 15:54
閱讀 1560·2019-08-30 15:44
閱讀 1430·2019-08-29 12:26
閱讀 2654·2019-08-26 18:36