Как установить GOOGLE_APPLICATION_CREDENTIALS из Google Cloud Vision в C#?
Я следую этому руководству, чтобы использовать 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?
2 ответа
Эти сообщения об ошибках обычно выдаются, когда приложение не проходит аутентификацию должным образом, и могут возникать по нескольким причинам, таким как отсутствующие файлы, неверные пути к учетным данным, неправильные назначения переменных среды и другие причины. Помните, что когда вы устанавливаете значение переменной среды в сеансе, оно сбрасывается каждый раз, когда сеанс сбрасывается.
Исходя из этого, я рекомендую вам проверить, что вы создали файл аутентификации JSON в вашем проекте GCP, следуя официальной документации, и что путь к файлу назначается правильно. Вы можете взглянуть на приведенный ниже код, который содержит пример процесса, необходимого для аутентификации вашего запроса Vision API в C# на основе инструкций " Настройка аутентификации":
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.
Наконец, появляется сообщение об ошибке "Имя StorageClient не существует в текущем контексте)", поскольку вы не добавляете библиотеки и не импортируете файлы, необходимые для использования служб облачного хранилища и языков. Обратите внимание, что эти объекты были добавлены в качестве примера процесса аутентификации; однако, если вы хотите использовать эти функции, я рекомендую вам взглянуть на следующее Quickstarts Storage, Natural Language.
Я пробовал все вышеперечисленное, все еще безуспешно. Что сработало для меня, так это добавление переменной среды через SetEnvironmentVariable в классе Environment.
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);