in Kiosk/Views/FaceApiExplorer/FaceApiExplorerPage.xaml.cs [178:302]
private void UpdateResultDetails()
{
DetectedFaceViewModel detectedFace = CurrentDetectedFace?.Entity;
FaceAttributes faceAttributes = detectedFace?.FaceAttributes;
if (faceAttributes != null)
{
if (ShowAgeAndGender)
{
// gender
this.genderTextBlock.Text = faceAttributes.Gender.HasValue ? Util.UppercaseFirst(faceAttributes.Gender.ToString()) : NoneDesc;
// age
this.ageTextBlock.Text = faceAttributes.Age.HasValue ? faceAttributes.Age.ToString() : NoneDesc;
}
// hair color
this.haircolorsGridView.ItemsSource = faceAttributes.Hair?.HairColor != null && faceAttributes.Hair.HairColor.Any()
? faceAttributes.Hair.HairColor.Where(x => x.Confidence >= 0.6).Select(x => new { Confidence = string.Format("({0}%)", Math.Round(x.Confidence * 100)), HairColor = x.Color.ToString() })
: (object)(new[] { new { HairColor = NoneDesc } });
// facial hair
var facialHair = new List<KeyValuePair<string, double>>()
{
new KeyValuePair<string, double>("Moustache", faceAttributes.FacialHair?.Moustache ?? 0),
new KeyValuePair<string, double>("Beard", faceAttributes.FacialHair?.Beard ?? 0),
new KeyValuePair<string, double>("Sideburns", faceAttributes.FacialHair?.Sideburns ?? 0)
};
if (facialHair.Any(x => x.Value > 0))
{
this.facialHairGridView.ItemsSource = facialHair.Select(x => new { Value = 100 * x.Value, Type = x.Key });
this.facialHairGridView.Visibility = Visibility.Visible;
this.facialHairTextBlock.Visibility = Visibility.Collapsed;
}
else
{
this.facialHairTextBlock.Text = NoneDesc;
this.facialHairGridView.Visibility = Visibility.Collapsed;
this.facialHairTextBlock.Visibility = Visibility.Visible;
}
// glasses
this.glassesTextBlock.Text = faceAttributes.Glasses.HasValue && faceAttributes.Glasses != GlassesType.NoGlasses ? faceAttributes.Glasses.ToString() : NoneDesc;
// makeup
var makeup = new List<string>()
{
faceAttributes.Makeup != null && faceAttributes.Makeup.EyeMakeup ? "Eye" : string.Empty,
faceAttributes.Makeup != null && faceAttributes.Makeup.LipMakeup ? "Lip" : string.Empty
};
this.makeupTextBlock.Text = makeup.Any(x => !string.IsNullOrEmpty(x)) ? string.Join(", ", makeup.Where(x => !string.IsNullOrEmpty(x))) : NoneDesc;
// accessories
this.accessoriesGridView.ItemsSource = faceAttributes.Accessories != null && faceAttributes.Accessories.Any()
? faceAttributes.Accessories.Where(x => x.Confidence >= 0.6).Select(x => new { Confidence = string.Format("({0}%)", Math.Round(x.Confidence * 100)), Accessory = x.Type.ToString() })
: (object)(new[] { new { Accessory = NoneDesc } });
// emotion
var emotionList = new List<KeyValuePair<string, double>>()
{
new KeyValuePair<string, double>("Anger", faceAttributes.Emotion?.Anger ?? 0),
new KeyValuePair<string, double>("Contempt", faceAttributes.Emotion?.Contempt ?? 0),
new KeyValuePair<string, double>("Disgust", faceAttributes.Emotion?.Disgust ?? 0),
new KeyValuePair<string, double>("Fear", faceAttributes.Emotion?.Fear ?? 0),
new KeyValuePair<string, double>("Happiness", faceAttributes.Emotion?.Happiness ?? 0),
new KeyValuePair<string, double>("Neutral", faceAttributes.Emotion?.Neutral ?? 0),
new KeyValuePair<string, double>("Sadness", faceAttributes.Emotion?.Sadness ?? 0),
new KeyValuePair<string, double>("Surprise", faceAttributes.Emotion?.Surprise ?? 0)
};
var detectedEmotions = emotionList.Where(x => x.Value > 0).Select(x => new { Value = 100 * x.Value, Type = x.Key });
string notDetectedEmotions = string.Join(", ", emotionList.Where(x => x.Value <= 0).Select(x => x.Key));
if (detectedEmotions.Any())
{
this.detectedEmotionGridView.ItemsSource = detectedEmotions;
this.detectedEmotionGridView.Visibility = Visibility.Visible;
this.detectedEmotionTextBlock.Visibility = Visibility.Collapsed;
}
else
{
this.detectedEmotionTextBlock.Text = NoneDesc;
this.detectedEmotionTextBlock.Visibility = Visibility.Visible;
this.detectedEmotionGridView.Visibility = Visibility.Collapsed;
}
this.notDetectedEmotionTextBlock.Text = !string.IsNullOrEmpty(notDetectedEmotions) ? notDetectedEmotions : NoneDesc;
// pose
double rollAngle = faceAttributes.HeadPose?.Roll ?? 0;
string rollDirection = rollAngle > 0 ? "right" : "left";
this.headTiltTextBlock.Text = rollAngle != 0 ? $"{Math.Abs(rollAngle)}° {rollDirection}" : string.Empty;
this.headTiltControl.DrawFacePoseData(rollAngle, angleArr: new double[] { -60, -30, 0, 30, 60 });
double pitchAngle = faceAttributes.HeadPose?.Pitch ?? 0;
string pitchDirection = pitchAngle > 0 ? "up" : "down";
this.chinAngleTextBlock.Text = pitchAngle != 0 ? $"{Math.Abs(pitchAngle)}° {pitchDirection}" : string.Empty;
this.chinAngleControl.DrawFacePoseData(pitchAngle, angleArr: new double[] { 60, 30, 0, -30, -60 });
double yawAngle = faceAttributes.HeadPose?.Yaw ?? 0;
string yawDirection = yawAngle > 0 ? "right" : "left";
this.faceRotationTextBlock.Text = yawAngle != 0 ? $"{Math.Abs(yawAngle)}° {yawDirection}" : string.Empty;
this.faceRotationControl.DrawFacePoseData(yawAngle, angleArr: new double[] { 60, 30, 0, -30, -60 });
// exposure
this.expouseTextBlock.Text = faceAttributes.Exposure?.ExposureLevel != null ? Util.UppercaseFirst(faceAttributes.Exposure.ExposureLevel.ToString()) : NoneDesc;
this.expouseProgressBar.Value = faceAttributes.Exposure != null ? 100 * faceAttributes.Exposure.Value : 0;
// blur
this.blurTextBlock.Text = faceAttributes.Blur?.BlurLevel != null ? Util.UppercaseFirst(faceAttributes.Blur.BlurLevel.ToString()) : NoneDesc;
this.blurProgressBar.Value = faceAttributes.Blur != null ? 100 * faceAttributes.Blur.Value : 0;
// noise
this.noiseTextBlock.Text = faceAttributes.Noise?.NoiseLevel != null ? Util.UppercaseFirst(faceAttributes.Noise.NoiseLevel.ToString()) : NoneDesc;
this.noiseProgressBar.Value = faceAttributes.Noise != null ? 100 * faceAttributes.Noise.Value : 0;
// occlusion
var occlusionList = new List<string>()
{
faceAttributes.Occlusion != null && faceAttributes.Occlusion.ForeheadOccluded ? "Forehead" : string.Empty,
faceAttributes.Occlusion != null && faceAttributes.Occlusion.EyeOccluded ? "Eye" : string.Empty,
faceAttributes.Occlusion != null && faceAttributes.Occlusion.MouthOccluded ? "Mouth" : string.Empty
};
this.occlusionTextBlock.Text = occlusionList.Any(x => !string.IsNullOrEmpty(x)) ? string.Join(", ", occlusionList.Where(x => !string.IsNullOrEmpty(x))) : NoneDesc;
}
ShowFaceLandmarks();
}