疑難排解

瞭解實用的疑難排解步驟,解決您在使用語音轉文字時遇到的問題。

無法驗證語音轉文字

您可能會收到錯誤訊息,指出應用程式預設憑證無法使用。或者,您可能想瞭解如何在呼叫語音轉文字時,取得要使用的 API 金鑰。

語音轉文字使用應用程式預設憑證 (ADC) 進行驗證。

在呼叫 Speech-to-Text API 的情況下,ADC 的憑證必須在上下文中提供。舉例來說,如果您在終端機中設定 ADC,但在 IDE 的偵錯工具中執行程式碼,程式碼的執行內容可能就無法存取憑證。在這種情況下,您對語音轉文字的要求可能會失敗。

如要瞭解如何向 ADC 提供憑證,請參閱「設定應用程式預設憑證」。

語音轉文字傳回空白的回應

語音轉文字可能會傳回空白回應,原因有很多。問題來源可能是 RecognitionConfig 或音訊本身。

排解 RecognitionConfig 問題

RecognitionConfig 物件 (或 StreamingRecognitionConfig) 是 Speech-to-Text 語音辨識要求的一部分。如要正確執行轉錄作業,請設定下列主要類別的欄位:

  • 音訊設定
  • 模型和語言

空白回應 (例如空白的 {} JSON 回應) 的常見原因是提供錯誤的音訊中繼資料資訊。如果音訊設定欄位設定不正確,轉錄作業很可能會失敗,且辨識模型會傳回空白結果。

音訊設定包含提供音訊的中繼資料。您可以使用 ffprobe 指令取得音訊檔案的中繼資料,該指令是 FFMPEG 的一部分。

以下範例說明如何使用這項指令取得此語音樣本的中繼資料。

$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
  Duration: 00:00:35.75, bitrate: 128 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s

檔案明確具有 8,000 Hz、一個頻道和 LINEAR16 編碼 (s16),您可以在 RecognitionConfig 中使用這項資訊。

請按照下列步驟解決空回應的其他可能原因:

  1. 播放檔案並聆聽輸出內容。判斷音訊是否清晰?語音是否容易理解?

    如要播放檔案,您可以使用 SoX (Sound eXchange)play 指令。以下列舉幾個採用不同音訊編碼的範例。

    FLAC 檔案包含表示取樣率、編碼類型與頻道數的標題,且可按照以下方式來播放:

    play audio.flac

    LINEAR16 檔案不含標頭。如要播放這些檔案,請指定取樣率、編碼類型和頻道數。LINEAR16 編碼必須是 16 位元、帶正負號的整數,且採用小端序。

    play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw

    MULAW 檔案也不包含標頭,且通常使用較低的取樣率。

    play --channels=1 --rate=8000 --encoding=u-law audio.raw
  2. 檢查資料的音訊編碼是否與您在 RecognitionConfig 中傳送的參數相符。舉例來說,如果您的要求已指定 "encoding":"FLAC""sampleRateHertz":16000,則 SoX play 指令列出的音訊資料參數應與這些參數相符,如下所示:

    play audio.flac

    應列出:

    Encoding: FLAC
    Channels: 1 @ 16-bit
    Sampleratehertz: 16000 Hz

    如果 SoX 清單顯示的 Sampleratehertz 不是 16000Hz,請變更 InitialRecognizeRequest 中的 "sampleRateHertz" 以便比對。如果 Encoding 並非 FLAC,或 Channels 並非 1 @ 16-bit,則您無法直接使用此檔案,並且需要將它轉換為相容編碼 (請參閱下一步)。

  3. 如果音訊檔案不是採用 FLAC 編碼,請嘗試使用 SoX 將其轉換為 FLAC,然後重複上述步驟來播放檔案,以及驗證編碼、sampleRateHertz 和頻道。以下列舉幾個將各種音訊檔案格式轉換為 FLAC 編碼的範例:

    sox audio.wav --channels=1 --bits=16 audio.flac
    sox audio.ogg --channels=1 --bits=16 audio.flac
    sox audio.au --channels=1 --bits=16 audio.flac
    sox audio.aiff --channels=1 --bits=16 audio.flac

    如要將原始檔案轉換為 FLAC,您需要知道檔案的音訊編碼。舉例來說,如要將 16,000 Hz 的立體聲 16 位元已簽署 Little-Endian 轉換為 FLAC,請按照以下範例操作:

    sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw --channels=1 --bits=16 audio.flac
  4. 使用提供的範例音訊檔案執行快速入門導覽課程範例或其中一個範例應用程式。成功執行範例之後,請將範例音訊檔案替換成您的音訊檔案。

模型和語言設定

如要取得高品質的轉錄結果,模型選取十分重要。語音轉文字提供多種模型,這些模型已針對不同用途進行調整,且必須選擇最符合音訊內容的模型。舉例來說,有些模型 (例如 latest_shortcommand_and_search) 是短篇型模型,也就是說更適合用於短音訊和提示。這些模型可能會在偵測到一段時間的無聲狀態後,立即傳回結果。另一方面,長篇模型 (例如 latest_short, phone_call, video and default) 更適合用於較長的音訊,且不像音訊結束時那樣,會對靜默片段的解讀過於敏感。

如果辨識結果結束得太突然或無法快速回傳,請嘗試使用語音 UI 測試其他模型,看看是否能改善轉錄品質。

逾時錯誤

這些問題大多是因為 Speech-to-Text 設定錯誤或使用不當。

LongRunningRecognizeBatchRecognize

  • 問題:您收到 TimeoutError: Operation did not complete within the designated timeout

  • 解決方法:您可以將轉錄稿傳送至 Cloud Storage 值區,或在要求中延長逾時時間。

LongRunningRecognizeBatchRecognize 要求未在指定的逾時期限內完成,且並非表示語音轉錄失敗的錯誤時,就會發生這個問題。這表示轉錄結果尚未準備好供您擷取。

StreamingRecognize

  • 問題:您收到 Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time

  • 解決方案:請縮短音訊區塊之間的傳送時間。如果 Speech-to-Text 每隔幾秒未收到新的片段,就會關閉連線並觸發此錯誤。

StreamingRecognize 409 已中止

  • 問題:您收到 409 Max duration of 5 minutes reached for stream 錯誤。

  • 解決方法:您已達到串流辨識上限 (五分鐘的音訊)。當串流數量即將達到上限時,請關閉串流並開啟新的串流。

轉錄稿品質不佳

自動語音辨識 (ASR) 支援多種用途。只要嘗試不同的 API 選項,就能解決大部分的品質問題。為改善辨識準確率,請按照「最佳做法」的指示操作。

無法辨識簡短的語音指令

  • 問題:API 無法擷取「Yes」、「No」和「Next」等使用者短語,因此這些語音會遺漏在轉錄稿中。

  • 解決方法:請按照下列步驟操作。

    1. 使用不同的模型測試相同要求。

    2. 新增語音調整功能,並增強缺少的字詞。

    3. 如果您使用串流輸入,請嘗試設定 single_utterance=true

持續無法辨識的字詞或詞組

  • 問題:系統一再將某些字詞或詞組誤認,例如將「a」誤認為「8」

  • 解決方法:請按照下列步驟操作。

    1. 使用不同的模型測試相同要求。

    2. 新增語音調整功能,並增強缺少的字詞。您可以使用類別符記來提升整組字詞的權重,例如數字序列或地址。查看可用的類別符記

    3. 請嘗試提高 max_alternatives。然後檢查 SpeechRecognitionResult alternatives,並選擇符合所需格式的第一個結果。

ASR 可能無法處理格式。語音調整功能通常有助於取得必要格式,但可能需要後製才能符合必要格式。

混合或多語言輸入

  • 問題:音訊包含多種語言的語音,例如英文和西班牙文的對話,導致轉錄結果錯誤。

  • 解決方法:系統不支援這項功能。每個請求只能轉錄一種語言。

權限遭拒

  • 問題:您收到下列錯誤訊息。

    Permission denied to access GCS object BUCKET-PATH.
    Source error: PROJECT-ID@gcp-sa-speech.iam.gserviceaccount.com does not have
    storage.buckets.get access to the Google Cloud Storage bucket.
    Permission 'storage.buckets.get' denied on resource (or it may not exist).
  • 解決方法:PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.com提供權限,讓其存取 BUCKET-PATH 值區中的檔案。

引數無效

  • 問題:您收到下列錯誤訊息。

    {
      "error": {
        "code": 400,
        "message": "Request contains an invalid argument.",
        "status": "INVALID_ARGUMENT"
      }
    }
  • 解決方案:檢查引數並與 API 說明文件進行比較,然後驗證引數是否正確。請確認所選端點與要求 / 資源中的位置相符。

資源已用盡

  • 問題:您收到下列錯誤訊息。

    RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
  • 解決方法:請參閱這篇文章,瞭解如何要求提高配額。

串流區塊過大

  • 問題:您收到下列錯誤訊息。

    INVALID_ARGUMENT: Request audio can be a maximum of 10485760 bytes.
    [type.googleapis.com/util.MessageSetPayload='[google.rpc.error_details_ext]
    { message: "Request audio can be a maximum of 10485760 bytes." }']
  • 解決方案:您需要減少傳送的音訊區塊大小。建議您傳送 100 毫秒的區塊,以獲得最佳延遲時間,並避免達到音訊限制

資料記錄

  • 問題:語音轉文字不提供任何 Cloud Logging。

  • 解決方案:由於 Speech-to-Text 的資料記錄功能預設為停用,因此客戶需要在專案層級啟用這項功能。