Google Speech-to-Text V2 chirp_3无法返回临时识别结果咨询
问题解答
1. chirp_3模型是否支持临时识别结果?
是的,chirp_3模型完全支持流式临时结果输出,它是Google Cloud Speech-to-Text V2专为实时交互场景设计的模型之一,开启interimResults=true后,服务端会在音频持续输入过程中返回isFinal=false的临时识别结果。
2. 开启interimResults=true后仅返回最终结果的可能原因
正常配置下不会出现这种情况,但以下场景可能导致该问题:
- 非流式音频输入:如果代码是一次性将完整音频数据发送给服务端,而非按时间分片(比如每200ms发送一段音频帧),服务端会直接完成全量音频的识别,仅返回最终结果。临时结果的触发依赖持续的流式输入反馈。
- 测试音频时长过短:若测试用音频仅1-2秒,服务端处理速度快于临时结果生成的触发阈值,会直接返回最终结果。建议使用10秒以上的连续语音测试。
- 音频发送间隔过长:如果分片发送的间隔超过服务端的超时阈值,服务端会判定输入结束,直接返回最终结果。
验证实例(chirp_3返回isFinal=false的场景)
以下是简化的Java代码片段,模拟流式分片发送LINEAR16格式音频,并接收临时结果:
// 初始化流式识别客户端 SpeechClient speechClient = SpeechClient.create(); StreamingRecognizeRequest firstRequest = StreamingRecognizeRequest.newBuilder() .setStreamingConfig(StreamingRecognitionConfig.newBuilder() .setConfig(RecognitionConfig.newBuilder() .addLanguageCodes("en-US") .setModel("chirp_3") .setEncoding(RecognitionConfig.AudioEncoding.LINEAR16) .setSampleRateHertz(16000) .build()) .setStreamingFeatures(StreamingRecognitionFeatures.newBuilder() .setInterimResults(true) .build()) .build()) .build(); // 开启流式请求 BidiStream<StreamingRecognizeRequest, StreamingRecognizeResponse> bidiStream = speechClient.streamingRecognizeCallable().call(); bidiStream.send(firstRequest); // 分片发送音频数据(模拟实时输入) Path audioPath = Paths.get("test_long_audio.wav"); byte[] audioBytes = Files.readAllBytes(audioPath); int chunkSize = 3200; // 对应16000采样率下200ms的音频数据 for (int i = 0; i < audioBytes.length; i += chunkSize) { int end = Math.min(i + chunkSize, audioBytes.length); StreamingRecognizeRequest audioRequest = StreamingRecognizeRequest.newBuilder() .setAudioContent(ByteString.copyFrom(audioBytes, i, end - i)) .build(); bidiStream.send(audioRequest); Thread.sleep(200); // 模拟实时输入间隔 } // 接收并处理响应 for (StreamingRecognizeResponse response : bidiStream) { for (StreamingRecognitionResult result : response.getResultsList()) { System.out.printf("isFinal: %b, 转录文本: %s%n", result.getIsFinal(), result.getAlternatives(0).getTranscript()); } }
运行上述代码后,控制台会输出类似日志:
isFinal: false, 转录文本: Hello isFinal: false, 转录文本: Hello everyone isFinal: false, 转录文本: Hello everyone my name isFinal: true, 转录文本: Hello everyone, my name is Nick.
内容的提问来源于stack exchange,提问作者fz Z
相关产品推荐
相关产品推荐

