예제 #1
0
        private static void TestPerformanceBig()
        {
            //Khoi tao 9 bo face recognizer
            Console.WriteLine("We will load a dumb training data with 600 images.");
            Console.Write("Press Enter to begin: ");
            Console.ReadLine();
            FaceRecognizers = new List <FaceRecognizer>();
            FaceRecognizers.Add(new EigenFaceRecognizer(80, 2000));
            FaceRecognizers.Add(new EigenFaceRecognizer(80, 3500));
            FaceRecognizers.Add(new EigenFaceRecognizer(80, 5000));

            FaceRecognizers.Add(new FisherFaceRecognizer(80, 500));
            FaceRecognizers.Add(new FisherFaceRecognizer(80, 1000));
            FaceRecognizers.Add(new FisherFaceRecognizer(80, 1500));

            FaceRecognizers.Add(new LBPHFaceRecognizer(1, 8, 8, 9, 50));
            FaceRecognizers.Add(new LBPHFaceRecognizer(1, 8, 8, 9, 100));
            FaceRecognizers.Add(new LBPHFaceRecognizer(1, 8, 8, 9, 150));


            String TrainingDataFolderPath = @"C:\Users\Hoang\Documents\Visual Studio 2010\Projects\RollSystemMobile\FaceRecAutomationTesting\Training Datas\DumbTrainingData";
            //Bat dau tinh thoi gian add 600 tam hinh vao bo nho
            DateTime Start = DateTime.Now;

            List <Image <Gray, byte> > ImageList = new List <Image <Gray, byte> >();
            List <int> IDList = new List <int>();

            var FilePaths = Directory.GetFiles(TrainingDataFolderPath, "*.jpg", SearchOption.TopDirectoryOnly);

            foreach (var FilePath in FilePaths)
            {
                Image <Gray, byte> Image = new Image <Gray, byte>(FilePath);
                Image._EqualizeHist();
                ImageList.Add(Image);
                Console.WriteLine("\tLoad Images: " + FilePath);
                int ID = int.Parse(Path.GetFileNameWithoutExtension(FilePath)) / 20 + 1;
                IDList.Add(ID);
            }
            TimeSpan TimeDiff = DateTime.Now - Start;

            Console.WriteLine("Time to load 600 images to memory is: " + TimeDiff.TotalMilliseconds / 1000 + " seconds");


            Console.WriteLine("Now we will begin to train our face recognizer");
            Console.Write("Press Enter to continue: ");
            Console.ReadLine();
            Start = DateTime.Now;
            Image <Gray, byte>[] ImageArray = ImageList.ToArray();
            int[] IDArray = IDList.ToArray();
            int   i       = 1;

            foreach (var FaceRec in FaceRecognizers)
            {
                FaceRec.Train(ImageArray, IDArray);
                Console.WriteLine(i + " Recognizers Trained.");
                i++;
            }
            TimeDiff = DateTime.Now - Start;
            Console.WriteLine("Time to trains 9 recognizer is: " + TimeDiff.TotalMilliseconds / 1000 + " seconds");

            Console.WriteLine("Now we will test the recognizer performance. With a folder of 400 faces");
            Console.Write("Press Enter to continue: ");
            Console.ReadLine();

            String TestDataFolderPath = @"C:\Users\Hoang\Documents\Visual Studio 2010\Projects\RollSystemMobile\FaceRecAutomationTesting\TestData\Dump TestData";

            Console.WriteLine("Creating the list of test image");
            List <Image <Gray, byte> > TestImageList = new List <Image <Gray, byte> >();

            foreach (var FilePath in Directory.GetFiles(TestDataFolderPath, "*.jpg", SearchOption.TopDirectoryOnly))
            {
                Image <Gray, byte> Image = new Image <Gray, byte>(FilePath);
                Image._EqualizeHist();
                TestImageList.Add(Image);
            }

            foreach (var FaceRec in FaceRecognizers)
            {
                Console.WriteLine("Begin test with face recognizer: " + FaceRec.GetType().ToString());
                Start = DateTime.Now;
                i     = 1;
                foreach (var Image in TestImageList)
                {
                    FaceRec.Predict(Image);
                    Console.WriteLine("\tRecognized " + i + " images.");
                    i++;
                }
                TimeDiff = DateTime.Now - Start;
                Console.WriteLine("Time to recognize 200 images is: " + TimeDiff.TotalMilliseconds / 1000 + " seconds");
                Console.Write("Press Enter to continue: ");
                Console.ReadLine();
            }
        }
예제 #2
0
        private static void TestGenderRecognitionAccuracy(int NumberOfTrainingImage)
        {
            //Khoi tao 9 bo face recognizer
            FaceRecognizers = new List <FaceRecognizer>();
            FaceRecognizers.Add(new EigenFaceRecognizer(80, 2000));
            FaceRecognizers.Add(new EigenFaceRecognizer(80, 3500));
            //Can't recognize unknown
            FaceRecognizers.Add(new EigenFaceRecognizer(80, 8000));

            FaceRecognizers.Add(new FisherFaceRecognizer(80, 500));
            FaceRecognizers.Add(new FisherFaceRecognizer(80, 1000));
            //Can't recognize unknown
            FaceRecognizers.Add(new FisherFaceRecognizer(80, 2500));

            FaceRecognizers.Add(new LBPHFaceRecognizer(1, 8, 8, 9, 50));
            FaceRecognizers.Add(new LBPHFaceRecognizer(1, 8, 8, 9, 100));
            //Can't recognize unknown
            FaceRecognizers.Add(new LBPHFaceRecognizer(1, 8, 8, 9, 250));

            List <TestSingleResult> Results = new List <TestSingleResult>();


            Console.WriteLine("This time we will check the accuracy of the 3 algorithm.");
            Console.Write("Press Enter to continue: ");
            Console.ReadLine();
            NameList = new string[] { "Nam", "Nu" }.ToList();

            String TrainingDataPath = @"C:\Users\Hoang\Documents\Visual Studio 2010\Projects\RollSystemMobile\FaceRecAutomationTesting\Gender Recognition\Training Data";

            List <Image <Gray, byte> > TrainingImageList = new List <Image <Gray, byte> >();
            List <int> IDList = new List <int>();

            Console.WriteLine("Begin Training Face Recognizer");
            foreach (var FilePath in Directory.GetFiles(TrainingDataPath, "*.jpg", SearchOption.TopDirectoryOnly))
            {
                foreach (var PersonName in NameList)
                {
                    String ImageName = GetResult(FilePath);
                    int    ID        = NameList.IndexOf(ImageName);
                    if (ID != -1 && ImageName.Equals(PersonName) && IDList.Count(num => num == ID) < NumberOfTrainingImage)
                    {
                        Image <Gray, byte> Image = new Image <Gray, byte>(FilePath);
                        Image._EqualizeHist();
                        TrainingImageList.Add(Image);

                        IDList.Add(ID);
                    }
                }
            }

            foreach (var FaceRec in FaceRecognizers)
            {
                FaceRec.Train(TrainingImageList.ToArray(), IDList.ToArray());
            }

            Console.WriteLine(TrainingImageList.Count + " images loaded.");
            Console.Write("Press Enter to continue: ");
            Console.ReadLine();

            Console.WriteLine("Begin Testing Recognition:");
            String TestDataPath    = @"C:\Users\Hoang\Documents\Visual Studio 2010\Projects\RollSystemMobile\FaceRecAutomationTesting\Gender Recognition\Test Data";
            int    imageRecognized = 1;

            foreach (var FilePath in Directory.GetFiles(TestDataPath, "*.jpg", SearchOption.TopDirectoryOnly))
            {
                //Load hinh tu duong dan
                Image <Gray, byte> Face = new Image <Gray, byte>(FilePath);
                Face._EqualizeHist();

                //Lay result tu ten file
                TestSingleResult TestResult = new TestSingleResult();
                TestResult.Result = GetResult(FilePath);

                //Lay 9 ket qua tu eigen face, set vao object
                //Lay 9 properties cua result, tuong ung voi 9 bo face recognizer
                var Properties = TestResult.GetType().GetProperties();
                for (int i = 0; i < FaceRecognizers.Count; i++)
                {
                    FaceRecognizer.PredictionResult PR = FaceRecognizers.ElementAt(i).Predict(Face);
                    String NameFound = PR.Label == -1 ? "Unknown" : NameList.ElementAt(PR.Label);
                    Properties[i].SetValue(TestResult, NameFound, null);
                }
                //Dua result da tim dc vao danh sach, sau nay tinh tiep
                Results.Add(TestResult);
                Console.WriteLine(imageRecognized + " images recognized");
                imageRecognized++;
            }

            Console.Write("Completed. Enter path to export report: ");
            String ReportPath = Console.ReadLine();

            String MixedFilePath     = ReportPath + "Mixed.txt";
            String MixedResultString = GetResultString(Results);

            System.IO.File.WriteAllText(MixedFilePath, MixedResultString, Encoding.UTF8);

            String KnownFilePath     = ReportPath + "Known.txt";
            String KnownResultString = GetResultString(Results.Where(result => !result.Result.Equals("Unknown")).ToList());

            System.IO.File.WriteAllText(KnownFilePath, KnownResultString, Encoding.UTF8);

            String UnknownFilePath     = ReportPath + "Unknown.txt";
            String UnknownResultString = GetResultString(Results.Where(result => result.Result.Equals("Unknown")).ToList());

            System.IO.File.WriteAllText(UnknownFilePath, UnknownResultString, Encoding.UTF8);
            Console.Write("Done");
        }