Watson API返回408状态码
我们遇到了一个奇怪的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
我有同样的问题,前几天,什么解决对我来说是维持会话在30秒会话超时发生之前通过发送任何音频数据,并保持沉默状态来激活。
会话超时(HTTP状态码408)发生在客户端启动会话但该服务没有收到30 seconds
的音频时。当会话处于活动状态时也会发生,但在30秒内没有收到客户端的请求。仅当服务在30秒内没有从客户端接收到数据并且它尚未接收到最后一块数据时才会出现后一种情况。如果客户端发送了所有数据,则该服务可能需要30秒以上才能生成响应;在这种情况下,请求不会超时。
对于WebSocket连接和HTTP会话,您可以通过在发生30秒会话超时之前发送任何音频数据(包括仅静音)来使会话保持活动状态。 (您还必须将inactivity_timeout
参数设置为-1
,如下一个项目符号所述)。您需要向您发送到服务的任何数据(包括您为扩展会话而发送的静音)收取费用。
理想情况下,您需要在获取用于转录的音频之前建立会话,并通过以接近实时的速率发送音频来维护它。你的应用程序也应该从关闭的连接中正常恢复。
您可以在official Documentation内看到此错误。
嗨@mateuszb从你的描述我知道你有间歇性的这个问题。几个星期前,Watson STT服务已更新,现在为了不超时连接(并且我正在讨论session timeout
),您需要以“近似实时”的速率提供音频。因此,在30秒内,您需要发送至少15秒的音频。你能否检查你的日志和你的代码,以确保你满足这个要求?这些失败的会话可能是因为STT服务正在挨饿。
请张贴一些代码:[如何创建一个最小,完整和可验证的示例](https:// stackoverflow。com/help/mcve) – TheDarkKnight
@TheDarkKnight谢谢你的评论,我已经用我们使用的代码更新了帖子 – mateuszb