2

我們遇到了一個奇怪的watson API行爲。Watson API返回408狀態碼

我們正在使用Watson的語音轉文本來轉錄音頻文件,並且最近已升級到較新版本的python sdk。現在,對於一個特定的文件(49 min,45 MB wave file),Watson API始終以status code 408和消息Session timed out響應。

它主要發生在我們的登臺服務器上,並且在我們的本地環境中大部分時間都正常工作(我們只能在多次嘗試中重現它)。我們的邏輯假定在每次請求之前創建新會話。

我們檢查了API文檔,但找不到任何解決方案。我們使用python 3.5以及watson-developer-cloud==0.26.0

你有什麼想法如何解決這個問題?

編輯:代碼這是負責的要求

speech_to_text = SpeechToTextV1(
     username=WATSON_USER, 
     password=WATSON_PASSWORD 
) 

with open(path, 'rb') as audio_file: 
    return speech_to_text.recognize(
     audio_file, 
     content_type=kwargs.get('content_type'), 
     timestamps=kwargs.get('timestamps'), 
     inactivity_timeout=kwargs.get('inactivity_timeout'), 
     word_alternatives_threshold=kwargs.get('word_alternatives_threshold'), 
     word_confidence=kwargs.get('word_confidence'), 
     model=kwargs.get('model'), 
     profanity_filter=kwargs.get('profanity_filter'), 
     smart_formatting=kwargs.get('smart_formatting'), 
     speaker_labels=kwargs.get('speaker_labels'), 
    ) 

參數我們發送

content_type = "wav" 
timestamps = True 
inactivity_timeout = -1 
word_alternatives = 0.99 
word_confidence = True 
profanity_filter = False 
smart_formatting = True 
speaker_labels = True 
model = en-US_NarrowbandModel 
+0

請張貼一些代碼:[如何創建一個最小,完整和可驗證的示例](https:// stackoverflow。com/help/mcve) – TheDarkKnight

+0

@TheDarkKnight謝謝你的評論,我已經用我們使用的代碼更新了帖子 – mateuszb

回答

3

我有同樣的問題,前幾天,什麼解決對我來說是維持會話在30秒會話超時發生之前通過發送任何音頻數據,並保持沉默狀態來激活。

會話超時(HTTP狀態碼408)發生在客戶端啓動會話但該服務沒有收到30 seconds的音頻時。當會話處於活動狀態時也會發生,但在30秒內沒有收到客戶端的請求。僅當服務在30秒內沒有從客戶端接收到數據並且它尚未接收到最後一塊數據時纔會出現後一種情況。如果客戶端發送了所有數據,則該服務可能需要30秒以上才能生成響應;在這種情況下,請求不會超時。

對於WebSocket連接和HTTP會話,您可以通過在發生30秒會話超時之前發送任何音頻數據(包括僅靜音)來使會話保持活動狀態。 (您還必須將inactivity_timeout參數設置爲-1,如下一個項目符號所述)。您需要向您發送到服務的任何數據(包括您爲擴展會話而發送的靜音)收取費用。

理想情況下,您需要在獲取用於轉錄的音頻之前建立會話,並通過以接近實時的速率發送音頻來維護它。你的應用程序也應該從關閉的連接中正常恢復。

您可以在official Documentation內看到此錯誤。

2

嗨@mateuszb從你的描述我知道你有間歇性的這個問題。幾個星期前,Watson STT服務已更新,現在爲了不超時連接(並且我正在討論session timeout),您需要以「近似實時」的速率提供音頻。因此,在30秒內,您需要發送至少15秒的音頻。你能否檢查你的日誌和你的代碼,以確保你滿足這個要求?這些失敗的會話可能是因爲STT服務正在捱餓。