在使用streaming_detect_intent

时间:2019-01-04 08:26:32

标签: dialogflow google-cloud-speech

我遵循了这个示例,并设法从麦克风中收集了音频缓冲区,并将它们发送到Dialogflow。

https://cloud.google.com/dialogflow-enterprise/docs/detect-intent-stream

但是此处理是顺序的。首先,我必须收集所有以后可以发送给Dialogflow的音频缓冲区。

然后我得到正确的结果以及中间结果。

但是只有在我等到该人先停止讲话之后,才能将收集到的音频缓冲区发送给Dialogflow。

我想在有人还在说话的同时,立即将音频缓冲区发送(流式传输)到dialogflow,并立即获得中间结果。

有人知道这是否可行,并向我指出正确的方向吗? 我的首选语言是Python。

非常感谢!

2 个答案:

答案 0 :(得分:0)

我从Dialogflow支持团队得到了这个答案:

  

从Dialogflow文档中:当检测到识别时,识别就会停止   音频的声音已停止或暂停。在这种情况下,一旦检测到   收到意图后,客户端应关闭流并开始新的   根据需要请求一个新的流。这意味着用户必须   停止/暂停说话,以便将其发送到Dialogflow。

     

为了让Dialogflow检测到适当的意图,它必须具有   完整的用户话语。

     

如果您正在寻找实时语音识别,请查看我们的   语音转文字产品(https://cloud.google.com/speech-to-text/)。

答案 1 :(得分:0)

最近尝试做类似的事情时,我发现有人已经had this problemfigured it out。基本上,您可以通过streamingDetectIntent方法将音频流馈送到DialogFlow并获得中间结果,因为在音频输入中可以识别有效的语言。棘手的一点是,您需要在输入流上设置一个阈值,以便一旦用户在设置的持续时间内停止通话就可以结束该流。流的关闭与到达音频文件的末尾具有相同的目的,并触发意图匹配尝试。

上面链接的解决方案使用SoX来传输来自外部设备的音频。这种方法的优点是SoX已经具有options来设置音频电平阈值以启动/停止流传输过程(请查看silence选项),因此您可以微调设置以使其工作满足您的需求。如果您不使用NodeJS,则可能需要编写自己的实用程序来处理音频流的初始化,但希望这可以为您指明正确的方向。