【问题标题】:Dont receive results other than those from first audio chunk不接收来自第一个音频块的结果以外的结果
【发布时间】:2016-03-27 01:15:46
【问题描述】:

我想要某种程度的实时语音到文本的转换。我正在使用带有interim_results=true 的网络套接字接口。但是,我只收到第一个音频块的结果。我发送的第二个,第三个......音频块没有被转录。我确实知道我的接收器没有被阻止,因为我确实收到了不活动消息。

json {"error": "Session timed out due to inactivity after 30 seconds."}

如果我需要提供更多上下文信息,请告诉我是否遗漏了什么。

仅供参考,这是我的初始化 json。

{
 "action": "start",
 "content-type":"audio/wav",
 "interim_results": true,
 "continuous": true,
 "inactivity_timeout": 10
}

在我为第一个音频块获得的结果中,最终的 json 字段始终以false 接收。

另外,我正在使用 golang,但这并不重要。

编辑:

考虑下面的伪日志

  • localhost-server 接收前 4 秒的二进制数据#lets say Binary 1
  • 二进制 1 被发送到 Watson
  • {interim_result_1 for first chunk}
  • {interim_result_2 for first chunk}
  • localhost-server 接收到最后 4 秒的二进制数据#lets say Binary 2
  • 二进制 2 被发送到 Watson
  • 向 Watson 发送 {"action": "stop"}
  • {interim_result_3 for first chunk}
  • 第一个块的最终结果
  • 我没有收到第二个块的任何转录

Link to code

【问题讨论】:

  • 你能发布你的代码吗?
  • 另外,请仔细检查 init json - 这听起来像是省略 continuous(或设置为 false)时的预期行为
  • 我确实仔细检查了我的初始化 json。我做了一个 [gist] (gist.github.com/paritosh-gupta/7984bcfc0ec6871c3f83ee0541cd4bfd) 来查看代码。一旦它工作,我会将我的代码移动到公共存储库并在此处放置一个链接。谢谢!

标签: ibm-cloud speech-to-text ibm-watson


【解决方案1】:

您收到超时消息是因为该服务正在等待您发送更多音频或发送一条表示音频提交结束的消息。你是在发送那个消息吗?这很容易:

  • 通过发送 JSON 文本消息并将操作键设置为值 stop:{"action": "stop"}

  • 通过发送空二进制消息

https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/speech-to-text/websockets.shtml

如果这不能解决您的问题,请告诉我

【讨论】:

  • 问题不在于超时。预计超时。考虑一个分块成多个部分的音频文件。我的问题是,除了我发送给 Watson 的音频文件的第一块之外,我无法接收任何转录。我不断地发送这些块而不等待来自 Watson 的任何结果。我将每个块的大小保持在 4 MB 以下,总大小保持在 100MB 以下。完成后,我发送停止信号并等待它现在超时。
  • 感谢您编辑原始问题并添加更多信息。您的应用程序的流程似乎是正确的。您能否发布一个您看到此行为的音频文件?如果您通过 Watson STT 演示应用程序提供该文件会发生什么?你看到同样的行为吗? (该演示页面也使用 websockets,并产生临时)。 speech-to-text-demo.mybluemix.net
  • 我使用与 bluemix 演示相同的音频文件进行测试。我在这里找到了文件。 github.com/leonrch/SpeechToSpeech/blob/master/public/audio/…。它按预期工作。我将使用相同的工作流程在 python 中编写快速代码,看看是否可行。
【解决方案2】:

这有点晚了,但我在这里为 Watson 服务开源了一个 Go SDK: https://github.com/liviosoares/go-watson-sdk

这里有一些关于语音到文本绑定的文档: https://godoc.org/github.com/liviosoares/go-watson-sdk/watson/speech_to_text

_test.go 文件中还有一个将数据流式传输到 API 的示例: https://github.com/liviosoares/go-watson-sdk/blob/master/watson/speech_to_text/speech_to_text_test.go

也许这对你有帮助。

【讨论】:

  • 我使用了 sdk 但仍然无法解决我的问题。这里的代码是从文件中流式传输音频,而我有大量的音频。我从 websocket 上的客户端获得这些卡盘,我将其编码为 wav,然后将它们发送给 watson。有什么想法吗?
【解决方案3】:

这个问题的解决方法是将wav文件的size header设置为0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多