任何人都可以帮助吗?这真的让我发疯了...谢谢!
我尝试使用Google云平台API语音转文本。
工具:WINDOWS 10 && GCP && Python(Pycharm IDE)
我已经创建了一个服务帐户,作为我的语音测试项目的所有者,并通过JSON中的GCP控制台生成了密钥,然后设置了环境变量。 我在WIN10 Powershell && CMD上运行的代码:
$env:GOOGLE_APPLICATION_CREDENTIALS="D:\GCloud speech-to-text\Speech
To Text Series-93e03f36bc9d.json"
set GOOGLE_APPLICATION_CREDENTIALS=D:\GCloud speech-to-text\Speech To
Text Series-93e03f36bc9d.json
PS:重新启动笔记本电脑后,添加的环境变量在CMD和Powershell中消失,但如果再次添加,则确实显示在环境列表中。
我已在GCP控制台中启用了Google存储API和Google语音文本API。
我尝试通过python显式显示凭据方法,同样的问题。
我已经安装了Google Cloud SDK Shell,并使用命令进行了初始化以登录我的帐户。
PYTHON语音文本代码(来自GCP演示)
import io
import os
# Imports the Google Cloud client library
from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types
# Instantiates a client
client = speech.SpeechClient()
# The name of the audio file to transcribe
file_name = os.path.join(
os.path.dirname(__file__),
'test_cre.m4a')
# Loads the audio into memory
with io.open(file_name, 'rb') as audio_file:
content = audio_file.read()
audio = types.RecognitionAudio(content=content)
config = types.RecognitionConfig(
encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=16000,
language_code='en-US')
# Detects speech in the audio file
response = client.recognize(config, audio)
for result in response.results:
print('Transcript: {}'.format(result.alternatives[0].transcript))
----运行上面的代码时,预计会收到“ 200OK”和转录的文本(GCP文档中的文本api语音演示)
----但是得到了:
D:\ Python \ main program \ lib \ site-packages \ google \ auth_default.py:66:用户警告:您的应用程序已使用来自Google Cloud SDK的最终用户凭据进行了身份验证。我们建议大多数服务器应用程序改为使用服务帐户。如果您的应用程序继续使用Cloud SDK中的最终用户凭据,则可能会收到“超出配额”或“未启用API”错误。有关服务帐户的更多信息,请参见https://cloud.google.com/docs/authentication/ warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)
google.api_core.exceptions.ResourceExhausted:超过429配额指标“ speech.googleapis.com/default_requests”的配额,并限制服务“ speech.googleapis.com”的“ DefaultRequestsPerMinutePerProject”为消费者“ project_number:764086051850”
另一个奇怪的问题 :错误信息显示'project_number:764086051850',与我在GCP上的语音转文本project_number不同(我确实区分了项目编号和项目ID),错误信息中显示的project_number每次代码运行时也会有所不同。看来我发送的是错误的项目的云需求?
我下次重新启动笔记本电脑后,我的GOOGLE_APPLICATION_CREDENTIALS系统环境变量消失了。再次添加后,它将显示在env列表中,但在重新启动后无法存储。
如果有人可以帮助您,请多谢!
答案 0 :(得分:0)
尝试这样做:
gcloud init
->使用您的帐户进行身份验证并选择您的项目gcloud auth activate-service-account <service account email> --key-file=<JSON key file>
gcloud config list
以验证您的配置。运行脚本,看看效果是否更好。
否则,请尝试在微型虚拟机上执行相同的操作,以验证您的代码,服务帐户和环境(并验证仅Windows有问题)
对于Windows问题,我在ChromeBook上,无法对此进行测试和提供帮助。但是,我在互联网上检查了有关EnvVar的信息,这将更新注册表。检查您是否没有保护注册表更新的内容(防病毒,...)
答案 1 :(得分:0)
D:\ Python \ main program \ lib \ site-packages \ google \ auth_default.py:66: 用户警告:您的应用程序已使用最终用户进行身份验证 来自Google Cloud SDK的凭据。我们建议大多数服务器 应用程序改为使用服务帐户。如果您的申请 继续使用Cloud SDK中的最终用户凭据,您可能 收到“超出配额”或“未启用API”错误。欲了解更多 有关服务帐户的信息,请参阅 https://cloud.google.com/docs/authentication/ warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)
此错误表示您的代码未使用服务帐户。您的代码已配置为使用ADC(应用程序默认凭据)。您的代码很可能使用的是由CLI gcloud
配置和存储的Google Cloud SDK凭据。
要确定Cloud SDK使用的凭据,请执行以下命令:
gcloud auth list
显示为ACCOUNT且带有星号的IAM成员ID是CLI和未指定凭据的任何应用程序使用的帐户。
要了解有关ADC的更多信息,请阅读我写的这篇文章:
Google Cloud Application Default Credentials
google.api_core.exceptions.ResourceExhausted:超出429个配额 配额指标“ speech.googleapis.com/default_requests”和限制 服务的“ DefaultRequestsPerMinutePerProject” 消费者“ project_number:764086051850”的“ speech.googleapis.com”。
Cloud SDK具有默认值的概念。执行gcloud config list
。这将显示各种项目。寻找project
。此项目很可能没有启用API Cloud Speech-to-Text
。
另一个奇怪的东西:错误信息显示 'project_number:764086051850',与我的不同 GCP上的语音转文本project_number(我确实区分了项目编号 和项目ID),错误信息中还会显示project_number 每次代码运行都会有所不同。好像我在发送云 错误项目的要求?
要查看您的当前凭据可以查看(访问)执行的项目,项目ID和项目编号的列表:
gcloud projects list
。
此命令将显示给定项目ID的项目编号:
gcloud projects list --filter="REPLACE_WITH_PROJECT_ID" --format="value(PROJECT_NUMBER)"
我的GOOGLE_APPLICATION_CREDENTIALS系统环境变量 下次重新启动笔记本电脑后消失。再次添加后, 将显示在env列表中,但在重新启动后无法存储。
在命令提示符中执行此命令时,它仅在命令提示符的生命周期内持续存在:set GOOGLE_APPLICATION_CREDENTIALS=D:\GCloud speech-to-text\Speech To
Text Series-93e03f36bc9d.json
。当您退出命令提示符,重新启动等时,环境变量将被破坏。
要在Windows上创建持久性环境变量,请编辑系统属性->环境变量。您可以从命令提示符处按以下方式启动此命令:
SystemPropertiesAdvanced.exe
建议让您的生活更轻松:
C:\Config
之类的目录,然后将该文件放在文件名中,不要在其中放置空格。更改此行:
client = speech.SpeechClient()
对此:
client = speech.SpeechClient().from_service_account_json('c:/config/service-account.json')