我正在尝试将从网络摄像头获取的图像上传到 Microsoft Azure Face Api。我从 canvas.toDataUrl(‘image/png’) 获取图像,其中包含数据 Uri。我将内容类型更改为 application/octet-stream,当我将数据 Uri 附加到发布请求时,我收到错误请求 (400) 无效面部图像。如果我将附加数据更改为 Blob,我将停止接收错误,但只会返回一个空数组而不是 JSON 对象。我非常感谢您为我指明正确方向的任何帮助。
谢谢!
最佳答案
哦,你真幸运,我两天前刚刚(成功!)尝试过这一点。
将base64编码的JPEG发送到Face API效率非常低,编码输出字节与输入字节的比率为4:3(33%开销)。只需发送一个字节数组,它就可以工作,文档 mention it briefly .
并尝试读取为 JPEG 而不是 PNG,这只是浪费网络摄像头镜头的带宽。
...
var dataUri = canvas.toDataURL('image/' + format);
var data = dataUri.split(',')[1];
var mimeType = dataUri.split(';')[0].slice(5)
var bytes = window.atob(data);
var buf = new ArrayBuffer(bytes.length);
var byteArr = new Uint8Array(buf);
for (var i = 0; i < bytes.length; i++) {
byteArr[i] = bytes.charCodeAt(i);
}
return byteArr;
现在,在 jQuery 的 $.ajax()
或 iDontUnderStandHowWeGotHereAsAPeople() 中使用
现在人们使用的任何其他时髦 JS 框架中。byteArr
作为负载 (data:
)
反向时髦的做法是:
var payload = byteArr;
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://SERVICE_URL');
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.send(payload);
关于azure - 将图像从网络摄像头发布到 Azure Face Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718939/