public static Image <Bgr, Byte> RecognizeImage(Image img) { if (img == null) { return(null); } using (var ImageFrame = new Image <Bgr, Byte>(new Bitmap(img))) { var _recognizerEngine = new RecognizerEngine(_databasePath, _trainerDataPath); _recognizerEngine.TrainRecognizer(); if (ImageFrame == null) { return(null); } var grayframe = ImageFrame.Convert <Gray, byte>(); var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); //the actual face detection happens here //int faceIndex = 1; foreach (var face in faces) { ImageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); //the detected face(s) is highlighted here using a box that is drawn around it/them int predictedUserId; Bitmap map = ImageFrame.Copy(face).Bitmap; try { predictedUserId = _recognizerEngine.RecognizeUser(new Image <Gray, byte>(map)); //Debug.WriteLine(predictedUserId); } catch { predictedUserId = -1; } if (predictedUserId == -1) { continue; } else { //proceed to documents library IDataStoreAccess dataStore = new DataStoreAccess(_databasePath); var username = dataStore.GetUsername(predictedUserId); if (username != String.Empty) { ImageFrame.Draw(username, new Point(face.X, face.Y), Emgu.CV.CvEnum.FontFace.HersheyPlain, 2, new Bgr(Color.Red), 2); } } } return(ImageFrame.Copy()); } }
void ProcessFrame(object sender, EventArgs arg) { //_cascadeClassifier = new CascadeClassifier(Application.StartupPath + "/haarcascade_frontalface_default.xml"); using (ImageFrame = _capture.QueryFrame().ToImage <Bgr, byte>()) { if (ImageFrame != null) { var grayframe = ImageFrame.Convert <Gray, byte>(); var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); //the actual face detection happens here int faceIndex = 1; foreach (var face in faces) { ImageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); //the detected face(s) is highlighted here using a box that is drawn around it/them int predictedUserId; Bitmap map = ImageFrame.Copy(face).Bitmap; if (faceIndex == 1) { imageBox1.Image = new Image <Rgb, byte>(map); } else if (faceIndex == 2) { imageBox2.Image = new Image <Rgb, byte>(map); } else if (faceIndex == 3) { imageBox3.Image = new Image <Rgb, byte>(map); } faceIndex++; try { predictedUserId = _recognizerEngine.RecognizeUser(new Image <Gray, byte>(map)); //Debug.WriteLine(predictedUserId); } catch { predictedUserId = -1; } if (predictedUserId == -1) { saveAFace(face, map); } else { //proceed to documents library IDataStoreAccess dataStore = new DataStoreAccess(_databasePath); var username = dataStore.GetUsername(predictedUserId); if (username != String.Empty) { lblUsername.Text = String.Format("{1} Face Recognized as {0}", username, faces.Length); } else { saveAFace(face, map); //MessageBox.Show("No Username for this face, Kindly register this face", "Authentication Result", //MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } imgCamUser.Image = ImageFrame; //line 2 } //line 1 }
public static Image <Bgr, Byte> RecognizeImage(Image img, Label msgout = null) { if (img == null) { return(null); } using (var ImageFrame = new Image <Bgr, Byte>(new Bitmap(img))) { var _recognizerEngine = new RecognizerEngine(_databasePath, _trainerDataPath); _recognizerEngine.TrainRecognizer(); if (ImageFrame == null) { System.Windows.Forms.MessageBox.Show("Nenhuma imagem fornecida."); } var grayframe = ImageFrame.Convert <Gray, byte>(); var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); //the actual face detection happens here if (faces.Length == 0) { System.Windows.Forms.MessageBox.Show("Ops! Nenhum rosto foi identifcado.\n\nCarrege uma imagem com boa definição, tirada de ângulo frontal."); } //int faceIndex = 1; var face = faces[0]; ImageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); //the detected face(s) is highlighted here using a box that is drawn around it/them int predictedUserId; Bitmap map = ImageFrame.Copy(face).Bitmap; try { predictedUserId = _recognizerEngine.RecognizeUser(new Image <Gray, byte>(map)); //Debug.WriteLine(predictedUserId); } catch { predictedUserId = -1; } var username = ""; if (predictedUserId != -1) { //proceed to documents library IDataStoreAccess dataStore = new DataStoreAccess(_databasePath); username = dataStore.GetUsername(predictedUserId); } if (predictedUserId == -1 || username.Length == 0) { msgout.Text = "Atenção: usuário não identificado."; msgout.ForeColor = System.Drawing.Color.Red; } else { msgout.Text = "Olá, " + username + "! Seu acesso está autorizado. :)"; msgout.ForeColor = System.Drawing.Color.Blue; ImageFrame.Draw(username, new Point(face.X, face.Y), Emgu.CV.CvEnum.FontFace.HersheyPlain, 2, new Bgr(Color.Red), 2); } return(ImageFrame.Copy()); } }
public static string TrainImage(Image img, string preName = "") { if (img == null) { return(""); } using (var ImageFrame = new Image <Bgr, Byte>(new Bitmap(img))) { var _recognizerEngine = new RecognizerEngine(_databasePath, _trainerDataPath); if (ImageFrame == null) { return(null); } var grayframe = ImageFrame.Convert <Gray, byte>(); var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); //the actual face detection happens here //int faceIndex = 1; if (faces.Length == 0) { throw new Exception("no_faces"); } else if (faces.Length > 1) { throw new Exception("multiple_faces"); } List <string> names = new List <string>(); foreach (var face in faces) { ImageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); //the detected face(s) is highlighted here using a box that is drawn around it/them int predictedUserId; Bitmap map = ImageFrame.Copy(face).Bitmap; try { predictedUserId = _recognizerEngine.RecognizeUser(new Image <Gray, byte>(map)); //Debug.WriteLine(predictedUserId); } catch { predictedUserId = -1; } if (predictedUserId == -1) { string name = string.IsNullOrEmpty(preName) ? PromptForName("Identificação", "Identifique a pessoa", map) : preName; saveAFace(map, name); names.Add(name); } else { //proceed to documents library IDataStoreAccess dataStore = new DataStoreAccess(_databasePath); var username = dataStore.GetUsername(predictedUserId); if (username != String.Empty) { if (preName != username) { string name = PromptForName("Identificação", "Identifique a pessoa", map, username); if (name != username && name != preName) { saveAFace(map, name); } names.Add(name); } } else { string name = string.IsNullOrEmpty(preName) ? PromptForName("Identificação", "Insira o nome da pessoa", map) : preName; saveAFace(map, name); names.Add(name); } } } return(string.Join(",", names.ToArray().Where(v => v.Length > 0))); } }