Squeak.ru - шаблоны программирования

Cloud Vision: проблемы с учетными данными

Я пытаюсь настроить Cloud Vision на своем локальном компьютере в проекте Firebase, но у меня возникают проблемы с учетными данными по умолчанию.

Сначала я столкнулся с Could not load the default credentials. Этот сообщение предложил мне сделать gcloud auth application-default login. При попытке это я столкнулся с этим:

Error: 7 PERMISSION_DENIED: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the vision.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.

Я также пытался exports GOOGLE_APPLICATION_CREDENTIALS = "pathToServiceAccount", но в моем случае это не сработало.

Обратите внимание, что у меня нет проблем с чтением/записью данных в Firestore и Firebase Storage. В тот момент, когда мой код попадает в часть Cloud Vision, он выдает ошибку. Я активировал API на облачной консоли и включил биллинг. Правила безопасности в firestore и хранилище в данный момент находятся в тестовом режиме.

const vision = require('@google-cloud/vision');
var admin = require('firebase-admin');
let serviceAccount = require('../path-to-service-account.json');

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    storageBucket: "mybucket.appspot.com"
});

let db = admin.firestore()
let bucket = admin.storage().bucket();

//Some networking code, return a promise
.then(response => {
    //setup storagePath
    return pipeToStorage(item, response, storagePath) //Save to firebase storage ok
})
.then((item) => {
    return performTextDetection(item.id) //Throws error here
})

function pipeToStorage(item, response, storagePath) {
    return new Promise((resolve, reject) => {
        gcFile = bucket.file(storagePath)

        response.data
        .pipe(gcFile.createWriteStream({
            metadata   : {
                contentType: "application/pdf"
            }
        }))
        .on('error', (error) => { 
            reject(error)
        })
        .on('finish', () => { 
            resolve(item)
        })
    }) 
}


function performTextDetection(id) {
    const client = new vision.ImageAnnotatorClient();
    const bucketName = bucket.name;
    const fileName = `items/${id}.pdf`
    const outputPrefix = 'ocr_results'
    const gcsSourceUri = `gs://${bucketName}/${fileName}`;
    const gcsDestinationUri = `gs://${bucketName}/${outputPrefix}/${id}/`;

    const inputConfig = {
        mimeType: 'application/pdf',
        gcsSource: {
            uri: gcsSourceUri,
        },
    };
    const outputConfig = {
        gcsDestination: {
            uri: gcsDestinationUri,
        },
    };
    const features = [{type: 'DOCUMENT_TEXT_DETECTION'}];
    const request = {
        requests: [
            {
            inputConfig: inputConfig,
            features: features,
            outputConfig: outputConfig,
            },
        ],
    };

    return client.asyncBatchAnnotateFiles(request)
    .then(([operation]) => {
        return operation.promise()
    })
    .then(([filesResponse]) => {
        const resultsUri = filesResponse.responses[0].outputConfig.gcsDestination.uri
        return resultsUri
    })
}

  • gcloud auth активировать-сервис-аккаунт --key-file KEY_FILE 05.05.2020
  • @JohnHanley Только что попробовал, выдает ту же ошибку, что и PERMISSION_DENIED: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell... 05.05.2020
  • Это означает, что вы неправильно настроили переменную окружения GOOGLE_APPLICATION_CREDENTIALS. Клиентский код получает учетные данные из неправильного места. Для клиента Firebase вы используете учетную запись службы. Для Vision Client вы возвращаетесь к ADC (учетные данные приложения по умолчанию), который ищет учетные данные. Это даст вам подсказку, где искать (убедитесь, что вы понимаете ADC). Примечание. Учетную запись службы необходимо указать при создании клиента Vision. Ознакомьтесь с документацией по API. 05.05.2020
  • Чтобы указать сервисный аккаунт, просмотрите исходный код клиента: github.com/googleapis/nodejs-vision/blob/master/src/v1/ 05.05.2020

Ответы:


1

Это происходит потому, что у вас есть exports, а не export:

exports GOOGLE_APPLICATION_CREDENTIALS = "pathToServiceAccount"

пожалуйста, попробуй:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/credentials.json"

обратите внимание, что здесь нет пробелов, подробности см. здесь. Кстати, я также обнаружил ту же ошибку PERMISSION_DENIED, когда export опущено.

Шаг проверки — выполнение запроса REST с помощью curl:

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://vision.googleapis.com/v1/images:annotate

См. полный пример здесь.

08.05.2020
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...