跳至主要内容

語音轉文字 - 虛擬物聯網設備

在本課程的這一部分,你將編寫代碼,使用語音服務將從麥克風捕獲的語音轉換為文字。

將語音轉換為文字

在 Windows、Linux 和 macOS 上,可以使用語音服務的 Python SDK 來監聽你的麥克風,並將檢測到的任何語音轉換為文字。它會持續監聽,檢測音頻級別,並在音頻級別下降時(例如在一段語音結束時)將語音發送進行轉換為文字。

任務 - 將語音轉換為文字

  1. 在你的電腦上創建一個名為 smart-timer 的文件夾,並在其中創建一個名為 app.py 的單文件 Python 應用程序和一個 Python 虛擬環境。

  2. 安裝語音服務的 Pip 包。確保你是在啟動虛擬環境的終端中安裝的。

    pip install azure-cognitiveservices-speech

    ⚠️ 如果你收到以下錯誤:

    ERROR: Could not find a version that satisfies the requirement azure-cognitiveservices-speech (from versions: none)
    ERROR: No matching distribution found for azure-cognitiveservices-speech

    你需要更新 Pip。使用以下命令進行更新,然後再次嘗試安裝該包

    pip install --upgrade pip
  3. 將以下導入添加到 app.py 文件中:

    import requests
    import time
    from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer

    這將導入一些用於識別語音的類。

  4. 添加以下代碼來聲明一些配置:

    speech_api_key = '<key>'
    location = '<location>'
    language = '<language>'

    recognizer_config = SpeechConfig(subscription=speech_api_key,
    region=location,
    speech_recognition_language=language)

    <key> 替換為你的語音服務的 API 密鑰。將 <location> 替換為你創建語音服務資源時使用的位置。

    <language> 替換為你將使用的語言的區域名稱,例如英語的 en-GB 或粵語的 zn-HK。你可以在 Microsoft 文檔上的語言和語音支持文檔 中找到支持的語言及其區域名稱列表。

    然後,這些配置將用於創建一個 SpeechConfig 對象,該對象將用於配置語音服務。

  5. 添加以下代碼來創建一個語音識別器:

    recognizer = SpeechRecognizer(speech_config=recognizer_config)
  6. 語音識別器在後台線程上運行,監聽音頻並將其中的任何語音轉換為文字。你可以使用回調函數來獲取文字 - 定義一個函數並將其傳遞給識別器。每次檢測到語音時,回調函數都會被調用。添加以下代碼來定義一個回調函數,並將此回調函數傳遞給識別器,還有定義一個處理文字的函數,將其寫入控制台:

    def process_text(text):
    print(text)

    def recognized(args):
    process_text(args.result.text)

    recognizer.recognized.connect(recognized)
  7. 語音識別器只有在你顯式啟動時才會開始監聽。添加以下代碼來啟動識別。這在後台運行,因此你的應用程序還需要一個無限循環來保持應用程序運行。

    recognizer.start_continuous_recognition()

    while True:
    time.sleep(1)
  8. 運行此應用程序。對著你的麥克風說話,轉換為文字的音頻將輸出到控制台。

    (.venv) ➜  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/virtual-iot-device 文件夾中找到此代碼。

😀 你的語音轉文字程序成功了!