9

我正在嘗試使用Google.Cloud.Speech.V1(Google雲語音API的客戶端庫),並且我使用的是Google的示例代碼的稍微修改後的版本:撥打Google雲語音API不會返回任何內容,10分鐘後失敗

public async Task<string> TranscribeSpeech(string filenameAndPath, int WAVSampleRate = 8000) 
    { 
     Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Utils.GetHomeFolder() + @"\Google Speech API Key.json"); //for authentication 

     var language = WebConfigurationManager.AppSettings["GoogleSpeechFromLocale"]; 

     var speech = SpeechClient.Create(); 
     var response = await speech.RecognizeAsync(new RecognitionConfig() 
     { 
      Encoding = RecognitionConfig.Types.AudioEncoding.Linear16, 
      SampleRateHertz = WAVSampleRate, 
      LanguageCode = language, 
     }, RecognitionAudio.FromFile(filenameAndPath)); 

     return response.Results.First().Alternatives.First().Transcript; 
    } 

.Recognize().RecognizeAsync()方法從不返回任何內容,並在10分鐘後拋出異常說Status(StatusCode=DeadlineExceeded,Detail="Deadline Exceeded")!

換句話說,當我在Visual Studio中逐行進行調試時,代碼在等待speech.RecognizeAsync()後不會繼續,並且只是保持等待狀態,直到它在10分鐘後拋出異常。

我的代碼或API設置有問題嗎?

我輸入文件通常只有2-3秒長,並具有以下格式(輸出ffmpeg):

Stream #0:0: Audio: pcm_s16le ([1][0][0][0]/0x0001), 8000 Hz, mono, s16, 128 kb/s

我的應用程序的代碼是在Azure上託管。 Google雲端平臺控制檯顯示沒有API調用 - 可能意味着我的請求無法訪問Google服務器。

同樣的應用程序也會調用Bing Speech API並且它們是成功的。

如果我使用相同的WAV文件從https://developers.google.com/apis-explorer/?hl=en_US#p/speech/v1beta1/speech.speech.syncrecognize運行呼叫,它會成功。

+0

事實上,您的雲平臺控制檯不顯示API調用意味着什麼。我幾個月來一直在使用語音API,並沒有任何顯示。您是否嘗試過從簡單的控制檯應用程序運行代碼,只是爲了排除Azure作爲問題源?該代碼適用於我。 –

+0

另一個要嘗試的是將文件上傳到谷歌雲存儲中的存儲桶,然後使用'speech.RecognizeAsync(rc,RecognitionAudio.FromStorageUri(url));',您的url就像'gs:// my_bucket/test.raw'。這應該排除由文件傳輸引起的問題。 –

回答

4

我帶你跟着安裝指南:https://cloud.google.com/speech/docs/reference/libraries如果你這樣做,一切都應該正常工作。

但是,您可以使用它的最大數量。

1內容限制:

1-1 Synchronous Requests大約1分鐘。

1-2 Asynchronous Requests大約80分鐘。

1-3 Streaming Requests,也約1分鐘。

2語音上下文限制:

2-1 Phrases per request上升到500。

2-2 Total characters per request值上升到10k字符。

2-3 Characters per phrase上升到100

音頻比約1分鐘必須使用uri領域引用的音頻文件在谷歌雲存儲更長的時間。

對於StreamingRecognize請求,音頻必須以近似實時的速率發送。

試圖處理超過這些內容限制的內容將產生錯誤。

如果你想知道更多Google Speech API的限制,我建議你看看這個:https://cloud.google.com/speech/limits,因爲我也有超過另一個谷歌API的限制相同的錯誤。

+0

我們的團隊去年受到了這個影響。事實證明,我們超過了每天最大請求數限制。我們正在運行一個自動化腳本來處理大量音頻樣本,並通過各種參數表徵不同平臺的性能。我們與Google建立了企業關係,爲了繼續我們的分析,我們獲得了開發用戶帳戶的免除限制。 – Zakir

+0

我的音頻長度僅爲2-3秒,因此我不會將此答案標記爲現在接受。感謝您的研究。 – K48

0

通過註釋掉SampleRateHertz解決了這個問題:

 var response = await speech.RecognizeAsync(new RecognitionConfig() 
     { 
      Encoding = RecognitionConfig.Types.AudioEncoding.Linear16, 
      //SampleRateHertz = WAVSampleRate, 
      LanguageCode = language, 
     }, RecognitionAudio.FromFile(filenameAndPath)); 

該錯誤消息是:

sample_rate_hertz(8000)中RecognitionConfig必須被省略或匹配在WAV報頭中的值( 48000)

相關問題