azure - 将图像从网络摄像头发布到 Azure Face Api

标签 azure azure-cognitive-services

我正在尝试将从网络摄像头获取的图像上传到 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 .

send-jpeg-as-octet-stream

并尝试读取为 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() 中使用 byteArr 作为负载 (data:) 现在人们使用的任何其他时髦 JS 框架中。

反向时髦的做法是:

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/

相关文章:

azure - 如何在 Jenkins Docker 容器中挂载 Azure 应用服务存储?

Azure OpenAI 嵌入与 OpenAI 嵌入

android - 解码错误,图像格式不受 Azure 支持

azure - Microsoft Azure 文本识别边界框响应中的 (X,Y) 坐标是什么单位?

azure - Microsoft 认知人脸 API 订阅 key 无效

azure - 使用 Azure 资源管理器模板将现有 Web 服务计划附加到新网站

c# - 无法确定 Azure 移动服务 DataObject 中类型的复合主键排序

azure - 在 Azure 云服务中使用 Multi-Tenancy 应用程序进行暂存

azure - 如何为多个 Http 请求(例如 POST、GET 等)创建单个逻辑应用程序

Python SDK Azure 计算机视觉 : 'bytes' object has no attribute 'read'