Azure Face API — узел JS не может отправить локальный файл в виде двоичного файла

#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.

Вы также можете отправлять предложения в официальную группу продуктов.