使用Google Cloud Speech-to-Text API转写长音频遇GCS文件检测错误
解决Google Cloud Speech-to-Text无法访问GCS音频文件的问题
我来帮你排查这个问题——我之前也碰到过类似的GCS文件访问报错,咱们一步步拆解可能的原因和解决方案:
1. 先确认GCS URI格式是否正确
这是最常见的问题!Speech-to-Text要求GCS URI必须以gs://开头,格式为gs://[你的桶名]/[文件路径/文件名],比如gs://my-audio-storage/long-interview.flac。如果你的URI少了gs://前缀,代码会默认把它当成本地文件路径去找,自然就会报No such file or directory错误。
2. 检查服务账号的权限配置
Speech-to-Text的服务账号需要有访问GCS文件的权限:
- 给你使用的服务账号添加
Storage Object Viewer角色(或者更细粒度的storage.objects.get权限),确保它能读取GCS桶里的文件。 - 同时确认本地环境已经正确设置了
GOOGLE_APPLICATION_CREDENTIALS环境变量,指向你的服务账号密钥JSON文件。如果没设置,API会默认用本地的默认凭证,可能没有访问GCS的权限。
3. 验证文件确实存在于指定路径
GCS的路径是区分大小写的,一定要确保代码里的URI和GCS控制台里的文件路径完全一致:
- 直接登录GCS控制台,导航到对应的桶,检查文件名、子路径的拼写和大小写是否匹配。
- 也可以在终端用命令
gsutil ls [你的GCS URI]测试,如果这个命令返回文件不存在,那就是路径问题无疑了。
4. 修正代码里的小问题
看你的代码第一行time(gcs_uri),这里应该是写错了吧?如果要使用time模块,得先import time,比如用来记录耗时的话应该是start_time = time.time()之类的写法。这个虽然不是导致当前报错的直接原因,但可能会引发其他问题,建议修正。
修正后的示例代码
def transcribe_gcs(gcs_uri): """Asynchronously transcribes the audio file specified by the gcs_uri.""" import time from google.cloud import speech from google.cloud.speech import enums from google.cloud.speech import types # 先校验GCS URI格式 if not gcs_uri.startswith("gs://"): raise ValueError("GCS URI必须以gs://开头,例如:gs://bucket-name/audio-file.flac") client = speech.SpeechClient() audio = types.RecognitionAudio(uri=gcs_uri) config = types.RecognitionConfig( encoding=enums.RecognitionConfig.AudioEncoding.FLAC, sample_rate_hertz=16000, language_code='en-US') operation = client.long_running_recognize(config, audio) print('Waiting for operation to complete...') response = operation.result(timeout=90) # 遍历输出转写结果 for result in response.results: print(u'Transcript: {}'.format(result.alternatives[0].transcript)) print('Confidence: {}'.format(result.alternatives[0].confidence))
内容的提问来源于stack exchange,提问作者Shruti
相关产品推荐
相关产品推荐

