Я отправляю код 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);
});
});