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