Face API属性情感导致空对象错误



我正在使用Microsoft Face API来检测人脸的属性,如年龄、性别和情绪。以下代码对我有效:faces[position].faceAttributes.age,我可以得到估计的年龄(faces[]Face类型的阵列)

然而,当我试图获得人脸快乐的概率时,我遇到了以下错误:

尝试从空对象引用上的字段"double.com.microsoft.com/projectoxford.face.contact.Eemotion.holevery"中读取。

这就是我如何获得该人快乐的概率
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
};

在请求过程中,您似乎没有请求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
}
}]

如果我在请求的returnFaceAttributes中添加emotion

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

相关内容

  • 没有找到相关文章

最新更新