Как установить 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);
Другие вопросы по тегам