Esempio n. 1
0
        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();
            }
        }