private void Timer_Tick(object sender, EventArgs e) { Frame = Capture.QueryFrame(); var imageFrame = Frame.ToImage <Gray, byte>(); if (TimerCounter < TimeLimit) { TimerCounter++; if (imageFrame != null) { var faces = FaceDetection.DetectMultiScale(imageFrame, 1.3, 5); if (faces.Length > 0) { var processImage = imageFrame.Copy(faces[0]).Resize(ProcessImageWidth, ProcessImageHeight, Inter.Cubic); Faces.Add(processImage); Labels.Add(Convert.ToInt32(txtUserId.Text)); ScanCounter++; rtbOutPut.AppendText($"{ScanCounter} Success Scan Taken... {Environment.NewLine}"); rtbOutPut.ScrollToCaret(); } } } else { var trainFaces = ConvertImageToMat(Faces); foreach (var face in trainFaces) { DataStoreAccess.SaveFace(Convert.ToInt32(txtUserId.Text), txtUserName.Text, ConvertImageToBytes(face.Bitmap)); } EigenFaceRecognizer.Train(trainFaces.ToArray(), Labels.ToArray()); EigenFaceRecognizer.Write(YMLPath); Timer.Stop(); TimerCounter = 0; btnPredict.Enabled = true; rtbOutPut.AppendText($"Training Completed! {Environment.NewLine}"); MessageBox.Show("Training Completed!"); } }
public Form1() { InitializeComponent(); EigenFaceRecognizer = new EigenFaceRecognizer(4, 800); DataStoreAccess = new DataStoreAccess(ConnectionString); FaceDetection = new CascadeClassifier(Path.GetFullPath($"{AppDomain.CurrentDomain.BaseDirectory}haarcascade_frontalface_default.xml")); Frame = new Mat(); Faces = new List <Image <Gray, byte> >(); Labels = new List <int>(); if (File.Exists(YMLPath)) { EigenFaceRecognizer.Read(YMLPath); } var allFaces = DataStoreAccess.CallFaces("ALL_USERS"); if (allFaces != null) { for (int i = 0; i < allFaces.Count; i++) { Stream stream = new MemoryStream(); stream.Write(allFaces[i].Image, 0, allFaces[i].Image.Length); var faceImage = new Image <Gray, byte>(new Bitmap(stream)); Faces.Add(faceImage); Labels.Add(allFaces[i].UserId); } EigenFaceRecognizer.Train(ConvertImageToMat(Faces).ToArray(), Labels.ToArray()); btnPredict.Enabled = true; MessageBox.Show("Training Completed!"); } else { MessageBox.Show("Nothing to traing!"); } BeginCapture(); }