上传图像作为二进制数据认知服务与节点

我正在尝试将Microsoft Cognitive服务面部API传递给用户上传的图像。 该图像在上传文件夹中的服务器上可用。

微软希望这个图像是“application / octet-stream”,并作为二进制数据传递。

目前我无法find一种方法将图像传递给API,使其被接受,并继续接收“解码错误,图像格式不受支持”。 据了解,图像必须以blob或文件格式上传,但是对于NodeJs而言,我还不确定如何实现这一点。

到目前为止,我有这个,看了几个选项,但都没有工作,其他选项我试着返回simmilar错误,如“文件太小或大”,但是当手动testing通过邮差相同的图像,它工作正常。

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} ); }) 

它看起来像你正在使用的包, 认知服务 ,似乎不支持file upload。 您可以select在GitHub 页面上提出问题。

如果这是一种select,替代性的NPM包确实存在。 通过项目 – 牛津 ,你会做如下的事情:

 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)); }) }) }); 

请更新到0.2.0版本,这应该现在工作。