瞭解實用的疑難排解步驟,解決您在使用語音轉文字時遇到的問題。
無法驗證語音轉文字
您可能會收到錯誤訊息,指出應用程式預設憑證無法使用。或者,您可能想瞭解如何在呼叫 Speech-to-Text 時,取得要使用的 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
中使用這項資訊。
編碼相關疑難排解
如要解決其他可能導致空白回應的原因,請按照下列步驟操作:
播放檔案並聆聽輸出內容。判斷音訊是否清晰?語音是否容易理解?
如要播放檔案,您可以使用 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
檢查資料的音訊編碼是否與您在
RecognitionConfig
中傳送的參數相符。舉例來說,如果您的要求已指定"encoding":"FLAC"
和"sampleRateHertz":16000
,則 SoX 的play
指令列出的音訊資料參數應與這些參數相符,如下所示:play audio.flac
應列出:
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000 Hz
如果 SoX 項目顯示的不是
16000Hz
,請將InitialRecognizeRequest
中的"sampleRateHertz"
變更為相符的項目。Sampleratehertz
如果Encoding
並非FLAC
,或Channels
並非1 @ 16-bit
,則您無法直接使用此檔案,並且需要將它轉換為相容編碼 (請參閱下一步)。如果音訊檔案不是採用 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
使用提供的範例音訊檔案執行快速入門導覽課程範例或其中一個範例應用程式。成功執行範例之後,請將範例音訊檔案替換成您的音訊檔案。
模型和語言設定
選取模型是取得高品質轉錄結果的重要環節。語音轉文字提供多種模型,這些模型已針對不同用途進行調整,因此您必須選擇最符合音訊的模型。舉例來說,部分模型 (例如 latest_short
和 command_and_search
) 是短篇模型,因此更適合短音訊和提示。這些模型偵測到一段無聲時間後,可能會立即傳回結果。另一方面,長篇模型 (例如 latest_short, phone_call, video and default
) 更適合較長的音訊,且不會像短篇模型一樣,將靜音解讀為音訊結尾。
如果辨識作業過於倉促結束或無法快速傳回結果,請使用 Speech UI 試驗其他模型,看看能否提升轉錄品質。
逾時錯誤
這些問題大多是因設定錯誤或誤用語音轉文字服務所致。
LongRunningRecognize
或BatchRecognize
問題:你收到
TimeoutError: Operation did not complete within the designated timeout
。解決方法:您可以將轉錄稿傳送至 Cloud Storage 值區,或在要求中延長逾時時間。
如果 LongRunningRecognize
或 BatchRecognize
要求未在指定逾時時間內完成,且並非表示語音轉錄失敗的錯誤,就會發生這個問題。這表示轉錄結果尚未準備好供您擷取。
StreamingRecognize
問題:你收到
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time
。解決方案:縮短傳送音訊區塊的時間間隔。如果語音轉文字服務每隔幾秒未收到新區塊,就會關閉連線並觸發這項錯誤。
StreamingRecognize
409 aborted
問題:您收到
409 Max duration of 5 minutes reached for stream
錯誤。解決方法:您已達到串流辨識上限,即五分鐘的音訊。 如果快要達到上限,請關閉串流並開啟新的串流。
轉錄稿品質不佳
自動語音辨識 (ASR) 支援多種用途。如要解決大多數品質問題,可以嘗試使用不同的 API 選項。為改善辨識準確率,請按照最佳做法的指示操作。
無法辨識簡短語音
問題:API 無法擷取使用者簡短的語音內容,例如「是」、「否」和「下一個」,因此轉錄稿中會缺少這些內容。
解決方法:請按照下列步驟操作。
使用不同模型測試相同要求。
新增語音調整和增強遺漏字詞。
如果使用串流輸入,請嘗試設定
single_utterance=true
。
系統持續無法辨識字詞或詞組
問題:系統持續誤認特定字詞或詞組,例如將「a」辨識為「8」。
解決方法:請按照下列步驟操作。
使用不同模型測試相同要求。
新增語音調整和增強功能,補足遺漏的字詞。您可以使用類別權杖 提升整組字詞的權重,例如數字序列或地址。檢查可用的類別權杖。
請嘗試提高
max_alternatives
。 然後檢查 SpeechRecognitionResultalternatives
,並選擇符合所需格式的第一個結果。
ASR 可能難以處理格式。語音轉錄功能通常可以提供所需格式,但可能需要後續處理才能符合規定。
混合或多語言輸入
問題:音訊包含多種語言的語音,例如英文和西班牙文的對話,導致轉錄結果有誤。
解決方法:這項功能不支援。Speech-to-Text 每次要求只能轉錄一種語言。
權限遭拒
問題:您收到下列錯誤訊息。
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-speechiam.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 預設會停用資料記錄功能,因此客戶必須在專案層級啟用這項功能。