語音轉文字 - 樹莓派
在這部分課程中,你將編寫代碼,使用語音服務將捕獲的音頻中的語音轉換為文字。
將音頻發送到語音服務
可以使用 REST API 將音頻發送到語音服務。要使用語音服務,首先需要請求訪問令牌,然後使用該令牌訪問 REST API。這些訪問令牌在 10 分鐘後過期,因此你的代碼應該定期請求它們,以確保它們始終是最新的。
任務 - 獲取訪問令牌
-
在你的樹莓派上打開
smart-timer
項目。 -
刪除
play_audio
函數。由於你不希望智能計時器重複你所說的內容,因此不再需要此功能。 -
在
app.py
文件的頂部添加以下導入:import requests
-
在
while True
循環上方添加以下代碼,以聲明語音服務的一些設置:speech_api_key = '<key>'
location = '<location>'
language = '<language>'將
<key>
替換為你的語音服務資源的 API 密鑰。將<location>
替換為你創建語音服務資源時使用的位置。將
<language>
替換為你將使用的語言的區域名稱,例如英語的en-GB
,或粵語的zn-HK
。你可以在 Microsoft 文檔上的語言和語音支持文檔 中找到支持的語言及其區域名稱列表。 -
在此下方,添加以下函數以獲取訪問令牌:
def get_access_token():
headers = {
'Ocp-Apim-Subscription-Key': speech_api_key
}
token_endpoint = f'https://{location}.api.cognitive.microsoft.com/sts/v1.0/issuetoken'
response = requests.post(token_endpoint, headers=headers)
return str(response.text)這會調用一個令牌發行端點,將 API 密鑰作為標頭傳遞。此調用返回一個訪問令牌,可用於調用語音服務。
-
在此下方,聲明一個函數,使用 REST API 將捕獲的音頻中的語音轉換為文字:
def convert_speech_to_text(buffer):
-
在此函數內,設置 REST API URL 和標頭:
url = f'https://{location}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1'
headers = {
'Authorization': 'Bearer ' + get_access_token(),
'Content-Type': f'audio/wav; codecs=audio/pcm; samplerate={rate}',
'Accept': 'application/json;text/xml'
}
params = {
'language': language
}這會使用語音服務資源的位置構建一個 URL。然後,它使用
get_access_token
函數中的訪問令牌填充標頭,以及用於捕獲音頻的採樣率。最後,它定義了一些參數,這些參數將與包含音頻語言的 URL 一起傳遞。 -
在此下方,添加以下代碼以調用 REST API 並返回文本:
response = requests.post(url, headers=headers, params=params, data=buffer)
response_json = response.json()
if response_json['RecognitionStatus'] == 'Success':
return response_json['DisplayText']
else:
return ''這會調用 URL 並解碼響應中返回的 JSON 值。響應中的
RecognitionStatus
值指示調用是否能夠成功將語音提取為文本,如果是Success
,則從函數返回文本,否則返回空字符串。 -
在
while True:
循環上方,定義一個函數來處理從語音轉文字服務返回的文本。此函數現在只會將文本打印到控制台。def process_text(text):
print(text) -
最後,在
while True
循環中將play_audio
的調用替換為convert_speech_to_text
函數的調用,並將文本傳遞給process_text
函數:text = convert_speech_to_text(buffer)
process_text(text) -
運行代碼。按下按鈕並對著麥克風說話。完成後鬆開按鈕,音頻將被轉換為文本並打印到控制台。
pi@raspberrypi:~/smart-timer $ python3 app.py
Hello world.
Welcome to IoT 01 for Beginners.嘗試不同類型的句子,以及單詞發音相同但含義不同的句子。例如,如果你說英語,說 'I want to buy two bananas and an apple too',並注意它將根據單詞的上下文使用正確的 to、two 和 too,而不僅僅是它的發音。
💁 你可以在 code-speech-to-text/pi 文件夾中找到此代碼。
😀 你的語音轉文字程序成功了!