2017-08-31 42 views
0

我们正试图通过JAVA客户端使用Google StreamingRecognize方法。我们正在从麦克风读取数据并将其发送到语音API。 使用以下设置: 识别配置 - LINEAR16,16KHz,en-US 我们尝试将不同的缓冲区大小推送到StreamingRecognize(最多16000字节)。 我们观察到获得第一个结果需要至少4-5秒,并且在中间结果被流式传输之后。 任何人都可以确认这是否是API的预期行为。也很高兴知道为什么有这么多的延迟。 是否有任何方法或解决方法来减少延迟。Google-Cloud-Speech:StreamingRecognize方法的第一个中间结果的延迟

请注意,后延迟我们得到的中间结果和最终的完整话语与合理的准确性

+0

我*怀疑*它正在等待获得一些上下文才能产生第一个中期结果。 –

+0

任何关于上下文可能的猜测以及是否有可能最大限度地减少上下文造成的延迟。 Android SpeechRecognizer似乎工作正常。 –

+0

基本上,整个话语的语境。我不知道Android SpeechRecognizer是否使用了相同的技术* - 并且它可能会针对非常不同的场景进行优化(例如,对于许多句子,只需要几个字)。我不确定自己是否还有我的C#流式语音应用程序 - 这是我使用它之后的一段时间。我记得开始的时候有一点延迟,但看起来并不大,我怀疑它是4-5秒。如果我有时间,我会尽力找到它并重现。 –

回答

0

我怀疑2层的行为是错误的描述的情况下,

  1. 采样率应不硬编码或固定常量在您的Java服务应用程序中,因为对于安装在相应系统中的每个系统或麦克风适配器,采样率会有所不同。即8000,16000,41000,4800等等,所以你需要从你的麦克风的音频环境中选择采样率,并在第一次初始调用时发送它以在Requestconfig设置器中更新。

  2. 如果你是流通过在连接握手时的WebSocket发送这些采样率,字节/帧到第一个要求观察员和来自第二请求以后,你需要跳过第一个要求观察员和可以直接传递到第二请求观察员得到成绩单。

如果以上几点无效共享您的StreamingRecognize类。所以我可以相应地调整你的代码