private void DetectFaces() { NamePersons.Add(""); Image <Gray, byte> grayframe = the_image_frame.Convert <Gray, byte>(); ImgCamera.Image = the_image_frame; MCvAvgComp[][] facesDetected = grayframe.DetectHaarCascade( face, 1.1, 2, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); lblTotalFacesDetected.Text = facesDetected[0].Length.ToString(); if (facesDetected[0].Length > 0) { foreach (MCvAvgComp f in facesDetected[0]) { t = t + 1; result = the_image_frame.Copy(f.rect).Convert <Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); the_image_frame.Draw(f.rect, new Bgr(Color.Green), 3); if (TrainingImages.ToArray().Length != 0) { MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.01); EigenFaceRecognizer recognizer = new EigenFaceRecognizer( TrainingImages.ToArray(), labels.ToArray(), 5000, ref termCrit ); name = recognizer.Recognize(result); if (string.IsNullOrEmpty(name) == true) { name = "UNKNOWN"; } the_image_frame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.Red)); } //Now draw the rectangle on the detected image NamePersons[t - 1] = name; NamePersons.Add(""); } lblTotalFacesDetected.Text = facesDetected[0].Length.ToString(); } t = 0; ImgTrainedFaces.Image = result; for (int namelabel = 0; namelabel < facesDetected[0].Length; namelabel++) { names = names + NamePersons[namelabel] + ","; } string names_without_comma_at_the_end = names.Remove(names.Length - 1); lblNamesExtracted.Text = names_without_comma_at_the_end; names = ""; NamePersons.Clear(); }
private void DetectFaces() { NamePersons.Add(""); Image <Gray, byte> grayframe = ImageFrame.Convert <Gray, byte>(); MCvAvgComp[][] facesDetected = grayframe.DetectHaarCascade( face, 1.2, 4, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); label3.Text = facesDetected[0].Length.ToString(); if (facesDetected[0].Length > 0) { foreach (MCvAvgComp f in facesDetected[0]) { t = t + 1; result = ImageFrame.Copy(f.rect).Convert <Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); ImageFrame.Draw(f.rect, new Bgr(Color.Green), 3); if (trainingImages.ToArray().Length != 0) { MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.01); EigenFaceRecognizer recognizer = new EigenFaceRecognizer( trainingImages.ToArray(), labels.ToArray(), 5000, ref termCrit ); name = recognizer.Recognize(result); //Show recognized person's name if (string.IsNullOrEmpty(name) == true) { name = "UNKNOWN"; } ImageFrame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.Red)); } NamePersons[t - 1] = name; NamePersons.Add(""); } } label3.Text = facesDetected[0].Length.ToString(); NumberOfFacesDetected = facesDetected[0].Length; t = 0; for (int namelabel = 0; namelabel < facesDetected[0].Length; namelabel++) { names = names + NamePersons[namelabel] + ","; } if (is_in_grayscale == true) { Image <Gray, byte> displayed_image_in_grayscale = ImageFrame.Convert <Gray, byte>(); imageBoxFrameGrabber.Image = displayed_image_in_grayscale; } else if (is_in_grayscale == false) { imageBoxFrameGrabber.Image = ImageFrame; } else { } string names_without_comma_at_the_end = names.Remove(names.Length - 1); lblName.Text = names_without_comma_at_the_end; names = ""; NamePersons.Clear(); }
void FrameGrabber(object sender, EventArgs e) { try { lblTotalFacesDetected.Text = "0"; No_Faces_Detected = 0; NamePersons.Add(""); //Initialize grabber event currentFrame = grabber.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); if (currentFrame != null) { //Obtain the captured frame in Bitmap Bitmap ConvertedTobitmap = new Bitmap(grabber.QueryFrame().Bitmap); //If the save menu strip item is being selected if (saveToFileWithoutFaceRecognition) { //Save image frame in the desired location SaveFileDialog save_Frame_Without_Face_Recognized = new SaveFileDialog(); save_Frame_Without_Face_Recognized.Filter = "Images|*.png;*.bmp;*.jpg"; ImageFormat format = ImageFormat.Png; if (save_Frame_Without_Face_Recognized.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string ext = System.IO.Path.GetExtension(save_Frame_Without_Face_Recognized.FileName); switch (ext) { case ".jpg": format = ImageFormat.Jpeg; break; case ".bmp": format = ImageFormat.Bmp; break; } ConvertedTobitmap.Save(save_Frame_Without_Face_Recognized.FileName, format); } saveToFileWithoutFaceRecognition = !saveToFileWithoutFaceRecognition; } else { } if (enable_detection_and_recognition_of_faces == true) { gray = currentFrame.Convert <Gray, byte>(); //Face Detector MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 8, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); if (facesDetected[0].Length > 0) { foreach (MCvAvgComp f in facesDetected[0]) { //If the face is found, increment t t = t + 1; currentFrame.Draw(f.rect, new Bgr(Color.Red), 2); //Now see the result by copying the detected face in a frame name as result result = currentFrame.Copy(f.rect).Convert <Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //The face detected in channel 0 (grey) is drawn with a red rectangle of thickness 2 if (TrainingImages.ToArray().Length != 0) { //termcriteria against each image to find a match with it to perform different iterations MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001); //Call class by creating object and pass parameters EigenFaceRecognizer recognizer = new EigenFaceRecognizer( TrainingImages.ToArray(), labels.ToArray(), 5000, ref termCrit ); //100 - needs to be in the same orientation but increasing it to 2000 or 3000 is otherwise //Next step is to name find for recognized face name = recognizer.Recognize(result); if (string.IsNullOrEmpty(name) == true) { name = "UNKNOWN"; } currentFrame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.LightGreen)); } //Now draw the rectangle on the detected image NamePersons[t - 1] = name; NamePersons.Add(""); lblTotalFacesDetected.Text = facesDetected[0].Length.ToString(); ImgTrainedFaces.Image = result; } } else if (facesDetected[0].Length == 0) { ImgTrainedFaces.Image = null; } else { } t = 0; ImgCamera.Image = currentFrame; if (facesDetected[0].Length < 1) { lblNamesExtracted.Text = ""; names = ""; NamePersons.Clear(); } else if (facesDetected[0].Length >= 1) { for (int namelabel = 0; namelabel < facesDetected[0].Length; namelabel++) { names = names + NamePersons[namelabel] + ","; } //Show the faces procesed and recognized string names_without_comma_at_the_end = names.Remove(names.Length - 1); lblNamesExtracted.Text = names_without_comma_at_the_end; names = ""; //Clear the list(vector) of names NamePersons.Clear(); } } else if (enable_detection_and_recognition_of_faces == false) { ImgCamera.Image = currentFrame; } else { } } } catch (Exception) { } }
void FrameGrabber(object sender, EventArgs e) { if (is_camera_on == true) { try { label3.Text = "0"; NumberOfFacesDetected = 0; //=========We use NamePersons as a list of names since we do not know the size of NamePersons====// NamePersons.Add(""); //Get the current frame form capture device currentFrame = grabber.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); if (currentFrame != null) { //Convert the current frame captured to Grayscale gray = currentFrame.Convert <Gray, Byte>(); MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 8, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); MCvAvgComp[][] EyesDetected = gray.DetectHaarCascade( eye, 1.2, 8, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); //=================If at least one face has been detected==================// if (facesDetected[0].Length > 0) { //====================================================================// foreach (MCvAvgComp f in facesDetected[0]) { //Increase the number of training images by 1 t = t + 1; if (detect_both_face_and_eyes == true) { foreach (MCvAvgComp ey in EyesDetected[0]) { currentFrame.Draw(ey.rect, new Bgr(Color.Yellow), 2); //Set the size of the empty box(Extracted face) which will later contain the extracted faces } } else { } currentFrame.Draw(f.rect, new Bgr(color_of_rectangle), 3); //============================================================== result = currentFrame.Copy(f.rect).Convert <Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //The face detected in channel 0 (grey) is drawn with a red rectangle of thickness 3 btnSubmitAttendance.Enabled = true; if (trainingImages.ToArray().Length != 0) { //TermCriteria for face recognition with numbers of trained images like maxIteration MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001); //Eigen face recognizer EigenFaceRecognizer recognizer = new EigenFaceRecognizer( trainingImages.ToArray(), labels.ToArray(), 5000, ref termCrit); name = recognizer.Recognize(result); if (string.IsNullOrEmpty(name) == true) { name = "UNKNOWN"; } //Draw the label for each face detected and recognized currentFrame.Draw(name, ref font, new Point(f.rect.X + 10, f.rect.Y - 2), new Bgr(color_of_name_above_recognized_face)); } NamePersons[t - 1] = name; NamePersons.Add(""); //Set the number of faces detected on the scene } } label3.Text = facesDetected[0].Length.ToString(); NumberOfFacesDetected = facesDetected[0].Length; t = 0; if (name == "UNKNOWN") { btnSubmitAttendance.Enabled = false; } if (facesDetected[0].Length < 1) { names = ""; NamePersons.Clear(); lblName.Text = ""; } else if (facesDetected[0].Length >= 1) { for (int namelabel = 0; namelabel < facesDetected[0].Length; namelabel++) { names = names + NamePersons[namelabel] + ","; } foreach (var en in NamePersons) { lblName.Text = en.ToString(); } //Show the faces processed and recognized string names_without_comma_at_the_end = names.Remove(names.Length - 1); lblName.Text = names_without_comma_at_the_end; names = ""; NamePersons.Clear(); } else { } if (is_in_grayscale == true) { Image <Gray, Byte> grayImage = currentFrame.Convert <Gray, Byte>(); imageBoxFrameGrabber.Image = grayImage; } else { imageBoxFrameGrabber.Image = currentFrame; } } } catch (Exception) { } } }