コード例 #1
0
        private void Timer_Tick(object sender, EventArgs e)
        {
            Frame = Capture.QueryFrame();
            var imageFrame = Frame.ToImage <Gray, byte>();

            if (TimerCounter < TimeLimit)
            {
                TimerCounter++;

                if (imageFrame != null)
                {
                    var faces = FaceDetection.DetectMultiScale(imageFrame, 1.3, 5);

                    if (faces.Length > 0)
                    {
                        var processImage = imageFrame.Copy(faces[0]).Resize(ProcessImageWidth, ProcessImageHeight, Inter.Cubic);
                        Faces.Add(processImage);
                        Labels.Add(Convert.ToInt32(txtUserId.Text));
                        ScanCounter++;
                        rtbOutPut.AppendText($"{ScanCounter} Success Scan Taken... {Environment.NewLine}");
                        rtbOutPut.ScrollToCaret();
                    }
                }
            }
            else
            {
                var trainFaces = ConvertImageToMat(Faces);

                foreach (var face in trainFaces)
                {
                    DataStoreAccess.SaveFace(Convert.ToInt32(txtUserId.Text), txtUserName.Text, ConvertImageToBytes(face.Bitmap));
                }

                EigenFaceRecognizer.Train(trainFaces.ToArray(), Labels.ToArray());

                EigenFaceRecognizer.Write(YMLPath);
                Timer.Stop();
                TimerCounter       = 0;
                btnPredict.Enabled = true;
                rtbOutPut.AppendText($"Training Completed! {Environment.NewLine}");
                MessageBox.Show("Training Completed!");
            }
        }
コード例 #2
0
        public Form1()
        {
            InitializeComponent();

            EigenFaceRecognizer = new EigenFaceRecognizer(4, 800);
            DataStoreAccess     = new DataStoreAccess(ConnectionString);
            FaceDetection       = new CascadeClassifier(Path.GetFullPath($"{AppDomain.CurrentDomain.BaseDirectory}haarcascade_frontalface_default.xml"));
            Frame  = new Mat();
            Faces  = new List <Image <Gray, byte> >();
            Labels = new List <int>();

            if (File.Exists(YMLPath))
            {
                EigenFaceRecognizer.Read(YMLPath);
            }

            var allFaces = DataStoreAccess.CallFaces("ALL_USERS");

            if (allFaces != null)
            {
                for (int i = 0; i < allFaces.Count; i++)
                {
                    Stream stream = new MemoryStream();
                    stream.Write(allFaces[i].Image, 0, allFaces[i].Image.Length);
                    var faceImage = new Image <Gray, byte>(new Bitmap(stream));
                    Faces.Add(faceImage);
                    Labels.Add(allFaces[i].UserId);
                }

                EigenFaceRecognizer.Train(ConvertImageToMat(Faces).ToArray(), Labels.ToArray());

                btnPredict.Enabled = true;
                MessageBox.Show("Training Completed!");
            }
            else
            {
                MessageBox.Show("Nothing to traing!");
            }

            BeginCapture();
        }