摘要:如果你有疑問,或許可以參考創(chuàng)建密鑰使用谷歌將語音轉(zhuǎn)換為文字。將其取出,得到字典。
在之前發(fā)布的使用谷歌Cloud Speech API將語音轉(zhuǎn)換為文字一文中,我們實(shí)現(xiàn)了在控制臺(tái)使用curl發(fā)送post請(qǐng)求,得到語音轉(zhuǎn)文字的結(jié)果;而在Python中使用谷歌Cloud Speech API將語音轉(zhuǎn)換為文字一文中,我們實(shí)現(xiàn)了安裝Cloud Speech API客戶端庫,通過調(diào)用庫函數(shù)得到語音轉(zhuǎn)文字的結(jié)果。
如果你嘗試過這兩種方法,就會(huì)發(fā)現(xiàn)其實(shí)后者得到結(jié)果需要的時(shí)間要長(zhǎng)一些(筆者使用這兩種方法得到結(jié)果的耗時(shí)分別大約是5秒、7秒)。那么,有沒有辦法在python中像第一種方法那樣,使用curl命令發(fā)送post請(qǐng)求呢。當(dāng)然是可行的,所以今天我們將介紹在Python中使用Cloud Speech API將語音轉(zhuǎn)換為文字的另一種方案,另外這次我們將把音頻文件編碼為base64嵌入到j(luò)son請(qǐng)求文件中,省去了上傳聲音文件到Cloud Storage的步驟。
相關(guān)說明之類的在上面兩篇文章里已經(jīng)寫了很多,這邊就直接貼代碼。
*使用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)
幾點(diǎn)說明:
注釋①:請(qǐng)求API的鏈接,請(qǐng)?zhí)鎿Q你的API密鑰 。如果你有疑問,或許可以參考 創(chuàng)建API密鑰 | 使用谷歌Cloud Speech API將語音轉(zhuǎn)換為文字 。
audio_file 路徑替換為你的本地聲音文件路徑。
注釋②:這次上傳音頻的方式是,將聲音文件編碼為base64,把對(duì)應(yīng)的整個(gè)字符串放進(jìn)json請(qǐng)求中。如果你執(zhí)行 print(type(audio_b64)) 就會(huì)發(fā)現(xiàn)編碼后的audio_b64是 bytes 類型,所以還需要做一次decode(),轉(zhuǎn)成字符串。
注釋③:先以字典格式保存json請(qǐng)求內(nèi)容,代表聲音文件的字符串就在這里放入。
注釋④:API返回的結(jié)果保存在 response_str ,如果你直接運(yùn)行 print(response_str) 就會(huì)發(fā)現(xiàn)這個(gè)字符串可以看做一個(gè)有很多“層”的字典,要提取出識(shí)別結(jié)果,需要搞清楚這個(gè)字典到底是怎么組成的:
第1層:花括號(hào){}說明字符串 response_str 在執(zhí)行 json.loads 后變成一個(gè)"字典"。得到"字典" response_dic 。
第2層:字典中只有一組鍵-值, response_dic["results"] 取出唯一的鍵"results"對(duì)應(yīng)的值。觀察這個(gè)值,發(fā)現(xiàn)中括號(hào)[],說明這個(gè)值的類型是”列表“。
第3層:觀察列表 response_dic["results"] ,發(fā)現(xiàn)列表中只有一項(xiàng)數(shù)據(jù),但這項(xiàng)數(shù)據(jù)又是"字典"類型。將其取出,得到"字典" response_dic["results"][0] 。
第4層:字典中又是只有一組鍵-值, response_dic["results"][0]["alternatives"] 取出唯一的鍵"alternatives"對(duì)應(yīng)的值。觀察這個(gè)值,[]說明我們得到的結(jié)果又是一個(gè)"列表"。
第5層:觀察列表 response_dic["results"][0]["alternatives"] ,列表中只有一項(xiàng)數(shù)據(jù), response_dic["results"][0]["alternatives"][0] 再將這唯一一項(xiàng)數(shù)據(jù)取出,發(fā)現(xiàn)得到的是一個(gè)"字典",而這次得到的字典中有兩組鍵-值,分別取出就是我們要的結(jié)果和置信度了。
transcript = response_dic["results"][0]["alternatives"][0]["transcript"] confidence = response_dic["results"][0]["alternatives"][0]["confidence"]
小結(jié):
今天介紹的這種方案,獲取結(jié)果需要的時(shí)間比用API客戶端庫要快一些,另外應(yīng)用了把本地語音編碼后放入json請(qǐng)求的方式,也能方便后期和錄音程序結(jié)合在一起使用。但稍有一點(diǎn)缺點(diǎn)是API密鑰直接暴露在代碼中,對(duì)實(shí)際應(yīng)用可能會(huì)有一些影響。
下一步的目標(biāo)是和錄音功能結(jié)合起來,實(shí)現(xiàn)自動(dòng)識(shí)別當(dāng)前錄制的語音。
感謝你閱讀文章!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44630.html
摘要:之前我們總結(jié)了使用谷歌將語音轉(zhuǎn)換為文字的基本流程,然而那只是在命令行中使用實(shí)現(xiàn)的。配置開發(fā)環(huán)境筆者使用的是樹莓派進(jìn)行試驗(yàn)的,其他平臺(tái)的配置方法可以在這里查找。設(shè)置驗(yàn)證登錄谷歌云平臺(tái)控制臺(tái),前往創(chuàng)建服務(wù)賬號(hào)密鑰界面。 之前我們總結(jié)了使用谷歌Cloud Speech API將語音轉(zhuǎn)換為文字的基本流程,然而那只是在命令行中使用curl實(shí)現(xiàn)的。這次我們將總結(jié)在Python中使用Cloud Sp...
摘要:全球主要的云計(jì)算提供商現(xiàn)在提供基于云計(jì)算的人工智能產(chǎn)品。顯然,由于從頭開始構(gòu)建這樣一個(gè)系統(tǒng)的費(fèi)用高昂,人工智能作為一項(xiàng)服務(wù)仍然一直位于行業(yè)巨頭所在的領(lǐng)域。在用于人工智能服務(wù)的品牌下,公司提供不少于項(xiàng)服務(wù)。如今,采用人工智能的企業(yè)遇到了一個(gè)主要障礙,那就是在內(nèi)部開發(fā)人工智能產(chǎn)品成本高昂,因此有了外包人工智能產(chǎn)品的需求。而對(duì)于從中小企業(yè)到預(yù)算受限的大型企業(yè)來說,通過云計(jì)算來采用人工智能的成本要低...
閱讀 3209·2021-09-29 09:34
閱讀 3565·2021-09-10 10:51
閱讀 1963·2021-09-10 10:50
閱讀 6780·2021-08-12 13:31
閱讀 3012·2019-08-30 15:54
閱讀 1591·2019-08-30 15:44
閱讀 1439·2019-08-29 12:26
閱讀 2665·2019-08-26 18:36