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(); } }
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"); }