#node.js #azure-cognitive-services #face-api
#node.js #azure-cognitive-services #face-api
Вопрос:
Я попытался отправить изображение формы base64 в Azure Face-API с конфигурацией, подобной этой
var config = {
method: 'post',
url: endpoint,
params: {
returnFaceId: true,
returnFaceLandmarks: false,
returnFaceAttributes: 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
},
body:Buffer(facesBase64, 'base64'),
headers: {
'Ocp-Apim-Subscription-Key': subscriptionKey,
'Content-Type': 'application/octet-stream'
}
};
но он всегда выдает ошибку 400. Я отправил неверную двоичную форму? facesBase64
уже в форме Base64.
EDIT
facesBase64
заполнен base64, подобным этому значению
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ......
Комментарии:
1. Не могли бы вы предоставить образец изображения?
2. изображение в формате base64, просто случайное изображение лица из Интернета и измените его на формат base64.
Ответ №1:
Я думаю, что вы не можете отправить изображение base64 в Azure Face-API.
Обновить
Отправьте локальное изображение в faceapi.
'use strict';
const request = require('request');
const fs = require("fs");
// Replace <Subscription Key> with your valid subscription key.
const subscriptionKey = "eb8d5ea******8877c0" ;
const uriBase = 'https://pan***api.cognitiveservices.azure.com/face/v1.0/detect';
const imageBuffer = fs.readFileSync('jason.jpg');
// Request parameters.
const params = {
'returnFaceId': 'true',
'returnFaceLandmarks': 'false',
'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,'
'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
};
const options = {
uri: uriBase,
qs: params,
body: imageBuffer,
headers: {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key' : subscriptionKey
}
};
request.post(options, (error, response, body) => {
if (error) {
console.log('Error: ', error);
return;
}
let jsonResponse = JSON.stringify(JSON.parse(body), null, ' ');
console.log('JSON Responsen');
console.log(jsonResponse);
});
Я попробовал метод, который вы упомянули для тестирования, и получил следующие результаты.
{
"error": {
"code": "InvalidImage",
"message": "Decoding error, image format unsupported."
}
}
Ниже приведен мой тестовый код.
'use strict';
//const request = require('request');
const fs = require("fs");
const axios = require("axios");
const request = require('request').defaults({ encoding: null });
// Replace <Subscription Key> with your valid subscription key.
const subscriptionKey = "eb8d5ea0********8877c0" ;
const uriBase = "https://pans***api.cognitiveservices.azure.com" '/face/v1.0/detect'
const imgUrl="https://pan***torage.blob.core.windows.net/ja**b/ja**.jpg";
var imageBuffer;
request.get(imgUrl, function (error, response, body) {
if (!error amp;amp; response.statusCode == 200) {
var data;
data = "data:" response.headers["content-type"] ";base64," Buffer.from(body).toString('base64');
imageBuffer=data;
aa();
}
});
function aa(){
// Request parameters.
const params = {
'returnFaceId': 'true',
'returnFaceLandmarks': 'false',
'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,'
'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
};
const options = {
uri: uriBase,
qs: params,
body: imageBuffer,
headers: {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key' : subscriptionKey
}
};
request.post(options, (error, response, body) => {
if (error) {
console.log('Error: ', error);
return;
}
let jsonResponse = JSON.stringify(JSON.parse(body), null, ' ');
console.log('JSON Responsen');
console.log(jsonResponse);
});
}
Предлагаю.
Если вы действительно хотите реализовать свою функцию таким образом, рекомендуется обратиться в службу поддержки на портале. Обратитесь к официальному ответу, какие форматы изображений в настоящее время поддерживаются faceapi.
Вы также можете отправлять предложения в официальную группу продуктов.