我们正尝试通过JAVA客户端使用Google StreamingRecognize方法。我们正在从麦克风读取数据并将其发送到语音API。 使用以下设置: 识别配置 - LINEAR16,16KHz,en-US 我们尝试将不同的缓冲区大小推送到StreamingRecognize(最多16000字节)。 我们观察到获得第一个结果需要至少4-5秒,并且在中期结果流式传输之后。 任何人都可以确认这是否是API的预期行为。同样很高兴知道为什么会有如此多的延迟。 是否有任何方法或解决方案来最小化延迟。
请注意,在延迟之后我们得到中期结果,最后是完整的话语,并且具有合理的准确度
答案 0 :(得分:0)
我怀疑在描述的背景下有两种行为是错误的,
您的Java服务应用中不应对采样率进行硬编码或固定常量,因为对于安装在相应系统中的每个系统或麦克风适配器,采样率都会有所不同。即,8000,16000,41000,48000等,因此您需要从麦克风的音频上下文中选择采样率,并在第一次初始调用中将其发送到Requestconfig setter中的更新。
如果您在连接握手时通过websocket进行流式传输,请将这些采样率,字节/帧发送给第一个请求观察者,从第二个请求开始,您需要跳过第一个请求观察者,并且可以直接传递给第二个请求观察者得到成绩单。
如果以上几点不起作用,请分享您的StreamingRecognize类。所以我可以相应地调整你的代码