public FindPersonOnImage() { InitializeComponent(); TrainedFaces.Clear(); FaceIDs.Clear(); PersonsNames.Clear(); using (ApplicationContext db = new ApplicationContext()) { InitializeComponent(); db.Persons.Load(); Persons = db.Persons.Local.ToList(); } int FaceCount = 0; foreach (var person in Persons) { var img = new Bitmap(BitmapHelpers.byteArrayToImage(person.PersonPhoto)); Image <Gray, byte> imageForTrain = img.ToImage <Gray, byte>(); System.Drawing.Rectangle[] faces = faceCascadeClassifier.DetectMultiScale(imageForTrain, 1.1, 3, System.Drawing.Size.Empty, System.Drawing.Size.Empty); foreach (var face in faces) { faceResult = imageForTrain; faceResult.ROI = face; CvInvoke.Resize(faceResult, faceResult, new System.Drawing.Size(200, 200), 0, 0, Inter.Cubic); CvInvoke.EqualizeHist(faceResult, faceResult); TrainedFaces.Add(faceResult.Mat); } FaceIDs.Add(FaceCount); PersonsNames.Add(person.FirstName + " " + person.LastName); FaceCount++; Debug.WriteLine(FaceCount + ". " + person.FirstName + " " + person.LastName); double Threshold = 2000; if (TrainedFaces.Count > 0) { recognizer = new EigenFaceRecognizer(FaceCount, Threshold); recognizer.Train(TrainedFaces.ToArray(), FaceIDs.ToArray()); } InitializeComponent(); } }