Загрузка изображения в виде двоичных данных в когнитивные службы с помощью Node

Я пытаюсь передать лицевому API Microsoft Cognitive Services изображение, загруженное пользователем. Изображение доступно на сервере в папке загрузки.

Microsoft ожидает, что образ будет "application/octet-stream" и передан в виде двоичных данных.

В настоящее время я не могу найти способ передать изображение в API, который является приемлемым для его принятия, и продолжает получать "ошибка декодирования, формат изображения не поддерживается". Насколько я знаю, изображение должно быть загружено в формате BLOB или файла, но, будучи новичком в NodeJ, я действительно не уверен, как этого добиться.

Пока что у меня это есть, и я посмотрел несколько вариантов, но ни один из них не сработал, другие варианты, которые я пробовал, возвращали одинаковые ошибки, такие как "файл слишком маленький или большой", но когда я вручную проверял одно и то же изображение через Postman, он работал нормально.

image.mv('./uploads/' + req.files.image.name , function(err) {
if (err)
  return res.status(500).send(err);
});

var encodedImage = new Buffer(req.files.image.data, 'binary').toString('hex');

let addAPersonFace = cognitive.addAPersonFace(personGroupId, personId, encodedImage);

addAPersonFace.then(function(data) {
  res.render('pages/persons/face', { data: data, personGroupId : req.params.persongroupid, personId : req.params.personid} );
})

2 ответа

Пожалуйста, обновите до версии 0.2.0, теперь это должно работать.

Похоже, что пакет, который вы используете, cognitive-services, не поддерживает загрузку файлов. Вы можете решить поднять проблему на странице GitHub.

Тем не менее, альтернативные пакеты NPM существуют, если это вариант. С project-oxford вы бы сделали что-то вроде следующего:

var oxford = require('project-oxford'),
    client = new oxford.Client(YOUR_FACE_API_KEY),
    uuid = require('uuid');

var personGroupId = uuid.v4();
var personGroupName = 'my-person-group-name';
var personName = 'my-person-name';
var facePath = './images/face.jpg';

// Skip the person-group creation if you already have one
console.log(JSON.stringify({personGroupId: personGroupId}));
client.face.personGroup.create(personGroupId, personGroupName, '')
  .then(function(createPersonGroupResponse) {
    // Skip the person creation if you already have one
    client.face.person.create(personGroupId, personName)
      .then(function(createPersonResponse) {
        console.log(JSON.stringify(createPersonResponse))
        personId = createPersonResponse.personId;
        // Associate an image to the person
        client.face.person.addFace(personGroupId, personId, {path: facePath})
          .then(function (addFaceResponse) {
            console.log(JSON.stringify(addFaceResponse));
          })
      })
  });
Другие вопросы по тегам