我正在尝试将Microsoft Cognitive服务面部API传递给用户上传的图像。该图像在uploads文件夹中的服务器上可用。
微软希望这张图片是&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} );
})
答案 0 :(得分:1)
您正在使用的软件包cognitive-services似乎不支持文件上传。您可以选择在GitHub page上提出问题。
如果这是一个选项,确实存在替代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));
})
})
});
答案 1 :(得分:1)
请更新到版本0.2.0,现在应该可以使用。