You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中Google Speech-to-Text API词级置信度无法获取且服务无响应求助

排查Google Speech-to-Text词级置信度获取失败&服务无响应问题

我之前也碰到过类似的棘手问题,咱们一步步来拆解排查:

1. 先确认配置的正确构建方式(针对Python客户端库)

如果你用的是Google Cloud官方Python客户端库,直接传字典格式的配置大概率会被API忽略——官方要求用RecognitionConfig类来构建参数,这样才能确保词级置信度等开关被正确识别:

from google.cloud import speech_v1

enable_word_time_offsets = True
enable_automatic_punctuation = True
enable_word_confidence = True

# 改用官方配置类构建
config = speech_v1.RecognitionConfig(
    enable_word_time_offsets=enable_word_time_offsets,
    enable_word_confidence=enable_word_confidence,
    language_code=self.language,
    enable_automatic_punctuation=enable_automatic_punctuation
)

纯字典格式只适合直接调用REST API的场景,用客户端库一定要用官方提供的配置类。

2. 检查音频时长和识别模式

如果你的音频时长超过1分钟,同步识别请求会直接超时,这就是你收到“Service is not responding”的常见原因。这种情况必须切换到异步识别或者流式识别:

  • 异步识别:把音频上传到Google Cloud Storage,提交请求后轮询结果
  • 流式识别:实时传输音频数据到API

给你一个带词级置信度解析的异步识别示例:

from google.cloud import speech_v1

client = speech_v1.SpeechClient()

# 假设音频存在GCS存储桶中
audio = speech_v1.RecognitionAudio(uri="gs://your-bucket-name/your-audio-file.wav")

# 正确构建配置
config = speech_v1.RecognitionConfig(
    enable_word_confidence=True,
    enable_word_time_offsets=True,
    language_code=self.language,
    enable_automatic_punctuation=True
)

# 发起异步识别请求
operation = client.long_running_recognize(config=config, audio=audio)

print("等待识别结果...")
response = operation.result(timeout=90)  # 可根据音频长度调整超时时间

# 解析词级置信度
for result in response.results:
    top_alternative = result.alternatives[0]
    print(f"完整转录文本: {top_alternative.transcript}")
    # 遍历每个词的置信度和时间偏移
    for word_info in top_alternative.words:
        word = word_info.word
        confidence = word_info.confidence
        start_time = word_info.start_time.total_seconds()
        end_time = word_info.end_time.total_seconds()
        print(f"词: {word}, 置信度: {confidence:.4f}, 开始时间: {start_time}s, 结束时间: {end_time}s")

3. 验证权限与配额

  • 确保你的服务账号拥有roles/speech.user或更高权限(比如roles/speech.admin
  • 去Google Cloud控制台检查Speech-to-Text的配额,有没有超出调用次数或并发限制
  • 确认你的服务账号密钥有效,且关联了正确的云项目

4. 检查音频格式兼容性

Google Speech-to-Text对音频格式要求很严格,踩过坑的人都懂:

  • 优先用WAV/FLAC格式,采样率16kHz,单声道
  • 如果用MP3等其他格式,必须在配置里明确指定编码和采样率:
from google.cloud.speech_v1 import enums

config = speech_v1.RecognitionConfig(
    # 其他参数...
    encoding=enums.RecognitionConfig.AudioEncoding.MP3,
    sample_rate_hertz=44100
)

格式不匹配的话,API可能无法处理音频,直接导致超时无响应。

5. 排查网络与超时设置

  • 如果你的环境有防火墙或代理,确保能访问speech.googleapis.com的443端口
  • 可以手动设置更长的超时时间,避免因网络延迟导致的无响应:
response = operation.result(timeout=120)  # 延长到120秒,根据实际情况调整

内容的提问来源于stack exchange,提问作者Manoj Deshpande

火山引擎 最新活动