Не удается экспортировать модель tflite с методом POST ax ios, ошибка: запрос не выполнен с кодом состояния 401 - PullRequest
0 голосов
/ 16 апреля 2020

Моя цель состоит в том, чтобы использовать облачную функцию Firebase для экспорта модели tflite, обученной из google cloud automl.

Я проследовал за документом из https://cloud.google.com/vision/automl/object-detection/docs/export-edge и , чтобы иметь возможность свернуть экспорт модель плавно на терминале, но не с топором ios на облачной функции . С помощью следующего кода я получил 401 несанкционированную ошибку, даже если я установил GOOGLE_APPLICATION_CREDENTIALS в .env и требует пакет dotenv.

Мой вопрос: можно ли экспортировать модель с топором ios POST-запрос? Если то, что я сделал не так?

//index.js
require("dotenv").config();

//.env
GOOGLE_APPLICATION_CREDENTIALS="./config.json"
async function exportModel() {
  const header = {
    "Content-Type": "application/json;charset=utf-8",
    Authorization:
      "Bearer $(gcloud auth application-default print-access-token)",
  };

  // Construct request
  const request = {
    outputConfig: {
      modelFormat: "tflite",
      gcsDestination: {
        outputUriPrefix: `gs://${output-storage-bucket}/`,
      },
    },
  };

  axios
    .post(
      `https://automl.googleapis.com/v1/projects/${projectId}/locations/us-central1/models/${model_id}:export`,
      request,
      {
        headers: header,
      }
    )
    .then((response) => {
      console.log(response);
      return response;
    })
    .catch((error) => {
      console.log(error);
      return error;
    });
}

Ошибка

Error: Request failed with status code 401
    at createError (/srv/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/srv/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/srv/node_modules/axios/lib/adapters/http.js:236:11)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:139:11)
    at process._tickDomainCallback (internal/process/next_tick.js:219:9)

1 Ответ

0 голосов
/ 16 апреля 2020

Вы должны программно получить токен доступа. Я не понимаю, как вы пытаетесь получить токен с этой строкой кода:

 Authorization:
      "Bearer $(gcloud auth application-default print-access-token)" 

Вы пытаетесь запустить команды gcloud внутри облачной функции Firebase?

Здесь вы можете найти информацию о том, как аутентифицировать ваш запрос с помощью токенов доступа OAuth2

Библиотека аутентификации Google Nodejs

...