using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.UI; using Emgu.Util; using Emgu.CV.Face; namespace FaceRecognizer { public partial class MainForm : Form { LBPHFaceRecognizer reconizer; CascadeClassifier faceCascade; Image temp; List> imageList = new List>(); List imageLabels = new List(); List imageIndicies = new List(); Rectangle[] detectedFaces; string trainImagesFolder = Application.StartupPath + "\\Train"; public MainForm() { InitializeComponent(); console.AppendText("Main OK!"); } void train(string personName) { faceCascade = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml"); reconizer = new LBPHFaceRecognizer(); foreach (var file in Directory.GetFiles(trainImagesFolder)) { if (file.EndsWith("jpg")) { console.AppendText("found: " + Path.GetFileNameWithoutExtension(file)); temp = new Image(file); console.AppendText("loaded: " + Path.GetFileNameWithoutExtension(file)); temp._EqualizeHist(); var detected_faces = faceCascade.DetectMultiScale(temp , 1.1 , 3 , new Size(24, 24) , Size.Empty); if (detected_faces.Length == 0) { console.AppendText("lenght zero"); continue; } temp.ROI = detected_faces[0]; temp = temp.Copy(); temp = temp.Resize(100, 100, Inter.Cubic); imageList.Add(temp); imageLabels.Add(Path.GetFileNameWithoutExtension(file)); } } for (int i = 0; i < imageList.Count; i++) { imageIndicies.Add(i); } try { reconizer.Train(imageList.ToArray(), imageIndicies.ToArray()); reconizer.Write(personName); console.AppendText("Training done!\nFile Name: " + personName); } catch (Exception e) { console.AppendText("Error: " + e.Message); } } void recognize(string personName) { console.AppendText("Recognizing " + personName + "from local photos"); try { reconizer = new LBPHFaceRecognizer(1, 8, 8, 9, 65); reconizer = new LBPHFaceRecognizer(); reconizer.Read(personName); foreach (var file in Directory.GetFiles(trainImagesFolder)) { if (file.EndsWith("jpg")) { Image temp2 = new Image(file); pictureBox1.Image = temp2.Resize(pictureBox1.Width, pictureBox1.Height, Inter.Cubic).ToBitmap(); var result = reconizer.Predict(temp2); console.AppendText(">>result:" + result.Label.ToString()); } } } catch (Exception e) { console.AppendText("Error: " + e.Message); } } private void TrainBtn_Click(object sender, EventArgs e) { train(nameTxtBx.Text); } private void RecconizeBtn_Click(object sender, EventArgs e) { recognize(nameTxtBx.Text); } private void console_TextChanged(object sender, EventArgs e) { console.AppendText("\n"); } } }