IEnumerable GetFaceAttributesFlags()

in Kiosk/Views/DigitalAssetManagement/ImageInsightsViewModel.cs [548:647]


        IEnumerable<string> GetFaceAttributesFlags(FaceInsights[] faces)
        {
            var result = new List<string>();
            var threshhold = .49;
            if (faces != null)
            {
                foreach (var face in faces)
                {
                    //accessories
                    foreach (var accessory in face.FaceAttributes.Accessories?.Where(i => i.Confidence >= threshhold).Select(i => i.Type.ToString()) ?? Array.Empty<string>())
                    {
                        result.Add(accessory);
                    }
                    //Beard
                    if ((face.FaceAttributes.FacialHair?.Beard ?? 0) >= threshhold)
                    {
                        result.Add("Beard");
                    }
                    //Moustache
                    if ((face.FaceAttributes.FacialHair?.Moustache ?? 0) >= threshhold)
                    {
                        result.Add("Moustache");
                    }
                    //Sideburns
                    if ((face.FaceAttributes.FacialHair?.Sideburns ?? 0) >= threshhold)
                    {
                        result.Add("Sideburns");
                    }
                    //Bald
                    if ((face.FaceAttributes.Hair?.Bald ?? 0) >= threshhold)
                    {
                        result.Add("Bald");
                    }
                    //HairColor
                    var hairColor = (face.FaceAttributes.Hair?.HairColor ?? Array.Empty<HairColor>()).Where(i => i.Color != HairColorType.Unknown && i.Color != HairColorType.Other).OrderByDescending(i => i.Confidence).Select(i => i.Color.ToString()).FirstOrDefault();
                    if (hairColor != null)
                    {
                        result.Add(hairColor + " Hair");
                    }
                    //Hair invisible
                    if (face.FaceAttributes.Hair?.Invisible ?? false)
                    {
                        result.Add("Hair isn't visible");
                    }
                    //Eye Makup
                    if (face.FaceAttributes.Makeup?.EyeMakeup ?? false)
                    {
                        result.Add("Eye Makup");
                    }
                    //Lip Makup
                    if (face.FaceAttributes.Makeup?.LipMakeup ?? false)
                    {
                        result.Add("Lip Makup");
                    }
                    //glasses
                    var glasses = face.FaceAttributes.Glasses.GetValueOrDefault(Face.Models.GlassesType.NoGlasses);
                    if (glasses != GlassesType.NoGlasses)
                    {
                        switch (glasses)
                        {
                            case Face.Models.GlassesType.ReadingGlasses:
                                result.Add("Reading Glasses");
                                break;
                            case Face.Models.GlassesType.Sunglasses:
                                result.Add("Sunglasses");
                                break;
                            case Face.Models.GlassesType.SwimmingGoggles:
                                result.Add("Swimming Goggles");
                                break;
                            default:
                                result.Add(glasses.ToString());
                                break;
                        }
                    }
                    //head pose
                    if (face.FaceAttributes.HeadPose.Pitch.Between(-10, 10) && face.FaceAttributes.HeadPose.Roll.Between(-10, 10) && face.FaceAttributes.HeadPose.Yaw.Between(-10, 10))
                    {
                        result.Add("Facing Camera");
                    }
                    if (!face.FaceAttributes.HeadPose.Yaw.Between(-37, 37))
                    {
                        result.Add("Profile");
                    }
                    //Occlusion
                    if (face.FaceAttributes.Occlusion?.EyeOccluded ?? false)
                    {
                        result.Add("Eye isn't visible");
                    }
                    if (face.FaceAttributes.Occlusion?.ForeheadOccluded ?? false)
                    {
                        result.Add("Forehead isn't visible");
                    }
                    if (face.FaceAttributes.Occlusion?.MouthOccluded ?? false)
                    {
                        result.Add("Mouth isn't visible");
                    }
                }
            }
            return result.Distinct();
        }