1

我正在使用 Microsoft Face API 来检测人脸的属性,例如年龄、性别和情绪。以下代码对我有用:faces[position].faceAttributes.age我能够得到估计的年龄。faces[]是类型的数组Face

但是,当我尝试获取脸部快乐的概率时,我遇到了以下错误:

尝试从空对象引用的“double com.microsoft.projectoxford.face.contract.Emotion.happiness”字段中读取。

这就是我得到这个人快乐的概率的方法:
faces[position].faceAttributes.emotion.happiness

同样,当我尝试: 时 faces[position].faceAttributes.emotion,它返回null.

我知道这faces[position].faceAttributes不是null因为它适用于年龄和性别等其他属性,但我无法弄清楚为什么它不适用于情绪。有谁知道为什么会发生这种情况以及我可以做些什么来让它工作?


更新:

对于那些遇到同样问题的人,在AsnycTask处理人脸的地方,您必须包含您希望检测的属性,否则当您稍后引用它们时,它会说它是一个空对象引用。最初,我有FaceServiceClient.FaceAttributeType.Smile,这就是为什么在尝试确定情绪时它给了我一个错误。方法中包含以下代码doInBackground

FaceServiceClient.FaceAttributeType[] faceAttr = new FaceServiceClient.FaceAttributeType[]{
    FaceServiceClient.FaceAttributeType.HeadPose,
    FaceServiceClient.FaceAttributeType.Age,
    FaceServiceClient.FaceAttributeType.Gender,
    FaceServiceClient.FaceAttributeType.Emotion,
    FaceServiceClient.FaceAttributeType.FacialHair
};
4

1 回答 1

2

看起来您emotion在请求期间没有要求属性。所有这些人脸属性都是可选的,因此返回的对象将只包含您询问的那个。例如以下请求:

POST https://westeurope.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=age,gender HTTP/1.1
Host: westeurope.api.cognitive.microsoft.com
Content-Type: application/json
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••

{
    "url": "https://pbs.twimg.com/profile_images/907936570342338560/qHCX1E2B_400x400.jpg"
}

我将收到以下回复,其中 JSON 在解析时会发送一个带有null情感的对象

[{
  "faceId": "e97a0554-99a9-44f7-9de9-614ef6d8843b",
  "faceRectangle": {
    "top": 117,
    "left": 106,
    "width": 219,
    "height": 219
  },
  "faceAttributes": {
    "gender": "male",
    "age": 32.0
  }
}]

如果我emotionreturnFaceAttributes请求中添加:

[{
  "faceId": "da7c416f-3eb4-4132-8b3e-e317daf58c7d",
  "faceRectangle": {
    "top": 117,
    "left": 106,
    "width": 219,
    "height": 219
  },
  "faceAttributes": {
    "gender": "male",
    "age": 32.0,
    "emotion": {
      "anger": 0.0,
      "contempt": 0.0,
      "disgust": 0.0,
      "fear": 0.0,
      "happiness": 1.0,
      "neutral": 0.0,
      "sadness": 0.0,
      "surprise": 0.0
    }
  }
}]

我不知道您如何使用 API(直接调用或使用包),但您绝对应该看看这些参数在您的级别可用。如果不是,请直接使用 API(文档:https ://westeurope.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/ )

于 2018-12-27T09:08:43.047 回答