Эмоция атрибута Face API дает ошибку нулевого объекта - PullRequest
0 голосов
/ 27 декабря 2018

Я работаю с 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
};

1 Ответ

0 голосов
/ 27 декабря 2018

Похоже, вы не запрашиваете 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
  }
}]

Если ядобавьте emotion в returnFaceAttributes запроса:

[{
  "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/)

...