URL-адрес данных base64 в Cloud Vision (ошибка: изображение отсутствует) - PullRequest
0 голосов
/ 28 апреля 2019

Я отправляю код base64, полученный из canvas через xhr-запрос, в Firebase Functions и пытаюсь использовать его в Cloud Vision, но получаю эту ошибку:

Error: No image present.
    at _coerceRequest (/user_code/node_modules/@google-cloud/vision/src/helpers.js:69:21)
    at ImageAnnotatorClient.<anonymous> (/user_code/node_modules/@google-cloud/vision/src/helpers.js:224:12)
    at ImageAnnotatorClient.wrapper [as annotateImage] (/user_code/node_modules/@google-cloud/vision/node_modules/@google-cloud/promisify/build/src/index.js:44:35)
    at ImageAnnotatorClient.<anonymous> (/user_code/node_modules/@google-cloud/vision/src/helpers.js:141:17)
    at PromiseCtor (/user_code/node_modules/@google-cloud/vision/node_modules/@google-cloud/promisify/build/src/index.js:71:28)
    at ImageAnnotatorClient.wrapper [as labelDetection] (/user_code/node_modules/@google-cloud/vision/node_modules/@google-cloud/promisify/build/src/index.js:56:16)
    at exports.hello.functions.https.onRequest (/user_code/index.js:23:8)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /var/tmp/worker/worker.js:783:7
    at /var/tmp/worker/worker.js:766:11

Вот как я конвертирую изображение холста в base64 и отправляю его:

const base64Img = canvas.toDataURL();
const data = base64Img.replace(/^data:image\/(png|jpg);base64,/, "");
const blob = new Blob([data], {type: 'text/plain'});

let xhr = new XMLHttpRequest();
xhr.open("POST", "hello", true);
xhr.send(blob);

И вот как я пытаюсь отправить его в Cloud Vision в облаке. Функции:

const functions = require('firebase-functions');
const vision = require('@google-cloud/vision');

exports.hello = functions.https.onRequest((req, res) => {
    let imageBuffer = Buffer.from(req.body).toString('base64');
    const request = {
      "requests":[
        {
          "image":{
            "content": imageBuffer
          },
          "features":[
            {
              "type":"LABEL_DETECTION",
            }
          ]
        }
      ]
    }
    const client = new vision.ImageAnnotatorClient();
    client
        .labelDetection(request)
        .then(results => {
            res.send(results);
        })
        .catch(err => {
        console.error('ERROR:', err);
            res.send(err);
        });
});
...