0

我在 Google Cloud API 的 Python 库中的身份验证存在问题。起初它工作了几天没有问题,但突然 API 调用没有出现在 Google CloudPlatform 的 API 概述中。

我创建了一个服务帐户并将json文件存储在本地。然后我将环境变量设置GCLOUD_PROJECT为项目 ID 和GOOGLE_APPLICATION_CREDENTIALSjson 文件的路径。

from google.cloud import speech
client = speech.Client()
print(client._credentials.service_account_email)

打印正确的服务帐户电子邮件。

以下代码audio_file成功转录,但我的 Google Cloud 项目的仪表板未显示激活的语音 API 图表的任何内容。

import io
with io.open(audio_file, 'rb') as f:
    audio = client.sample(f.read(), source_uri=None, sample_rate=48000, encoding=speech.encoding.Encoding.FLAC)

alternatives = audio.sync_recognize(language_code='de-DE')

在某些时候,代码也出现了一些关于使用限制的错误。我猜由于身份验证不成功,以某种方式使用了免费/受限选项。

我还尝试了通过安装 Google Cloud SDK 和 进行身份验证的替代选项gcloud auth application-default login,但没有成功。

我不知道从哪里开始解决问题。任何帮助表示赞赏!

(我的系统正在运行带有 Anaconda 的 Windows 7)

编辑: 错误计数(Fehler)随着对 API 的调用而增加。如何获取有关错误的详细信息?!

gclouderror

4

2 回答 2

1

GOOGLE_APPLICATION_CREDENTIALS确保在设置环境变量时使用绝对路径。此外,您可能想尝试使用 OAuth2 tokeninfo 检查访问令牌并确保它"scope": "https://www.googleapis.com/auth/cloud-platform"在其响应中。

如果您在启用 GRPC 的情况下初始化客户端,有时您会得到不同的错误信息:

0.24.0: speech_client = speech.Client(_use_grpc=True)

0.23.0: speech_client = speech.Client(use_gax=True)

通常这是一个编码问题,您可以尝试使用示例音频还是尝试使用 Unix rec 工具之类的工具生成 LINEAR16 示例:

rec --channels=1 --bits=16 --rate=44100 audio.wav trim 0 5

...

with io.open(speech_file, 'rb') as audio_file:
    content = audio_file.read()
    audio_sample = speech_client.sample(
        content,
        source_uri=None,
        encoding='LINEAR16',
        sample_rate=44100)

其他注意事项:

  • 同步识别仅限于 60 秒的音频,您必须使用异步才能获得更长的音频
  • 如果您还没有,请为您的帐户设置帐单
于 2017-04-03T21:43:47.033 回答
0

关于使用问题,问题实际上是当你使用新的 google-cloud 库访问 ML API 时,似乎每个人都对每个人共享的项目进行身份验证(因此它说你已经用完了你的限制,即使你没有使用任何东西)。要检查并确认这一点,您可以使用 python 客户端库调用您尚未启用的 ML API,即使它不应该为您提供结果。这个问题仍然存在于其他语言客户端库和操作系统,所以我怀疑这是他们的 grpc 的问题。

因此,为了确保一致性,我总是使用使用我的 API 密钥的旧 googleapiclient。以下是使用翻译 API 的示例:

from googleapiclient import discovery

service = discovery.build('translate', 'v2', developerKey='')

service_request = service.translations().list(q='hello world', target='zh')
result = service_request.execute()

print(result)

对于语音 API,大致如下:

from googleapiclient import discovery

service = discovery.build('speech', 'v1beta1', developerKey='')

service_request = service.speech().syncrecognize()
result = service_request.execute()

print(result)

您可以在https://developers.google.com/api-client-library/python/apis/获取发现 API 列表,其中的演讲位于https://developers.google.com/resources/api-库/文档/语音/v1beta1/python/latest/

使用发现库的其他好处之一是,与当前库相比,您可以获得更多选择,尽管通常实施起来有点痛苦。

于 2017-04-06T14:22:39.317 回答