我正在跟踪GCP的演讲到文本的快速启动。据我所知,我已经遵循了所有的设置标准。
GOOGLE_APPLICATION_CREDENTIALS设置为下载的JSON文件。gcloud auth activate-service-account <my service email generated by GCP> --key-file= "mypath/JSON key file"。gcloud auth list并看到了我的项目帐户标识符。我执行了示例curl命令:
curl -s -H "Content-Type: application/json" -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) https://speech.googleapis.com/v1/speech:recognize -d @sync-request.json得到这个错误:
{
"error": {
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}在快速启动步骤中没有提到OAuth
作为一个测试,我执行了:
gcloud auth application-default print-access-token得到了这个:
(gcloud.auth.application-default.print-access-token) File "mypath/JSON key file" was not found. 即使文件存在于我指定的文件夹中。
尝试其他方法时,我尝试在SDK中执行Java示例。它创建了一个非常简单的没有凭据的SpeechClient,这似乎令人怀疑。我将GOOGLE_APPLICATION_CREDENTIALS env变量提供给示例。我认为这个例子使用了gRCP,但不确定。
该示例挂在以下位置:
RecognizeResponse response = speech.recognize(config, audio);在网上查看时,我发现可能的嫌疑是糟糕的身份验证,这与尝试CMD行示例相同。
任何及所有的指导都将不胜感激。
发布于 2021-08-04 15:38:22
您是否从JSON密钥文件所在的同一个目录运行curl命令?
谷歌的文档声明如下:
注意,要将文件名传递给curl,可以使用-d选项(用于"data"),并在文件名前面加上一个@符号。该文件应该位于执行curl命令的同一个目录中。
发布于 2021-08-04 16:00:29
我有关于CLI问题的答案。对我来说是个愚蠢的错误。当我设置GOOGLE_APPLICATION_CREDENTIALS时,我用双引号包装路径名。叹一口气。我在没有双引号的情况下重置env变量。我可以成功地运行gcloud auth应用程序-默认的打印访问令牌-它打印出令牌。我又用$(gcloud auth.)尝试了curl命令。也犯了同样的错误。接下来,我尝试使用curl命令替换$(gcloud auth.)上面的记号还了,它就起作用了!
接下来,我需要解析Java示例,而且我很好。
发布于 2021-08-04 17:35:24
不需要怀疑:
如果在构造客户端时不指定凭据,则客户端库将通过环境变量GOOGLE_APPLICATION_CREDENTIALS查找凭据。
在您的java代码中,尝试打印System.getenv("GOOGLE_APPLICATION_CREDENTIALS"),以验证其设置。可能不是,这取决于您在IDE或终端中设置它的方式。
https://stackoverflow.com/questions/68653830
复制相似问题