Загрузка изображения в виде двоичных данных в когнитивные службы с помощью 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));
})
})
});