我遵循了这个示例,并设法从麦克风中收集了音频缓冲区,并将它们发送到Dialogflow。
https://cloud.google.com/dialogflow-enterprise/docs/detect-intent-stream
但是此处理是顺序的。首先,我必须收集所有以后可以发送给Dialogflow的音频缓冲区。
然后我得到正确的结果以及中间结果。
但是只有在我等到该人先停止讲话之后,才能将收集到的音频缓冲区发送给Dialogflow。
我想在有人还在说话的同时,立即将音频缓冲区发送(流式传输)到dialogflow,并立即获得中间结果。
有人知道这是否可行,并向我指出正确的方向吗? 我的首选语言是Python。
非常感谢!
答案 0 :(得分:0)
我从Dialogflow支持团队得到了这个答案:
从Dialogflow文档中:当检测到识别时,识别就会停止 音频的声音已停止或暂停。在这种情况下,一旦检测到 收到意图后,客户端应关闭流并开始新的 根据需要请求一个新的流。这意味着用户必须 停止/暂停说话,以便将其发送到Dialogflow。
为了让Dialogflow检测到适当的意图,它必须具有 完整的用户话语。
如果您正在寻找实时语音识别,请查看我们的 语音转文字产品(https://cloud.google.com/speech-to-text/)。
答案 1 :(得分:0)
最近尝试做类似的事情时,我发现有人已经had this problem和figured it out。基本上,您可以通过streamingDetectIntent
方法将音频流馈送到DialogFlow并获得中间结果,因为在音频输入中可以识别有效的语言。棘手的一点是,您需要在输入流上设置一个阈值,以便一旦用户在设置的持续时间内停止通话就可以结束该流。流的关闭与到达音频文件的末尾具有相同的目的,并触发意图匹配尝试。
上面链接的解决方案使用SoX来传输来自外部设备的音频。这种方法的优点是SoX已经具有options来设置音频电平阈值以启动/停止流传输过程(请查看silence
选项),因此您可以微调设置以使其工作满足您的需求。如果您不使用NodeJS,则可能需要编写自己的实用程序来处理音频流的初始化,但希望这可以为您指明正确的方向。