Google 云 Python API 库的身份验证停止工作
Authentication to Google Cloud Python API Library stopped working
我在 Google 云 API 的 Python 库中遇到身份验证问题。
起初它工作了几天没有问题,但突然 API 调用没有出现在 Google CloudPlatform 的 API 概述中。
我创建了一个服务帐户并在本地存储了 json
文件。然后我将环境变量 GCLOUD_PROJECT
设置为项目 ID,将 GOOGLE_APPLICATION_CREDENTIALS
设置为 json 文件的路径。
from google.cloud import speech
client = speech.Client()
print(client._credentials.service_account_email)
打印正确的服务帐户电子邮件。
以下代码 t运行 成功地编写了 audio_file
,但是我的 Google 云项目的仪表板没有显示激活的语音 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')
在某些时候,代码还 运行 存在一些关于使用限制的错误。我猜是由于身份验证不成功,以某种方式使用了 free/limited 选项。
我还通过安装 Google Cloud SDK 和 gcloud auth application-default login
尝试了身份验证的替代选项,但没有成功。
我不知道从哪里开始解决问题。
感谢您的帮助!
(我的系统是 运行 Windows 7 with Anaconda)
编辑:
错误计数 (Fehler
) 随着对 API 的调用而增加。如何获得有关错误的详细信息?!
确保在设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量时使用绝对路径。此外,您可能想要 try inspecting the access token using OAuth2 tokeninfo 并确保其响应中包含 "scope": "https://www.googleapis.com/auth/cloud-platform"
。
有时候你会得到不同的错误信息如果你initialize the client with GRPC enabled:
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 秒的音频,必须使用异步才能识别更长的音频
- 如果您还没有,请为您的帐户设置结算
关于使用问题,问题实际上是当你使用新的google-cloud库访问ML APIs时,似乎每个人都对共享的项目进行身份验证每个人(因此它说你已经用完了你的限制,即使你没有使用任何东西)。要检查并确认这一点,您可以使用 python 客户端库调用您尚未启用的 ML API,这将给您一个结果,即使它不应该。这个问题仍然存在于其他语言的客户端库和 OS,所以我怀疑这是他们的 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/ with the speech one located in https://developers.google.com/resources/api-libraries/documentation/speech/v1beta1/python/latest/.
处获取发现列表 APIs
使用发现库的另一个好处是,与当前库相比,您可以获得更多的选择,尽管通常实施起来会比较麻烦。
我在 Google 云 API 的 Python 库中遇到身份验证问题。 起初它工作了几天没有问题,但突然 API 调用没有出现在 Google CloudPlatform 的 API 概述中。
我创建了一个服务帐户并在本地存储了 json
文件。然后我将环境变量 GCLOUD_PROJECT
设置为项目 ID,将 GOOGLE_APPLICATION_CREDENTIALS
设置为 json 文件的路径。
from google.cloud import speech
client = speech.Client()
print(client._credentials.service_account_email)
打印正确的服务帐户电子邮件。
以下代码 t运行 成功地编写了 audio_file
,但是我的 Google 云项目的仪表板没有显示激活的语音 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')
在某些时候,代码还 运行 存在一些关于使用限制的错误。我猜是由于身份验证不成功,以某种方式使用了 free/limited 选项。
我还通过安装 Google Cloud SDK 和 gcloud auth application-default login
尝试了身份验证的替代选项,但没有成功。
我不知道从哪里开始解决问题。 感谢您的帮助!
(我的系统是 运行 Windows 7 with Anaconda)
编辑:
错误计数 (Fehler
) 随着对 API 的调用而增加。如何获得有关错误的详细信息?!
确保在设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量时使用绝对路径。此外,您可能想要 try inspecting the access token using OAuth2 tokeninfo 并确保其响应中包含 "scope": "https://www.googleapis.com/auth/cloud-platform"
。
有时候你会得到不同的错误信息如果你initialize the client with GRPC enabled:
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 秒的音频,必须使用异步才能识别更长的音频
- 如果您还没有,请为您的帐户设置结算
关于使用问题,问题实际上是当你使用新的google-cloud库访问ML APIs时,似乎每个人都对共享的项目进行身份验证每个人(因此它说你已经用完了你的限制,即使你没有使用任何东西)。要检查并确认这一点,您可以使用 python 客户端库调用您尚未启用的 ML API,这将给您一个结果,即使它不应该。这个问题仍然存在于其他语言的客户端库和 OS,所以我怀疑这是他们的 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/ with the speech one located in https://developers.google.com/resources/api-libraries/documentation/speech/v1beta1/python/latest/.
处获取发现列表 APIs使用发现库的另一个好处是,与当前库相比,您可以获得更多的选择,尽管通常实施起来会比较麻烦。