我正在跟踪this tutorial以使用Google Vision API,但是即使配置身份验证凭据,我也会遇到以下错误:
System.InvalidOperationException:'应用程序默认凭据不可用。如果它们在Google Compute Engine中运行,则可用。否则,必须定义环境变量GOOGLE_APPLICATION_CREDENTIALS,指向指向定义凭据的文件。有关更多信息,请参见https://developers.google.com/accounts/docs/application-default-credentials。
我在Visual Studio 2017中的代码:
// Instantiates a client
var client = ImageAnnotatorClient.Create();
// Load the image file into memory
var image = Google.Cloud.Vision.V1.Image.FromFile(@"C:\Users\Maicon\OneDrive\Área de Trabalho\keyboardSantander\keyboard.png");
// Performs label detection on the image file
var response = client.DetectLabels(image);
foreach (var annotation in response)
{
if (annotation.Description != null)
debugOutput(annotation.Description);
}
该如何解决?我必须创建一个试用帐户才能使用Google Cloud API吗?
答案 0 :(得分:1)
这些错误消息通常在未正确认证时引发,并且可能由于多种原因而发生,例如文件丢失,无效的凭证路径,错误的环境变量分配等。请记住,在会话中设置环境变量值时,每次删除会话时都会重置该值。
基于此,我建议您遵循official documentation来验证是否已在GCP项目中创建了 auth凭据JSON文件,并且文件路径已正确分配。您可以查看下面列出的代码,其中包含根据Setting Up Authentication指令以C#身份验证Vision API请求所需的过程示例:
using Google.Cloud.Vision.V1;
using System;
using Grpc.Auth;
using Google.Apis.Auth.OAuth2;
namespace VisionDemo
{
class Program
{
static void Main(string[] args)
{
//Authenticate to the service by using Service Account
var credential = GoogleCredential.FromFile(@"<CRED_JSON_FILEPATH>").CreateScoped(ImageAnnotatorClient.DefaultScopes);
var channel = new Grpc.Core.Channel(ImageAnnotatorClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials());
// Instantiates a client
var client = ImageAnnotatorClient.Create(channel);
var image = Image.FromFile(@"<IMAGE_FILE_PATH>");
// Performs label detection on the image file
var response = client.DetectLabels(image);
foreach (var annotation in response)
{
if (annotation.Description != null)
Console.WriteLine(annotation.Description);
}
}
}
}
另一方面,重要的是要考虑到API的使用需要拥有有效的GCP帐户。
最后,由于您未添加使用 Cloud Storage 和所需的库和导入,将引发错误消息“名称“ StorageClient”在当前上下文中不存在”。 >语言服务。请注意,这些对象是作为身份验证过程的示例而添加的;但是,如果要使用这些功能,建议您阅读以下快速入门Storage,Natural Language。
答案 1 :(得分:0)
我尝试了上述所有方法,但仍然没有运气。对我有用的是通过 Environment 类中的 SetEnvironmentVariable 添加环境变量。
string credential_path = @"PATH TO GOOGLE AUTH CREDENTIAL JSON FILE";
System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", credential_path);
var client = ImageAnnotatorClient.Create();
var image = Image.FromFile(@"PATH TO IMAGE");
var response = client.DetectDocumentText(image);