问题描述
我正在使用Azure的认知服务Face API来分析图像。我已经通过使用指向图像的url链接来使其更早地工作了,但是我正在尝试使其与本地图像一起工作。我发现有一个question的问题,正是我在request.post
中寻找的东西,但是我试图使其与axios一起使用。
我的代码:
"use strict";
const axios = require("axios").default;
const fs = require("fs");
let file = "localFile.jpg";
const imageBuffer = fs.readFileSync(file,{ encoding: "base64" });
// Add a valid subscription key and endpoint to your environment variables.
var subscriptionKey = "<Subscription key>";
var urlApi=
"https://.../face/v1.0/detect";
// Send a POST request
axios({
method: "post",url: urlApi,params: {
returnFaceId: true,returnFaceLandmarks: false,returnFaceAttributes:
"age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise",},headers: {
"Content-Type": "application/octet-stream","Ocp-Apim-Subscription-Key": subscriptionKey,"Content-Length": imageBuffer.length,data: imageBuffer,})
.then((response) => {
console.log("Status text: " + response.status);
console.log("Status text: " + response.statusText);
console.log();
//console.log(response.data)
response.data.forEach((face) => {
console.log("Face ID: " + face.faceId);
console.log("Smile: " + face.faceAttributes.smile);
console.log(
"Head pose: " + JSON.stringify(face.faceAttributes.headPose)
);
console.log("Gender: " + face.faceAttributes.gender);
console.log("Age: " + face.faceAttributes.age);
console.log(
"Facial hair: " + JSON.stringify(face.faceAttributes.facialHair)
);
console.log("Glasses: " + face.faceAttributes.glasses);
console.log("Smile: " + face.faceAttributes.smile);
console.log(
"Emotion: " + JSON.stringify(face.faceAttributes.emotion)
);
console.log("Blur: " + JSON.stringify(face.faceAttributes.blur));
console.log(
"Exposure: " + JSON.stringify(face.faceAttributes.exposure)
);
console.log("Noise: " + JSON.stringify(face.faceAttributes.noise));
console.log(
"Makeup: " + JSON.stringify(face.faceAttributes.makeup)
);
console.log(
"Accessories: " +
JSON.stringify(face.faceAttributes.accessories)
);
console.log("Hair: " + JSON.stringify(face.faceAttributes.hair));
console.log();
});
})
.catch(function (error) {
console.log(error);
});
我期望以json格式获得类似的输出,但是相反,我得到了status: 400,statusText: 'Bad Request'
,但不确定为什么。任何帮助,将不胜感激。
我也尝试过
const imageBuffer = fs.readFileSync(file);
和
const options = [
"returnFaceId=true","returnFaceLandmarks=true","returnFaceAttributes=age,accessories",];
urlApi = urlApi.concat("?",options.join("&"));
axios.post(urlApi,{ body: imageBuffer},{ headers: {
"Content-Type": "application/octet-stream",)
详细的错误响应:(应吉姆·徐的要求)
response: {
status: 400,statusText: 'Bad Request',headers: {
'transfer-encoding': 'chunked','content-type': 'application/json; charset=utf-8','x-envoy-upstream-service-time': '8','apim-request-id': 'cb7f0380-a785-49f5-94fe-ff5ed0e36742','strict-transport-security': 'max-age=31536000; includeSubDomains; preload','x-content-type-options': 'nosniff','csp-billing-usage': 'CognitiveServices.Face.Transaction=1',date: 'Sun,20 Sep 2020 13:55:45 GMT',connection: 'close'
}
解决方法
如果要在节点环境中运行Axios
,则应使用Stream,Buffer
作为请求正文数据。有关更多详细信息,请参阅here。
例如
axios
.post(
"<your face api endpoint>",fs.readFileSync("D:\\faces.jpg"),{
headers: {
"Ocp-Apim-Subscription-Key": subscriptionKey,"Content-Type": "application/octet-stream",},params: {
returnFaceId: true,returnFaceLandmarks: false,returnFaceAttributes:
"age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise",}
)
.then((response) => {
console.log("Status text: " + response.status);
console.log("Status text: " + response.statusText);
console.log();
//console.log(response.data)
response.data.forEach((face) => {
console.log("Face ID: " + face.faceId);
console.log(
"Face rectangle: " +
face.faceRectangle.top +
"," +
face.faceRectangle.left +
"," +
face.faceRectangle.width +
"," +
face.faceRectangle.height
);
console.log("Smile: " + face.faceAttributes.smile);
console.log("Head pose: " + JSON.stringify(face.faceAttributes.headPose));
console.log("Gender: " + face.faceAttributes.gender);
console.log("Age: " + face.faceAttributes.age);
console.log(
"Facial hair: " + JSON.stringify(face.faceAttributes.facialHair)
);
console.log("Glasses: " + face.faceAttributes.glasses);
console.log("Smile: " + face.faceAttributes.smile);
console.log("Emotion: " + JSON.stringify(face.faceAttributes.emotion));
console.log("Blur: " + JSON.stringify(face.faceAttributes.blur));
console.log("Exposure: " + JSON.stringify(face.faceAttributes.exposure));
console.log("Noise: " + JSON.stringify(face.faceAttributes.noise));
console.log("Makeup: " + JSON.stringify(face.faceAttributes.makeup));
console.log(
"Accessories: " + JSON.stringify(face.faceAttributes.accessories)
);
console.log("Hair: " + JSON.stringify(face.faceAttributes.hair));
console.log();
});
})
.catch((err) => {
throw err;
});