public static void InitializeFaceRecognizer() { _faceRecognizer?.Dispose(); _faceRecognizer = new LBPHFaceRecognizer(Properties.Settings.Default.RecognitionRadius, Properties.Settings.Default.RecognitionNeighbours, 8, 8, Properties.Settings.Default.RecognitionThreshold); if (!File.Exists(Properties.Settings.Default.RecognitionTrainFile)) { try { Directory.CreateDirectory(Path.GetDirectoryName(Properties.Settings.Default.RecognitionTrainFile)); File.Create(Properties.Settings.Default.RecognitionTrainFile).Close(); } catch (Exception ex) { Debug.WriteLine("Could not create recognition file: " + ex); } } else { try { _faceRecognizer.Load(Properties.Settings.Default.RecognitionTrainFile); _trained = true; } catch (Exception ex) { Debug.WriteLine("Could not load recognition file: " + ex); } } }
public TrainData() { InitializeComponent(); fr1 = new EigenFaceRecognizer(80, double.PositiveInfinity);//The recognitoion object fr2 = new FisherFaceRecognizer(-1, 3100);//The recognitoion object fr3 = new LBPHFaceRecognizer(1, 8, 8, 8, 100);//50 cascade = new CascadeClassifier("haarcascade_frontalface_default.xml"); //this file contains the training }
public void dispose() { // Nullify all initialized variables recognizer = null; trainingImages = null; namesList = null; namesListId = null; error = null; // Garbage collect everything GC.Collect(); }
public Form1() { InitializeComponent(); recognizer = new LBPHFaceRecognizer(1, 8, 8, 9, 65); classifier = new CascadeClassifier(haarcascade); GPU_classifier = new GpuCascadeClassifier(haarcascade_cuda); font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_TRIPLEX, 0.5, 0.5); if (File.Exists(@"traningdata.xml")) { recognizer.Load(@"traningdata.xml"); } else { foreach (var file in Directory.GetFiles(Application.StartupPath + @"\Traning Faces\")) { try { temp = new Image<Gray, Byte>(file); } catch { continue; } temp._EqualizeHist(); var detectedFaces = classifier.DetectMultiScale(temp, 1.1, 15, new Size(24, 24), Size.Empty); if (detectedFaces.Length == 0) { continue; } temp.ROI = detectedFaces[0]; temp = temp.Copy(); temp = temp.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); imagesList.Add(temp); imagesLabels.Add(Path.GetFileNameWithoutExtension(file)); } for (int i = 0; i < imagesList.Count; i++) { imagesLabels_indices.Add(i); } try { recognizer.Train(imagesList.ToArray(), imagesLabels_indices.ToArray()); } catch (Exception ex) { MessageBox.Show(ex.Message); Environment.Exit(0); } } }
public void loadRecognizer(string fileName) { // Reinitialize the recognizer and load in the file recognizer = new LBPHFaceRecognizer(1, 8, 8, 9, 100); recognizer.Load(fileName); string directory = Path.GetDirectoryName(fileName); // Purge all existing name labels namesList.Clear(); if (File.Exists(directory + "/TrainedLabels.xml")) { // Read the file into memory FileStream fileStream = File.OpenRead(directory + "/TrainedLabels.xml"); long fileLength = fileStream.Length; byte[] xmlBytes = new byte[fileLength]; fileStream.Read(xmlBytes, 0, (int)fileLength); fileStream.Close(); MemoryStream xmlStream = new MemoryStream(xmlBytes); using (XmlReader xmlReader = XmlTextReader.Create(xmlStream)) { while (xmlReader.Read()) { if (xmlReader.IsStartElement()) { switch (xmlReader.Name) { case "NAME": if (xmlReader.Read()) { namesList.Add(xmlReader.Value.Trim()); } break; } } } } } trainStatus = true; }
private bool LoadTrainingData() { mydb = new DBConn(); allname = mydb.getLabelList(); trainingImages = mydb.getTrainedImageList(); int[] temp = Enumerable.Range(0,(allname.Count)).ToArray(); if (mydb.getImageCount() > 0) { if (trainingImages.Length != 0) { //set round and ... //termCrit = new MCvTermCriteria(mydb.getImageCount(), 0.001); //Eigen face recognizer recognizer = new FisherFaceRecognizer(0,3200);//4000 recognizer.Train(trainingImages, temp); return true; } else { return false; } } else { return false; } }
public void Dispose() { recognizer = null; trainingImages = null; allname = null; Error = null; GC.Collect(); }
/// <summary> /// Loads the traing data given a (string) folder location /// </summary> /// <param name="Folder_location"></param> /// <returns></returns> private bool LoadTrainingData(string Folder_location) { if (File.Exists(Folder_location + "\\TrainedLabels.xml")) { try { //message_bar.Text = ""; Names_List.Clear(); Names_List_ID.Clear(); trainingImages.Clear(); FileStream filestream = File.OpenRead(Folder_location + "\\TrainedLabels.xml"); long filelength = filestream.Length; byte[] xmlBytes = new byte[filelength]; filestream.Read(xmlBytes, 0, (int)filelength); filestream.Close(); MemoryStream xmlStream = new MemoryStream(xmlBytes); using (XmlReader xmlreader = XmlTextReader.Create(xmlStream)) { while (xmlreader.Read()) { if (xmlreader.IsStartElement()) { switch (xmlreader.Name) { case "NAME": if (xmlreader.Read()) { Names_List_ID.Add(Names_List.Count); //0, 1, 2, 3.... Names_List.Add(xmlreader.Value.Trim()); NumLabels += 1; } break; case "FILE": if (xmlreader.Read()) { //PROBLEM HERE IF TRAININGG MOVED trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "\\TrainedFaces\\" + xmlreader.Value.Trim())); } break; } } } } ContTrain = NumLabels; if (trainingImages.ToArray().Length != 0) { //Eigen face recognizer //Parameters: // num_components – The number of components (read: Eigenfaces) kept for this Prinicpal // Component Analysis. As a hint: There’s no rule how many components (read: Eigenfaces) // should be kept for good reconstruction capabilities. It is based on your input data, // so experiment with the number. Keeping 80 components should almost always be sufficient. // // threshold – The threshold applied in the prediciton. This still has issues as it work inversly to LBH and Fisher Methods. // if you use 0.0 recognizer.Predict will always return -1 or unknown if you use 5000 for example unknow won't be reconised. // As in previous versions I ignore the built in threhold methods and allow a match to be found i.e. double.PositiveInfinity // and then use the eigen distance threshold that is return to elliminate unknowns. // //NOTE: The following causes the confusion, sinc two rules are used. //-------------------------------------------------------------------------------------------------------------------------------------- //Eigen Uses // 0 - X = unknown // > X = Recognised // //Fisher and LBPH Use // 0 - X = Recognised // > X = Unknown // // Where X = Threshold value switch (Recognizer_Type) { case ("EMGU.CV.LBPHFaceRecognizer"): recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100);//50 break; case ("EMGU.CV.FisherFaceRecognizer"): recognizer = new FisherFaceRecognizer(0, 3500);//4000 break; case ("EMGU.CV.EigenFaceRecognizer"): default: recognizer = new EigenFaceRecognizer(80, double.PositiveInfinity); break; } recognizer.Train(trainingImages.ToArray(), Names_List_ID.ToArray()); // Recognizer_Type = recognizer.GetType(); // string v = recognizer.ToString(); //EMGU.CV.FisherFaceRecognizer || EMGU.CV.EigenFaceRecognizer || EMGU.CV.LBPHFaceRecognizer return true; } else return false; } catch (Exception ex) { Error = ex.ToString(); return false; } } else return false; }
/// <summary> /// Dispose of Class call Garbage Collector /// </summary> public void Dispose() { recognizer = null; trainingImages = null; Names_List = null; Error = null; GC.Collect(); }
/// <summary> /// Loads the trained Eigen Recogniser from specified location /// </summary> /// <param name="filename"></param> public void Load_Eigen_Recogniser(string filename) { //Lets get the recogniser type from the file extension string ext = Path.GetExtension(filename); switch (ext) { case (".LBPH"): Recognizer_Type = "EMGU.CV.LBPHFaceRecognizer"; recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100);//50 break; case (".FFR"): Recognizer_Type = "EMGU.CV.FisherFaceRecognizer"; recognizer = new FisherFaceRecognizer(0, 3500);//4000 break; case (".EFR"): Recognizer_Type = "EMGU.CV.EigenFaceRecognizer"; recognizer = new EigenFaceRecognizer(80, double.PositiveInfinity); break; } //introduce error checking recognizer.Load(filename); //Now load the labels string direct = Path.GetDirectoryName(filename); Names_List.Clear(); if (File.Exists(direct + "/Labels.xml")) { FileStream filestream = File.OpenRead(direct + "/Labels.xml"); long filelength = filestream.Length; byte[] xmlBytes = new byte[filelength]; filestream.Read(xmlBytes, 0, (int)filelength); filestream.Close(); MemoryStream xmlStream = new MemoryStream(xmlBytes); using (XmlReader xmlreader = XmlTextReader.Create(xmlStream)) { while (xmlreader.Read()) { if (xmlreader.IsStartElement()) { switch (xmlreader.Name) { case "NAME": if (xmlreader.Read()) { Names_List.Add(xmlreader.Value.Trim()); } break; } } } } ContTrain = NumLabels; } _IsTrained = true; }
private void LoadRecognizer() { switch (_faceRecognitionType) { case FaceRecognitionType.LBPHFaceRecognizer: _faceRecognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100); break; case FaceRecognitionType.FisherFaceRecognizer: _faceRecognizer = new FisherFaceRecognizer(0, 3500); break; case FaceRecognitionType.EigenFaceRecognizer: _faceRecognizer = new EigenFaceRecognizer(80, double.PositiveInfinity); break; } }
public FaceRecognizerService() { _faceRecognizer = new LBPHFaceRecognizer(2, 8, 6, 6, 50); _genderFaceRecognizer = new FisherFaceRecognizer(); //_genderFaceRecognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100); }
private void InitEigenFaceRecognizer() { lock (this) { if (Recognizer != null) { return; } Threshold = ConfigManager.GetInstance().Find("face.Eigen_Threshold", 0); if (Threshold > 0) { Recognizer = new EigenFaceRecognizer(80, double.PositiveInfinity); } Threshold = ConfigManager.GetInstance().Find("face.Fisher_Threshold", 0); if (Threshold > 0) { Recognizer = new FisherFaceRecognizer(0, 3500); } Threshold = ConfigManager.GetInstance().Find("face.LBP_Threshold", 0); if (Threshold > 0) { Recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100); } if (trainedImages.Count <= 0) { return; } // Train Images and Labels Recognizer.Train(trainedImages.ToArray(), trainedLabelIds.ToArray()); trained = true; } }
private void ResetEigenObjectRecognizer(){ Recognizer = null; trained = false; InitEigenFaceRecognizer(); }
private bool loadTrainingData(string folderLocation) { if (File.Exists(folderLocation + "/TrainedLabels.xml")) { try { // Purge all existing data namesList.Clear(); trainingImages.Clear(); // Read the XML file into memory FileStream fileStream = File.OpenRead(folderLocation + "/TrainedLabels.xml"); long fileLength = fileStream.Length; byte[] xmlBytes = new byte[fileLength]; fileStream.Read(xmlBytes, 0, (int)fileLength); fileStream.Close(); MemoryStream xmlStream = new MemoryStream(xmlBytes); using (XmlReader xmlReader = XmlTextReader.Create(xmlStream)) { while (xmlReader.Read()) { if (xmlReader.IsStartElement()) { switch (xmlReader.Name) { case "NAME": if (xmlReader.Read()) { // Add the name to the data set namesList.Add(xmlReader.Value.Trim()); // Store an identifier. This is merely the position in namesList namesListId.Add((namesList.Count)); // Increment the counter for entries in the data set numLabels += 1; } break; case "FILE": if (xmlReader.Read()) { // Add the image to the data set trainingImages.Add(new Image<Gray, Byte>(System.AppDomain.CurrentDomain.BaseDirectory + "/TrainedFaces/" + xmlReader.Value.Trim())); } break; } } } } if (trainingImages.ToArray().Length != 0) { recognizer = new LBPHFaceRecognizer(1, 8, 8, 9, 100); recognizer.Train(trainingImages.ToArray(), namesListId.ToArray()); return true; } else { return false; } } catch (Exception ex) { error = ex.ToString(); return false; } } else { return false; } }