我们遇到了一个奇怪的watson API行为。
我们正在使用Watson的speech- to -text来转录音频文件,最近升级到了更新版本的python sdk。现在,对于一个特定的文件(49 min、45 MB wave file),Watson API一直使用status code 408和message Session timed out进行响应。
它主要发生在我们的临时服务器上,并且在我们的本地环境中大部分时间都工作得很好(我们只能在多次尝试中重现它一次)。我们的逻辑假设在每个请求之前创建新会话。
我们已经检查了API文档,但找不到任何解决方案。我们在使用watson-developer-cloud==0.26.0的同时使用了python 3.5。
你知道怎么解决这个问题吗?
编辑:负责请求的代码
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发布于 2017-06-01 20:45:39
几天前我也遇到了同样的问题,为我解决的问题是在30s会话超时发生之前,通过发送静默的音频数据来保持会话活动。
当客户端启动会话,但服务没有收到30 seconds的音频时,就会发生会话超时(HTTP状态代码408)。当会话处于活动状态,但在30秒内未收到来自客户端的请求时,也会发生这种情况。只有当服务在30秒内没有从客户端接收到数据,并且还没有接收到最后一块数据时,才会出现后一种情况。如果客户端已经发送了所有数据,服务可能需要30秒以上的时间才能生成响应;在这种情况下,请求不会超时。
对于WebSocket连接和HTTP会话,您都可以通过在30秒会话超时发生之前发送任何音频数据(包括静默)来保持会话活动。(还必须将inactivity_timeout参数设置为-1,如下一个项目符号中所述。)对于您发送到服务的任何数据的持续时间,包括您为延长会话而发送的静默,您都需要付费。
理想情况下,您应该在获取用于转录的音频之前建立一个会话,并通过以接近实时的速率发送音频来维护它。您的应用程序还应该从关闭的连接中正常恢复。
您可以在official Documentation中查看有关此错误的信息。
发布于 2017-06-02 00:33:42
Hi @mateuszb根据您的描述,我了解到您间歇性地出现了这个问题。几周前,Watson STT服务进行了更新,现在为了保证连接不会超时(我说的是session timeout),您需要以“近似实时”的速率提供音频。因此,在30秒内,您需要发送至少15秒的音频。您可以检查您的日志和代码以确保满足此要求吗?这些失败的会话可能是因为STT服务正处于饥饿状态。
https://stackoverflow.com/questions/44302785
复制相似问题