public Coach(string firstName, string lastName, int id, int age, int heigth, int weigth,
              RaceType raceType, ReligionType religionType, EyeColorType eyeColorType,
              FaceShapeType faceShape, HairColorType hairColor, BodyShapeType bodyShape, int coachCapability)
     : base(firstName, lastName, id, age, heigth, weigth, raceType, religionType, eyeColorType, faceShape, hairColor, bodyShape)
 {
     this.CoachCapability = coachCapability;
 }
        internal static string ToSerializedValue(this HairColorType value)
        {
            switch (value)
            {
            case HairColorType.Unknown:
                return("unknown");

            case HairColorType.White:
                return("white");

            case HairColorType.Gray:
                return("gray");

            case HairColorType.Blond:
                return("blond");

            case HairColorType.Brown:
                return("brown");

            case HairColorType.Red:
                return("red");

            case HairColorType.Black:
                return("black");

            case HairColorType.Other:
                return("other");
            }
            return(null);
        }
Exemple #3
0
        /// <summary>
        /// Gets the hair.
        /// </summary>
        /// <param name="hair">The hair.</param>
        /// <returns></returns>
        private string GetHair(Hair hair)
        {
            if (hair.HairColor.Length == 0)
            {
                if (hair.Invisible)
                {
                    return("Invisible");
                }
                else
                {
                    return("Bald");
                }
            }
            else
            {
                HairColorType returnColor   = HairColorType.Unknown;
                double        maxConfidence = 0.0f;

                for (int i = 0; i < hair.HairColor.Length; ++i)
                {
                    if (hair.HairColor[i].Confidence > maxConfidence)
                    {
                        maxConfidence = hair.HairColor[i].Confidence;
                        returnColor   = hair.HairColor[i].Color;
                    }
                }

                return(returnColor.ToString());
            }
        }
Exemple #4
0
 public SoftwareEngineer(
     string name,
     int age,
     HairColorType hairColor,
     EyesColorType eyesColor,
     FaceShapeType faceShape,
     RaceType race,
     GenderType gender,
     ReligionType religion)
     : base(name, age, hairColor, eyesColor, faceShape, race, gender, religion)
 {
 }
Exemple #5
0
 public SoftwareEngineer(
     string name,
     int age,
     HairColorType hairColor,
     EyesColorType eyesColor,
     FaceShapeType faceShape,
     RaceType race,
     GenderType gender,
     ReligionType religion)
     : base(name, age, hairColor, eyesColor, faceShape, race, gender, religion)
 {
 }
 public Waiter(
     string name,
     int age,
     HairColorType hairColor,
     EyesColorType eyesColor,
     FaceShapeType faceShape,
     RaceType race,
     GenderType gender,
     ReligionType religion)
     : base(name, age, hairColor, eyesColor, faceShape, race, gender, religion)
 {
     this.isAvailable = true;
     this.orders      = new Dictionary <IHuman, IRestaurantOrder>();
 }
 public Waiter(
     string name, 
     int age, 
     HairColorType hairColor, 
     EyesColorType eyesColor, 
     FaceShapeType faceShape, 
     RaceType race, 
     GenderType gender, 
     ReligionType religion)
     : base(name, age, hairColor, eyesColor, faceShape, race, gender, religion)
 {
     this.isAvailable = true;
     this.orders = new Dictionary<IHuman, IRestaurantOrder>();
 }
        /// <summary>
        /// Gets the hair colour
        /// </summary>
        /// <param name="hairColors">List of haircolours found</param>
        /// <returns>The hair colour of the person</returns>
        private HairColorType GetHairColor(IList <HairColor> hairColors)
        {
            double        confidence = 0;
            HairColorType retVal     = new HairColorType();

            foreach (HairColor hairColor in hairColors)
            {
                if (hairColor.Confidence > confidence)
                {
                    confidence = hairColor.Confidence;
                    retVal     = hairColor.Color;
                }
            }

            return(retVal);
        }
        /// <summary>
        /// Gets the dominant color
        /// </summary>
        /// <param name="hairColour">Haircolor array</param>
        /// <returns>The dominant haircolour</returns>
        private HairColorType GetDominantHairColor(HairColor[]  hairColour)
        {
            HairColorType retVal         = HairColorType.Black;
            double        bestConfidence = 0;

            for (int idx = 0; idx < hairColour.Length; idx++)
            {
                if (bestConfidence < hairColour[idx].Confidence)
                {
                    bestConfidence = hairColour[idx].Confidence;
                    retVal         = hairColour[idx].Color;
                }
            }

            return(retVal);
        }
Exemple #10
0
 public Participant(string firstName, string lastName, int id, int age, int heigth, int weigth,
                    RaceType raceType, ReligionType religionType, EyeColorType eyeColorType,
                    FaceShapeType faceShape, HairColorType hairColor, BodyShapeType bodyShape)
 {
     this.Age       = age;
     this.FirstName = firstName;
     this.LastName  = lastName;
     this.ID        = id;
     this.Weight    = weigth;
     this.Heigth    = heigth;
     this.RaceType  = raceType;
     this.Religion  = religionType;
     this.EyeType   = eyeColorType;
     this.FaceShape = faceShape;
     this.HairColor = hairColor;
     this.BodyShape = bodyShape;
 }
        private static Color GetHairColor(HairColorType hairColorType)
        {
            var result = new Color();

            switch (hairColorType)
            {
            case HairColorType.Black:
                result = Colors.Black;
                break;

            case HairColorType.Blond:
                result = Colors.Goldenrod;
                break;

            case HairColorType.Brown:
                result = Colors.Brown;
                break;

            case HairColorType.Gray:
                result = Colors.Gray;
                break;

            case HairColorType.Red:
                result = Colors.Red;
                break;

            case HairColorType.White:
                result = Colors.White;
                break;

            case HairColorType.Unknown:
                break;

            case HairColorType.Other:
                break;

            default:
                result = Colors.Transparent;
                break;
            }

            return(result);
        }
Exemple #12
0
 public Human(
     string name,
     int age,
     HairColorType hairColor,
     EyesColorType eyesColor,
     FaceShapeType faceShape,
     RaceType race,
     GenderType gender,
     ReligionType religion,
     decimal moneyInEuro) : this()
 {
     this.Id        = DataGenerator.GenerateUniqueId();
     this.name      = name;
     this.age       = age;
     this.hairColor = hairColor;
     this.eyesColor = eyesColor;
     this.faceShape = faceShape;
     this.gender    = gender;
     this.race      = race;
     this.religion  = religion;
 }
        public Human(
            string name,
            int age,
            HairColorType hairColor,
            EyesColorType eyesColor,
            FaceShapeType faceShape,
            RaceType race,
            GenderType gender,
            ReligionType religion)
            : this()
        {
            this.id = DataGenerator.GenerateUniqueId();

            this.name = name;
            this.age = age;
            this.hairColor = hairColor;
            this.faceShape = faceShape;
            this.eyesColor = eyesColor;
            this.religion = religion;
            this.gender = gender;
            this.race = race;
        }
Exemple #14
0
        private static string GetHair(Hair hair)
        {
            if (hair.HairColor.Count == 0)
            {
                return(hair.Invisible ? "Invisible" : "Bald");
            }

            HairColorType returnColor   = HairColorType.Unknown;
            double        maxConfidence = 0.0f;

            foreach (HairColor hairColor in hair.HairColor)
            {
                if (hairColor.Confidence <= maxConfidence)
                {
                    continue;
                }

                maxConfidence = hairColor.Confidence;
                returnColor   = hairColor.Color;
            }

            return(returnColor.ToString());
        }
        private System.Windows.Media.Color GetHairColor(HairColorType hairColorType)
        {
            var result = new System.Windows.Media.Color();

            switch (hairColorType)
            {
            case HairColorType.Black:
                result = Colors.Black;
                break;

            case HairColorType.Blond:
                result = Colors.Goldenrod;
                break;

            case HairColorType.Brown:
                result = Colors.Brown;
                break;

            case HairColorType.Gray:
                result = Colors.Gray;
                break;

            case HairColorType.Red:
                result = Colors.Red;
                break;

            case HairColorType.White:
                result = Colors.White;
                break;

            default:
                result = Colors.Transparent;
                break;
            }

            return(result);
        }
Exemple #16
0
        /*
         * Detect faces from URL images
         */
        public static async Task DetectFaceExtract(IFaceClient client, string recognitionModel)
        {
            Console.WriteLine("========Sample of face detection========");

            // Create a list of images
            const string  IMAGE_BASE_URL = "https://csdx.blob.core.windows.net/resources/Face/Images/";
            List <string> imageFileNames = new List <string>
            {
                "detection1.jpg",                                  // single female with glasses
                // "detection2.jpg", // (optional: single man)
                // "detection3.jpg", // (optional: single male construction worker)
                // "detection4.jpg", // (optional: 3 people at cafe, 1 is blurred)
                "detection5.jpg",                                  // black family, woman child man
                "detection6.jpg"                                   // elderly couple, male female
            };

            foreach (var imageFileName in imageFileNames)
            {
                IList <DetectedFace> detectedFaces;

                // Detect faces with all attributes from image url.
                detectedFaces = await client.Face.DetectWithUrlAsync($"{IMAGE_BASE_URL}{imageFileName}",
                                                                     returnFaceAttributes : new List <FaceAttributeType> {
                    FaceAttributeType.Accessories, FaceAttributeType.Age,
                    FaceAttributeType.Blur, FaceAttributeType.Emotion, FaceAttributeType.Exposure, FaceAttributeType.FacialHair,
                    FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair, FaceAttributeType.HeadPose,
                    FaceAttributeType.Makeup, FaceAttributeType.Noise, FaceAttributeType.Occlusion, FaceAttributeType.Smile
                },
                                                                     recognitionModel : recognitionModel);

                Console.WriteLine($"{detectedFaces.Count} face(s) detected from image `{imageFileName}`.");

                // Parse and print all attributes of each detected face.
                foreach (var face in detectedFaces)
                {
                    Console.WriteLine($"Face attributes for {imageFileName}:");

                    // Get bounding box of the faces
                    Console.WriteLine($"Rectangle(Left/Top/Width/Height) : {face.FaceRectangle.Left} {face.FaceRectangle.Top} {face.FaceRectangle.Width} {face.FaceRectangle.Height}");

                    // Get accessories of the faces
                    List <Accessory> accessoriesList = (List <Accessory>)face.FaceAttributes.Accessories;
                    int    count = face.FaceAttributes.Accessories.Count;
                    string accessory; string[] accessoryArray = new string[count];
                    if (count == 0)
                    {
                        accessory = "NoAccessories";
                    }
                    else
                    {
                        for (int i = 0; i < count; ++i)
                        {
                            accessoryArray[i] = accessoriesList[i].Type.ToString();
                        }
                        accessory = string.Join(",", accessoryArray);
                    }
                    Console.WriteLine($"Accessories : {accessory}");

                    // Get face other attributes
                    Console.WriteLine($"Age : {face.FaceAttributes.Age}");
                    Console.WriteLine($"Blur : {face.FaceAttributes.Blur.BlurLevel}");

                    // Get emotion on the face
                    string  emotionType  = string.Empty;
                    double  emotionValue = 0.0;
                    Emotion emotion      = face.FaceAttributes.Emotion;
                    if (emotion.Anger > emotionValue)
                    {
                        emotionValue = emotion.Anger; emotionType = "Anger";
                    }
                    if (emotion.Contempt > emotionValue)
                    {
                        emotionValue = emotion.Contempt; emotionType = "Contempt";
                    }
                    if (emotion.Disgust > emotionValue)
                    {
                        emotionValue = emotion.Disgust; emotionType = "Disgust";
                    }
                    if (emotion.Fear > emotionValue)
                    {
                        emotionValue = emotion.Fear; emotionType = "Fear";
                    }
                    if (emotion.Happiness > emotionValue)
                    {
                        emotionValue = emotion.Happiness; emotionType = "Happiness";
                    }
                    if (emotion.Neutral > emotionValue)
                    {
                        emotionValue = emotion.Neutral; emotionType = "Neutral";
                    }
                    if (emotion.Sadness > emotionValue)
                    {
                        emotionValue = emotion.Sadness; emotionType = "Sadness";
                    }
                    if (emotion.Surprise > emotionValue)
                    {
                        emotionType = "Surprise";
                    }
                    Console.WriteLine($"Emotion : {emotionType}");

                    // Get more face attributes
                    Console.WriteLine($"Exposure : {face.FaceAttributes.Exposure.ExposureLevel}");
                    Console.WriteLine($"FacialHair : {string.Format("{0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No")}");
                    Console.WriteLine($"Gender : {face.FaceAttributes.Gender}");
                    Console.WriteLine($"Glasses : {face.FaceAttributes.Glasses}");

                    // Get hair color
                    Hair   hair  = face.FaceAttributes.Hair;
                    string color = null;
                    if (hair.HairColor.Count == 0)
                    {
                        if (hair.Invisible)
                        {
                            color = "Invisible";
                        }
                        else
                        {
                            color = "Bald";
                        }
                    }
                    HairColorType returnColor   = HairColorType.Unknown;
                    double        maxConfidence = 0.0f;
                    foreach (HairColor hairColor in hair.HairColor)
                    {
                        if (hairColor.Confidence <= maxConfidence)
                        {
                            continue;
                        }
                        maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
                    }
                    Console.WriteLine($"Hair : {color}");

                    // Get more attributes
                    Console.WriteLine($"HeadPose : {string.Format("Pitch: {0}, Roll: {1}, Yaw: {2}", Math.Round(face.FaceAttributes.HeadPose.Pitch, 2), Math.Round(face.FaceAttributes.HeadPose.Roll, 2), Math.Round(face.FaceAttributes.HeadPose.Yaw, 2))}");
                    Console.WriteLine($"Makeup : {string.Format("{0}", (face.FaceAttributes.Makeup.EyeMakeup || face.FaceAttributes.Makeup.LipMakeup) ? "Yes" : "No")}");
                    Console.WriteLine($"Noise : {face.FaceAttributes.Noise.NoiseLevel}");
                    Console.WriteLine($"Occlusion : {string.Format("EyeOccluded: {0}", face.FaceAttributes.Occlusion.EyeOccluded ? "Yes" : "No")} " +
                                      $" {string.Format("ForeheadOccluded: {0}", face.FaceAttributes.Occlusion.ForeheadOccluded ? "Yes" : "No")}   {string.Format("MouthOccluded: {0}", face.FaceAttributes.Occlusion.MouthOccluded ? "Yes" : "No")}");
                    Console.WriteLine($"Smile : {face.FaceAttributes.Smile}");
                    Console.WriteLine();
                }
            }
        }
        public static async Task DetectFaceExtract()
        {
            Console.WriteLine("========DETECT FACES========");
            Console.WriteLine();
            var client = AuthenticateService.AuthenticateFaceClient();

            // Create a list of images
            string[] filePaths = Directory.GetFiles(@"D:\Work\Mimobod\dir_001",
                                                    "*", SearchOption.AllDirectories);

            foreach (var filePath in filePaths)
            {
                try
                {
                    byte[] byteData = ParserService.GetImageAsByteArray(filePath);
                    using (var stream = new MemoryStream(byteData))
                    {
                        IList <DetectedFace> detectedFaces;

                        // Detect faces with all attributes from image url.
                        detectedFaces = await client.Face.DetectWithStreamAsync(stream,
                                                                                returnFaceAttributes : new List <FaceAttributeType>
                        {
                            FaceAttributeType.Accessories, FaceAttributeType.Age,
                            FaceAttributeType.Emotion, FaceAttributeType.FacialHair,
                            FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair,
                            FaceAttributeType.Makeup, FaceAttributeType.Smile
                        });

                        Console.WriteLine($"{detectedFaces.Count} face(s) detected from image `{filePath}`.");
                        if (detectedFaces.Count > 0)
                        {
                            var imageIndsex = DbService.SaveImage(byteData);

                            // Parse and print all attributes of each detected face.
                            var faceNumber = 1;
                            foreach (var face in detectedFaces)
                            {
                                // Get accessories of the faces
                                List <Accessory> accessoriesList = (List <Accessory>)face.FaceAttributes.Accessories;
                                int    count = face.FaceAttributes.Accessories.Count;
                                string accessory; string[] accessoryArray = new string[count];
                                if (count == 0)
                                {
                                    accessory = "NoAccessories";
                                }
                                else
                                {
                                    for (int i = 0; i < count; ++i)
                                    {
                                        accessoryArray[i] = accessoriesList[i].Type.ToString();
                                    }
                                    accessory = string.Join(",", accessoryArray);
                                }


                                // Get emotion on the face
                                string  emotionType  = string.Empty;
                                double  emotionValue = 0.0;
                                Emotion emotion      = face.FaceAttributes.Emotion;
                                if (emotion.Anger > emotionValue)
                                {
                                    emotionValue = emotion.Anger; emotionType = "Anger";
                                }
                                if (emotion.Contempt > emotionValue)
                                {
                                    emotionValue = emotion.Contempt; emotionType = "Contempt";
                                }
                                if (emotion.Disgust > emotionValue)
                                {
                                    emotionValue = emotion.Disgust; emotionType = "Disgust";
                                }
                                if (emotion.Fear > emotionValue)
                                {
                                    emotionValue = emotion.Fear; emotionType = "Fear";
                                }
                                if (emotion.Happiness > emotionValue)
                                {
                                    emotionValue = emotion.Happiness; emotionType = "Happiness";
                                }
                                if (emotion.Neutral > emotionValue)
                                {
                                    emotionValue = emotion.Neutral; emotionType = "Neutral";
                                }
                                if (emotion.Sadness > emotionValue)
                                {
                                    emotionValue = emotion.Sadness; emotionType = "Sadness";
                                }
                                if (emotion.Surprise > emotionValue)
                                {
                                    emotionType = "Surprise";
                                }

                                // Get more face attributes
                                var facialHair = string.Format("{0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No");

                                // Get hair color
                                Hair   hair  = face.FaceAttributes.Hair;
                                string color = null;
                                if (hair.HairColor.Count == 0)
                                {
                                    if (hair.Invisible)
                                    {
                                        color = "Invisible";
                                    }
                                    else
                                    {
                                        color = "Bald";
                                    }
                                }
                                HairColorType returnColor   = HairColorType.Unknown;
                                double        maxConfidence = 0.0f;
                                foreach (HairColor hairColor in hair.HairColor)
                                {
                                    if (hairColor.Confidence <= maxConfidence)
                                    {
                                        continue;
                                    }
                                    maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
                                }

                                DbService.SaveToDatabase(
                                    imageIndsex,
                                    accessory,
                                    face.FaceAttributes.Age,
                                    emotionType,
                                    facialHair,
                                    (int)face.FaceAttributes.Gender,
                                    (int)face.FaceAttributes.Glasses,
                                    color,
                                    face.FaceAttributes.Smile,
                                    faceNumber);
                                faceNumber++;
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("----------------------------------------------------------");
                }
            }
        }
Exemple #18
0
        //authenticate the key


        //detection model one
        public static async Task DetectFaceExtract(IFaceClient client, string url, string recognitionModel)
        {
            Console.WriteLine("======== DETECT FACE ========\n======== Detection Mode 1 ======== ");
            Console.WriteLine();



            IList <DetectedFace> detectedFaces;

            detectedFaces = await client.Face.DetectWithUrlAsync(url,
                                                                 returnFaceAttributes : new List <FaceAttributeType?> {
                FaceAttributeType.Accessories, FaceAttributeType.Age,
                FaceAttributeType.Blur, FaceAttributeType.Emotion, FaceAttributeType.Exposure, FaceAttributeType.FacialHair,
                FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair, FaceAttributeType.HeadPose,
                FaceAttributeType.Makeup, FaceAttributeType.Noise, FaceAttributeType.Occlusion, FaceAttributeType.Smile
            },
                                                                 // We specify detection model 1 because we are retrieving attributes.
                                                                 detectionModel : DetectionModel.Detection01,
                                                                 recognitionModel : recognitionModel);

            Console.WriteLine($"{detectedFaces.Count} face detected from the link.");

            foreach (var face in detectedFaces)
            {
                Console.WriteLine($"Face attributes for the link:");

                // Get bounding box of the faces
                Console.WriteLine($"Rectangle(Left/Top/Width/Height) : {face.FaceRectangle.Left} {face.FaceRectangle.Top} {face.FaceRectangle.Width} {face.FaceRectangle.Height}");

                // Get accessories of the faces
                List <Accessory> accessoriesList = (List <Accessory>)face.FaceAttributes.Accessories;
                int    count = face.FaceAttributes.Accessories.Count;
                string accessory; string[] accessoryArray = new string[count];
                if (count == 0)
                {
                    accessory = "NoAccessories";
                }
                else
                {
                    for (int i = 0; i < count; ++i)
                    {
                        accessoryArray[i] = accessoriesList[i].Type.ToString();
                    }
                    accessory = string.Join(",", accessoryArray);
                }
                Console.WriteLine($"Accessories : {accessory}");

                // Get face other attributes
                Console.WriteLine($"Age : {face.FaceAttributes.Age}");
                Console.WriteLine($"Blur : {face.FaceAttributes.Blur.BlurLevel}");

                // Get emotion on the face
                string  emotionType  = string.Empty;
                double  emotionValue = 0.0;
                Emotion emotion      = face.FaceAttributes.Emotion;
                if (emotion.Anger > emotionValue)
                {
                    emotionValue = emotion.Anger; emotionType = "Anger";
                }
                if (emotion.Contempt > emotionValue)
                {
                    emotionValue = emotion.Contempt; emotionType = "Contempt";
                }
                if (emotion.Disgust > emotionValue)
                {
                    emotionValue = emotion.Disgust; emotionType = "Disgust";
                }
                if (emotion.Fear > emotionValue)
                {
                    emotionValue = emotion.Fear; emotionType = "Fear";
                }
                if (emotion.Happiness > emotionValue)
                {
                    emotionValue = emotion.Happiness; emotionType = "Happiness";
                }
                if (emotion.Neutral > emotionValue)
                {
                    emotionValue = emotion.Neutral; emotionType = "Neutral";
                }
                if (emotion.Sadness > emotionValue)
                {
                    emotionValue = emotion.Sadness; emotionType = "Sadness";
                }
                if (emotion.Surprise > emotionValue)
                {
                    emotionType = "Surprise";
                }
                Console.WriteLine($"Emotion : {emotionType}");

                // Get more face attributes
                Console.WriteLine($"Exposure : {face.FaceAttributes.Exposure.ExposureLevel}");
                Console.WriteLine($"FacialHair : {string.Format("{0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No")}");
                Console.WriteLine($"Gender : {face.FaceAttributes.Gender}");
                Console.WriteLine($"Glasses : {face.FaceAttributes.Glasses}");

                // Get hair color
                Hair   hair  = face.FaceAttributes.Hair;
                string color = null;
                if (hair.HairColor.Count == 0)
                {
                    if (hair.Invisible)
                    {
                        color = "Invisible";
                    }
                    else
                    {
                        color = "Bald";
                    }
                }
                HairColorType returnColor   = HairColorType.Unknown;
                double        maxConfidence = 0.0f;
                foreach (HairColor hairColor in hair.HairColor)
                {
                    if (hairColor.Confidence <= maxConfidence)
                    {
                        continue;
                    }
                    maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
                }
                Console.WriteLine($"Hair : {color}");

                // Get more attributes
                Console.WriteLine($"HeadPose : {string.Format("Pitch: {0}, Roll: {1}, Yaw: {2}", Math.Round(face.FaceAttributes.HeadPose.Pitch, 2), Math.Round(face.FaceAttributes.HeadPose.Roll, 2), Math.Round(face.FaceAttributes.HeadPose.Yaw, 2))}");
                Console.WriteLine($"Makeup : {string.Format("{0}", (face.FaceAttributes.Makeup.EyeMakeup || face.FaceAttributes.Makeup.LipMakeup) ? "Yes" : "No")}");
                Console.WriteLine($"Noise : {face.FaceAttributes.Noise.NoiseLevel}");
                Console.WriteLine($"Occlusion : {string.Format("EyeOccluded: {0}", face.FaceAttributes.Occlusion.EyeOccluded ? "Yes" : "No")} " +
                                  $" {string.Format("ForeheadOccluded: {0}", face.FaceAttributes.Occlusion.ForeheadOccluded ? "Yes" : "No")}   {string.Format("MouthOccluded: {0}", face.FaceAttributes.Occlusion.MouthOccluded ? "Yes" : "No")}");
                Console.WriteLine($"Smile : {face.FaceAttributes.Smile}");
                Console.WriteLine();
            }
        }
Exemple #19
0
        public static async Task DetectFaceExtract(IFaceClient client, string url, string recognitionModel)
        {
            List <string> imageFileNames = new List <string>
            {
                "detection1.jpg"           // single female with glasses
                //"detection5.jpg",    // family, woman child man
                //"detection6.jpg"     // elderly couple, male female
            };

            foreach (var imageFileName in imageFileNames)
            {
                IList <DetectedFace> detectedFaces;

                // 取得する画像のurl、ファイル名、その中の情報の指定
                // 分析の結果をdetectedFacesに格納
                detectedFaces = await client.Face.DetectWithUrlAsync($"{url}{imageFileName}",
                                                                     returnFaceAttributes : new List <FaceAttributeType?> {
                    FaceAttributeType.Accessories, FaceAttributeType.Age,
                    FaceAttributeType.Blur, FaceAttributeType.Emotion, FaceAttributeType.Exposure, FaceAttributeType.FacialHair,
                    FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair, FaceAttributeType.HeadPose,
                    FaceAttributeType.Makeup, FaceAttributeType.Noise, FaceAttributeType.Occlusion, FaceAttributeType.Smile
                },
                                                                                                                  // We specify detection model 1 because we are retrieving attributes.
                                                                     detectionModel : DetectionModel.Detection01, // 分析の方法
                                                                     recognitionModel : recognitionModel);        // 出力の方法

                Console.WriteLine($"{detectedFaces.Count} face(s) detected from image `{imageFileName}`.");
                foreach (var face in detectedFaces)
                {
                    Console.WriteLine($"Face attributes for {imageFileName}:");

                    // 顔の向きの表示
                    Console.WriteLine($"Rectangle(Left/Top/Width/Height) : {face.FaceRectangle.Left} {face.FaceRectangle.Top} {face.FaceRectangle.Width} {face.FaceRectangle.Height}");

                    // アクセサリーの表示
                    List <Accessory> accessoriesList = (List <Accessory>)face.FaceAttributes.Accessories;
                    int    count = face.FaceAttributes.Accessories.Count;
                    string accessory; string[] accessoryArray = new string[count];
                    if (count == 0)
                    {
                        accessory = "NoAccessories";
                    }
                    else
                    {
                        for (int i = 0; i < count; ++i)
                        {
                            accessoryArray[i] = accessoriesList[i].Type.ToString();
                        }
                        accessory = string.Join(",", accessoryArray);
                    }
                    Console.WriteLine($"Accessories : {accessory}");


                    // 年齢、画像のぼかし度
                    Console.WriteLine($"Age : {face.FaceAttributes.Age}");
                    Console.WriteLine($"Blur : {face.FaceAttributes.Blur.BlurLevel}");

                    // 表情から感情の分析
                    string  emotionType  = string.Empty;
                    double  emotionValue = 0.0;
                    Emotion emotion      = face.FaceAttributes.Emotion;
                    if (emotion.Anger > emotionValue)
                    {
                        emotionValue = emotion.Anger; emotionType = "Anger";
                    }                                                                                          // 怒り
                    if (emotion.Contempt > emotionValue)
                    {
                        emotionValue = emotion.Contempt; emotionType = "Contempt";
                    }                                                                                                   // 悔しさ
                    if (emotion.Disgust > emotionValue)
                    {
                        emotionValue = emotion.Disgust; emotionType = "Disgust";
                    }                                                                                                // 嫌悪
                    if (emotion.Fear > emotionValue)
                    {
                        emotionValue = emotion.Fear; emotionType = "Fear";
                    }                                                                                       // 恐怖
                    if (emotion.Happiness > emotionValue)
                    {
                        emotionValue = emotion.Happiness; emotionType = "Happiness";
                    }                                                                                                      // 喜び
                    if (emotion.Neutral > emotionValue)
                    {
                        emotionValue = emotion.Neutral; emotionType = "Neutral";
                    }                                                                                                // 無表情
                    if (emotion.Sadness > emotionValue)
                    {
                        emotionValue = emotion.Sadness; emotionType = "Sadness";
                    }                                                                                                // 悲しみ
                    if (emotion.Surprise > emotionValue)
                    {
                        emotionType = "Surprise";
                    }                                              // 驚き
                    Console.WriteLine($"Emotion : {emotionType}"); // 最終的な表情の分析結果

                    // その他の分析情報1
                    Console.WriteLine($"Exposure : {face.FaceAttributes.Exposure.ExposureLevel}");                                                                                                                            // 露出
                    Console.WriteLine($"FacialHair : {string.Format("{0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No")}"); // 髭
                    Console.WriteLine($"Gender : {face.FaceAttributes.Gender}");                                                                                                                                              // 性別
                    Console.WriteLine($"Glasses : {face.FaceAttributes.Glasses}");                                                                                                                                            // 眼鏡

                    // 髪の毛の色の表示
                    Hair   hair  = face.FaceAttributes.Hair;
                    string color = null;
                    if (hair.HairColor.Count == 0)
                    {
                        if (hair.Invisible)
                        {
                            color = "Invisible";
                        }
                        else
                        {
                            color = "Bald";
                        }
                    }
                    HairColorType returnColor   = HairColorType.Unknown;
                    double        maxConfidence = 0.0f;
                    foreach (HairColor hairColor in hair.HairColor)
                    {
                        if (hairColor.Confidence <= maxConfidence)
                        {
                            continue;
                        }
                        maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
                    }
                    Console.WriteLine($"Hair : {color}");


                    // その他の分析情報2
                    Console.WriteLine($"HeadPose : {string.Format("Pitch: {0}, Roll: {1}, Yaw: {2}", Math.Round(face.FaceAttributes.HeadPose.Pitch, 2), Math.Round(face.FaceAttributes.HeadPose.Roll, 2), Math.Round(face.FaceAttributes.HeadPose.Yaw, 2))}"); // 顔の角度
                    Console.WriteLine($"Makeup : {string.Format("{0}", (face.FaceAttributes.Makeup.EyeMakeup || face.FaceAttributes.Makeup.LipMakeup) ? "Yes" : "No")}");                                                                                      // 化粧
                    Console.WriteLine($"Noise : {face.FaceAttributes.Noise.NoiseLevel}");                                                                                                                                                                      // 粗さ
                    Console.WriteLine($"Occlusion : {string.Format("EyeOccluded: {0}", face.FaceAttributes.Occlusion.EyeOccluded ? "Yes" : "No")} " +
                                      $" {string.Format("ForeheadOccluded: {0}", face.FaceAttributes.Occlusion.ForeheadOccluded ? "Yes" : "No")}   {string.Format("MouthOccluded: {0}", face.FaceAttributes.Occlusion.MouthOccluded ? "Yes" : "No")}");        // 顔の全体の露出度
                    Console.WriteLine($"Smile : {face.FaceAttributes.Smile}");                                                                                                                                                                                 // 笑顔かどうか
                    Console.WriteLine();
                }
            }
        }
Exemple #20
0
 /// <summary>
 /// Initializes a new instance of the HairColor class.
 /// </summary>
 /// <param name="color">Name of the hair color. Possible values
 /// include: 'unknown', 'white', 'gray', 'blond', 'brown', 'red',
 /// 'black', 'other'</param>
 /// <param name="confidence">Confidence level of the color</param>
 public HairColor(HairColorType color = default(HairColorType), double confidence = default(double))
 {
     Color      = color;
     Confidence = confidence;
     CustomInit();
 }
Exemple #21
0
        public static async Task <FaceImage> DetectFaceExtract(IFaceClient client, IFormFile file, string recognitionModel)
        {
            var       stream    = file.OpenReadStream();
            FaceImage faceImage = new FaceImage();

            IList <DetectedFace> detectedFaces;

            // Detect faces with all attributes from image.
            detectedFaces = await client.Face.DetectWithStreamAsync(stream,
                                                                    returnFaceAttributes : new List <FaceAttributeType> {
                FaceAttributeType.Accessories, FaceAttributeType.Age,
                FaceAttributeType.Blur, FaceAttributeType.Emotion, FaceAttributeType.Exposure, FaceAttributeType.FacialHair,
                FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair, FaceAttributeType.HeadPose,
                FaceAttributeType.Makeup, FaceAttributeType.Noise, FaceAttributeType.Occlusion, FaceAttributeType.Smile
            },
                                                                    recognitionModel : recognitionModel);

            faceImage.FileName  = file.FileName;
            faceImage.FaceCount = detectedFaces.Count;

            // Parse all attributes of each detected face.
            List <Attributes> faceAttributes = new List <Attributes>();

            foreach (var face in detectedFaces.Select((value, i) => new { i, value }))
            {
                Attributes attributes = new Attributes();

                attributes.FaceNumber = face.i + 1;

                // Get bounding box of the faces
                attributes.Rectangle.Left   = face.value.FaceRectangle.Left;
                attributes.Rectangle.Top    = face.value.FaceRectangle.Top;
                attributes.Rectangle.Width  = face.value.FaceRectangle.Width;
                attributes.Rectangle.Height = face.value.FaceRectangle.Height;

                // Get accessories of the faces
                List <Accessory> accessoriesList = (List <Accessory>)face.value.FaceAttributes.Accessories;
                int    count = face.value.FaceAttributes.Accessories.Count;
                string accessory; string[] accessoryArray = new string[count];
                if (count == 0)
                {
                    accessory = "NoAccessories";
                }
                else
                {
                    for (int i = 0; i < count; ++i)
                    {
                        accessoryArray[i] = accessoriesList[i].Type.ToString();
                    }
                    accessory = string.Join(",", accessoryArray);
                }

                attributes.Accessories = accessory;

                // Get face other attributes
                attributes.Age  = face.value.FaceAttributes.Age;
                attributes.Blur = face.value.FaceAttributes.Blur.BlurLevel.ToString();

                // Get emotion on the face
                string  emotionType  = string.Empty;
                double  emotionValue = 0.0;
                Emotion emotion      = face.value.FaceAttributes.Emotion;
                if (emotion.Anger > emotionValue)
                {
                    emotionValue = emotion.Anger; emotionType = "Anger";
                }
                if (emotion.Contempt > emotionValue)
                {
                    emotionValue = emotion.Contempt; emotionType = "Contempt";
                }
                if (emotion.Disgust > emotionValue)
                {
                    emotionValue = emotion.Disgust; emotionType = "Disgust";
                }
                if (emotion.Fear > emotionValue)
                {
                    emotionValue = emotion.Fear; emotionType = "Fear";
                }
                if (emotion.Happiness > emotionValue)
                {
                    emotionValue = emotion.Happiness; emotionType = "Happiness";
                }
                if (emotion.Neutral > emotionValue)
                {
                    emotionValue = emotion.Neutral; emotionType = "Neutral";
                }
                if (emotion.Sadness > emotionValue)
                {
                    emotionValue = emotion.Sadness; emotionType = "Sadness";
                }
                if (emotion.Surprise > emotionValue)
                {
                    emotionType = "Surprise";
                }
                attributes.Emotion = emotionType;

                // Get more face attributes
                attributes.Exposure = face.value.FaceAttributes.Exposure.ExposureLevel.ToString();

                attributes.FacialHair = $"{ string.Format("{0}", face.value.FaceAttributes.FacialHair.Moustache + face.value.FaceAttributes.FacialHair.Beard + face.value.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No")}";
                attributes.Gender     = face.value.FaceAttributes.Gender.ToString();
                attributes.Glasses    = face.value.FaceAttributes.Glasses.ToString();

                // Get hair color
                Hair   hair  = face.value.FaceAttributes.Hair;
                string color = null;
                if (hair.HairColor.Count == 0)
                {
                    if (hair.Invisible)
                    {
                        color = "Invisible";
                    }
                    else
                    {
                        color = "Bald";
                    }
                }
                HairColorType returnColor   = HairColorType.Unknown;
                double        maxConfidence = 0.0f;
                foreach (HairColor hairColor in hair.HairColor)
                {
                    if (hairColor.Confidence <= maxConfidence)
                    {
                        continue;
                    }
                    maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
                }

                attributes.Hair = color;

                // Get more attributes
                attributes.HeadPose.Pitch = Math.Round(face.value.FaceAttributes.HeadPose.Pitch, 2);
                attributes.HeadPose.Roll  = Math.Round(face.value.FaceAttributes.HeadPose.Roll, 2);
                attributes.HeadPose.Yaw   = Math.Round(face.value.FaceAttributes.HeadPose.Yaw, 2);

                attributes.Makeup = $"{string.Format("{0}", (face.value.FaceAttributes.Makeup.EyeMakeup || face.value.FaceAttributes.Makeup.LipMakeup) ? "Yes" : "No")}";
                attributes.Noise  = face.value.FaceAttributes.Noise.NoiseLevel.ToString();

                attributes.Occlusion.EyeOccluded      = face.value.FaceAttributes.Occlusion.EyeOccluded ? true : false;
                attributes.Occlusion.ForeheadOccluded = face.value.FaceAttributes.Occlusion.ForeheadOccluded ? true : false;
                attributes.Occlusion.MouthOccluded    = face.value.FaceAttributes.Occlusion.MouthOccluded ? true : false;

                attributes.Smile = face.value.FaceAttributes.Smile.ToString();

                faceImage.Attributes.Add(attributes);
            }
            return(faceImage);
        }
Exemple #22
0
        public static string GetAttributeText(this DetectedFace face, string headerText = null, bool verbose = true)
        {
            var resultBuilder = new StringBuilder();

            if (headerText != null)
            {
                Append(resultBuilder, verbose, headerText);
            }

            // Get bounding box of the faces
            if (verbose)
            {
                Append(resultBuilder, verbose,
                       $"Rectangle(Left/Top/Width/Height) : {face.FaceRectangle.Left} {face.FaceRectangle.Top} {face.FaceRectangle.Width} {face.FaceRectangle.Height}");
            }

            // Get accessories of the faces
            List <Accessory> accessoriesList = (List <Accessory>)face.FaceAttributes.Accessories;
            int    count = face.FaceAttributes.Accessories.Count;
            string accessory; string[] accessoryArray = new string[count];

            if (count == 0)
            {
                accessory = "NoAccessories";
            }
            else
            {
                for (int i = 0; i < count; ++i)
                {
                    accessoryArray[i] = accessoriesList[i].Type.ToString();
                }
                accessory = string.Join(",", accessoryArray);
            }

            if (verbose)
            {
                Append(resultBuilder, verbose, $"Accessories : {accessory}");
            }

            // Get face other attributes
            Append(resultBuilder, verbose, $"Age : {face.FaceAttributes.Age}");
            if (verbose)
            {
                Append(resultBuilder, verbose, $"Blur : {face.FaceAttributes.Blur.BlurLevel}");
            }

            // Get emotion on the face
            string  emotionType  = string.Empty;
            double  emotionValue = 0.0;
            Emotion emotion      = face.FaceAttributes.Emotion;

            if (emotion.Anger > emotionValue)
            {
                emotionValue = emotion.Anger; emotionType = "Anger";
            }
            if (emotion.Contempt > emotionValue)
            {
                emotionValue = emotion.Contempt; emotionType = "Contempt";
            }
            if (emotion.Disgust > emotionValue)
            {
                emotionValue = emotion.Disgust; emotionType = "Disgust";
            }
            if (emotion.Fear > emotionValue)
            {
                emotionValue = emotion.Fear; emotionType = "Fear";
            }
            if (emotion.Happiness > emotionValue)
            {
                emotionValue = emotion.Happiness; emotionType = "Happiness";
            }
            if (emotion.Neutral > emotionValue)
            {
                emotionValue = emotion.Neutral; emotionType = "Neutral";
            }
            if (emotion.Sadness > emotionValue)
            {
                emotionValue = emotion.Sadness; emotionType = "Sadness";
            }
            if (emotion.Surprise > emotionValue)
            {
                emotionType = "Surprise";
            }
            Append(resultBuilder, verbose, $"Emotion : {emotionType}");

            // Get more face attributes
            if (verbose)
            {
                Append(resultBuilder, verbose, $"Exposure : {face.FaceAttributes.Exposure.ExposureLevel}");
            }

            Append(resultBuilder, verbose, $"FacialHair : {string.Format("{0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No")}");
            Append(resultBuilder, verbose, $"Gender : {face.FaceAttributes.Gender}");
            Append(resultBuilder, verbose, $"Glasses : {face.FaceAttributes.Glasses}");

            // Get hair color
            var    hair  = face.FaceAttributes.Hair;
            string color = null;

            if (hair.HairColor.Count == 0)
            {
                if (hair.Invisible)
                {
                    color = "Invisible";
                }
                else
                {
                    color = "Bald";
                }
            }
            HairColorType returnColor   = HairColorType.Unknown;
            double        maxConfidence = 0.0f;

            foreach (HairColor hairColor in hair.HairColor)
            {
                if (hairColor.Confidence <= maxConfidence)
                {
                    continue;
                }
                maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
            }
            resultBuilder.AppendLine($"Hair : {color}");

            // Get more attributes
            if (verbose)
            {
                Append(resultBuilder, verbose, $"HeadPose : {string.Format("Pitch: {0}, Roll: {1}, Yaw: {2}", Math.Round(face.FaceAttributes.HeadPose.Pitch, 2), Math.Round(face.FaceAttributes.HeadPose.Roll, 2), Math.Round(face.FaceAttributes.HeadPose.Yaw, 2))}");
                Append(resultBuilder, verbose, $"Makeup : {string.Format("{0}", (face.FaceAttributes.Makeup.EyeMakeup || face.FaceAttributes.Makeup.LipMakeup) ? "Yes" : "No")}");
                Append(resultBuilder, verbose, $"Noise : {face.FaceAttributes.Noise.NoiseLevel}");
                Append(resultBuilder, verbose, $"Occlusion : {string.Format("EyeOccluded: {0}", face.FaceAttributes.Occlusion.EyeOccluded ? "Yes" : "No")} " +
                       $" {string.Format("ForeheadOccluded: {0}", face.FaceAttributes.Occlusion.ForeheadOccluded ? "Yes" : "No")}   {string.Format("MouthOccluded: {0}", face.FaceAttributes.Occlusion.MouthOccluded ? "Yes" : "No")}");
                Append(resultBuilder, verbose, $"Smile : {face.FaceAttributes.Smile}");
            }

            return(resultBuilder.ToString());
        }
 public Player(string firstName, string lastName, int id, int age, int heigth, int weigth, RaceType raceType,
               ReligionType religionType, EyeColorType eyeColorType, FaceShapeType faceShape, HairColorType hairColor, BodyShapeType bodyShape,
               int playerNumber, PlayerPositionType playerPosition, PlayerType playerType, int capability)
     : base(firstName, lastName, id, age, heigth, weigth, raceType, religionType, eyeColorType, faceShape, hairColor, bodyShape)
 {
     this.PlayerNumber   = playerNumber;
     this.PlayerType     = playerType;
     this.PlayerPosition = playerPosition;
     this.Capability     = capability;
 }
        public static async Task DetectAllFaceAtributes(IFaceClient client, string url, string recognitionModel)
        {
            Console.WriteLine("========DETECT FACES========");
            Console.WriteLine();

            // Create a list of images
            List <string> imageFileNames = Directory.GetFiles("C:\\imagenes", "*.*", SearchOption.AllDirectories).ToList();

            imageFileNames = imageFileNames.Where(item => item.Contains("WebCam")).ToList();

            if (imageFileNames.Count >= 10)
            {
                // Intente tirar directamentela excepción, pero no te muestra el message en la consola....
                string message = "Límite de imágenes excedido, no se puede mandar más de 10 imágenes";
                Console.WriteLine("ERROR: " + message);
                throw new Exception(message);
            }

            foreach (var imageFileName in imageFileNames)
            {
                IList <DetectedFace> detectedFaces;

                // Detect faces with all attributes from image url.
                FileStream file = new FileStream(imageFileName, FileMode.Open);
                detectedFaces = await client.Face.DetectWithStreamAsync(
                    file,
                    returnFaceLandmarks : true,
                    returnFaceAttributes : new List <FaceAttributeType> {
                    FaceAttributeType.Accessories, FaceAttributeType.Age,
                    FaceAttributeType.Blur, FaceAttributeType.Emotion, FaceAttributeType.Exposure, FaceAttributeType.FacialHair,
                    FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair, FaceAttributeType.HeadPose,
                    FaceAttributeType.Makeup, FaceAttributeType.Noise, FaceAttributeType.Occlusion, FaceAttributeType.Smile,
                },
                    recognitionModel : recognitionModel);

                Console.WriteLine($"{detectedFaces.Count} face(s) detected from image `{imageFileName}`.");

                // Parse and print all attributes of each detected face.
                foreach (var face in detectedFaces)
                {
                    Console.WriteLine($"Face attributes for {imageFileName}:");

                    // Get bounding box of the faces
                    Console.WriteLine($"Rectangle(Left/Top/Width/Height) : {face.FaceRectangle.Left} {face.FaceRectangle.Top} {face.FaceRectangle.Width} {face.FaceRectangle.Height}");

                    // Get accessories of the faces
                    List <Accessory> accessoriesList = (List <Accessory>)face.FaceAttributes.Accessories;
                    int    count = face.FaceAttributes.Accessories.Count;
                    string accessory; string[] accessoryArray = new string[count];
                    if (count == 0)
                    {
                        accessory = "NoAccessories";
                    }
                    else
                    {
                        for (int i = 0; i < count; ++i)
                        {
                            accessoryArray[i] = accessoriesList[i].Type.ToString();
                        }
                        accessory = string.Join(",", accessoryArray);
                    }
                    Console.WriteLine($"Accessories : {accessory}");

                    // Get face other attributes
                    Console.WriteLine($"Age : {face.FaceAttributes.Age}");
                    Console.WriteLine($"Blur : {face.FaceAttributes.Blur.BlurLevel}");

                    // Get emotion on the face
                    string  emotionType  = string.Empty;
                    double  emotionValue = 0.0;
                    Emotion emotion      = face.FaceAttributes.Emotion;
                    if (emotion.Anger > emotionValue)
                    {
                        emotionValue = emotion.Anger; emotionType = "Anger";
                    }
                    if (emotion.Contempt > emotionValue)
                    {
                        emotionValue = emotion.Contempt; emotionType = "Contempt";
                    }
                    if (emotion.Disgust > emotionValue)
                    {
                        emotionValue = emotion.Disgust; emotionType = "Disgust";
                    }
                    if (emotion.Fear > emotionValue)
                    {
                        emotionValue = emotion.Fear; emotionType = "Fear";
                    }
                    if (emotion.Happiness > emotionValue)
                    {
                        emotionValue = emotion.Happiness; emotionType = "Happiness";
                    }
                    if (emotion.Neutral > emotionValue)
                    {
                        emotionValue = emotion.Neutral; emotionType = "Neutral";
                    }
                    if (emotion.Sadness > emotionValue)
                    {
                        emotionValue = emotion.Sadness; emotionType = "Sadness";
                    }
                    if (emotion.Surprise > emotionValue)
                    {
                        emotionType = "Surprise";
                    }
                    Console.WriteLine($"Emotion : {emotionType}");

                    // Get more face attributes
                    Console.WriteLine($"Exposure : {face.FaceAttributes.Exposure.ExposureLevel}");
                    Console.WriteLine($"FacialHair : {string.Format("{0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No")}");
                    Console.WriteLine($"Gender : {face.FaceAttributes.Gender}");
                    Console.WriteLine($"Glasses : {face.FaceAttributes.Glasses}");

                    // Get hair color
                    Hair   hair  = face.FaceAttributes.Hair;
                    string color = null;
                    if (hair.HairColor.Count == 0)
                    {
                        if (hair.Invisible)
                        {
                            color = "Invisible";
                        }
                        else
                        {
                            color = "Bald";
                        }
                    }
                    HairColorType returnColor   = HairColorType.Unknown;
                    double        maxConfidence = 0.0f;
                    foreach (HairColor hairColor in hair.HairColor)
                    {
                        if (hairColor.Confidence <= maxConfidence)
                        {
                            continue;
                        }
                        maxConfidence = hairColor.Confidence; returnColor = hairColor.Color; color = returnColor.ToString();
                    }
                    Console.WriteLine($"Hair : {color}");

                    // Get more attributes
                    Console.WriteLine($"HeadPose : {string.Format("Pitch: {0}, Roll: {1}, Yaw: {2}", Math.Round(face.FaceAttributes.HeadPose.Pitch, 2), Math.Round(face.FaceAttributes.HeadPose.Roll, 2), Math.Round(face.FaceAttributes.HeadPose.Yaw, 2))}");
                    Console.WriteLine($"Makeup : {string.Format("{0}", (face.FaceAttributes.Makeup.EyeMakeup || face.FaceAttributes.Makeup.LipMakeup) ? "Yes" : "No")}");
                    Console.WriteLine($"Noise : {face.FaceAttributes.Noise.NoiseLevel}");
                    Console.WriteLine($"Occlusion : {string.Format("EyeOccluded: {0}", face.FaceAttributes.Occlusion.EyeOccluded ? "Yes" : "No")} " +
                                      $" {string.Format("ForeheadOccluded: {0}", face.FaceAttributes.Occlusion.ForeheadOccluded ? "Yes" : "No")}   {string.Format("MouthOccluded: {0}", face.FaceAttributes.Occlusion.MouthOccluded ? "Yes" : "No")}");
                    Console.WriteLine($"Smile : {face.FaceAttributes.Smile}");
                    Console.WriteLine();
                }
            }
        }