示例#1
0
        public void TrainFaceStart(string selectedFaceStr)
        {
            int selectedFace = -1;

            // get index
            try
            {
                selectedFace = int.Parse(selectedFaceStr.Split('_').Last());
            }
            catch (Exception)
            {
                return;
            }

            // mode train - start
            Mode = EnMode.TRFStart;
            FrmMain.ButtonBackColor();

            // get info
            TRFaces.FaceId    = QZFaceArr[selectedFace].Id;
            TRFaces.FaceName  = QZFaceArr[selectedFace].Name;
            TRFaces.TrainNbr  = 0;
            TRFaces.TrainFace = new List <Image <Gray, byte> >();

            // open formwebcam
            FormWebCamOpen();
            // open form training
            //FormTrainOpen();
        }
        public void TestGroupStart(string selectedGroupStr)
        {
            int selectedGroup = -1;

            // get index
            try
            {
                selectedGroup = int.Parse(selectedGroupStr.Split('_').Last());
            }
            catch (Exception)
            {
                return;
            }

            // test group
            QZTGroup           = new TGroup();
            QZTGroup.TGroupNbr = selectedGroup;

            // open formwebcam
            FormWebCamOpen();

            // test faces
            Mode = EnMode.TGStart;
            FrmMain.ButtonBackColor();
        }
示例#3
0
        public int TrainFaceSave()
        {
            // mode none
            Mode = EnMode.None;
            FrmMain.ButtonBackColor();

            DateTime now = DateTime.Now;

            int nbr = 0;

            foreach (var trFace in TRFaces.TrainFace)
            {
                try
                {
                    // save
                    trFace.Save(System.IO.Path.GetFullPath($@"../../Faces/{TRFaces.FaceName}_{TRFaces.FaceId}_{now.Hour}_{now.Minute}_{now.Second}_{++nbr}.bmp"));
                }
                catch (Exception)
                {
                }
            }

            return(nbr);
        }
示例#4
0
        public void QuestionStart(string qNbr, string gNbr)
        {
            try
            {
                // question
                TQuestion = new TestQuestion();

                TQuestion.QGivenAnswerNbr     = new int[10];
                TQuestion.QGivenAnswerPrevNbr = new int[10];
                TQuestion.QGivenAnswerTimeOn  = new int[10];
                TQuestion.QForceAnswerNbr     = new bool[10];

                TQuestion.QStopWatch = new Stopwatch();
                TQuestion.QStopWatch.Start();
                TQuestion.QStopWatchTime        = TQuestion.QStopWatch.ElapsedMilliseconds;
                TQuestion.Step1                 = 0;
                TQuestion.QObjectGiveAnswerTime = 0;
                TQuestion.ImageAnswerGood       = new Image <Bgr, byte>(System.IO.Path.GetFullPath($@"../../Images/AnswerOK.png"));
                TQuestion.ImageAnswerGood       = TQuestion.ImageAnswerGood.Resize(1280, 720, Emgu.CV.CvEnum.Inter.Cubic);
                TQuestion.ImageAnswerWrong      = new Image <Bgr, byte>(System.IO.Path.GetFullPath($@"../../Images/AnswerNOK.png"));
                TQuestion.ImageAnswerWrong      = TQuestion.ImageAnswerWrong.Resize(1280, 720, Emgu.CV.CvEnum.Inter.Cubic);

                QCommit = new OpenCvShape(QSet);

                int quesNbr = -1;
                try
                {
                    quesNbr = int.Parse(qNbr.Split('_')[1]);
                }
                catch (Exception)
                {
                }
                if (quesNbr <= 0)
                {
                    return;
                }
                TQuestion.QNbr = quesNbr;



                int groupNbr = -1;
                try
                {
                    groupNbr = int.Parse(gNbr.Split('_').Last());
                }
                catch (Exception)
                {
                }

                if (groupNbr <= 0)
                {
                    return;
                }
                TQuestion.QGrpNbr = groupNbr;

                // questiontype
                TQuestion.QType         = (EnQType)QZQuestionArr[TQuestion.QNbr].Type;
                TQuestion.QType2Counter = 0;

                // load faces for group
                QuestionLoadFaces(groupNbr);

                // set answer to faces
                var face1Id = QZGroupArr[groupNbr].GFaceIds[1];
                var face2Id = QZGroupArr[groupNbr].GFaceIds[2];
                var face3Id = QZGroupArr[groupNbr].GFaceIds[3];


                // type1 ------------------------------------------------->
                if (TQuestion.QType == EnQType.ThreeQA)
                {
                    // answer for face1
                    Random random = new Random();
                    var    rnbr1  = random.Next(1, 4);

                    // answer to face1
                    QZFaceArr[face1Id].Answer = rnbr1;

                    if (rnbr1 == 1)
                    {
                        var rnnbr2 = random.Next(1, 3);
                        if (rnnbr2 == 1)
                        {
                            QZFaceArr[face2Id].Answer = 2;
                            QZFaceArr[face3Id].Answer = 3;
                        }
                        else
                        {
                            QZFaceArr[face2Id].Answer = 3;
                            QZFaceArr[face3Id].Answer = 2;
                        }
                    }
                    else if (rnbr1 == 2)
                    {
                        var rnnbr2 = random.Next(1, 3);
                        if (rnnbr2 == 1)
                        {
                            QZFaceArr[face2Id].Answer = 1;
                            QZFaceArr[face3Id].Answer = 3;
                        }
                        else
                        {
                            QZFaceArr[face2Id].Answer = 3;
                            QZFaceArr[face3Id].Answer = 1;
                        }
                    }
                    else if (rnbr1 == 3)
                    {
                        var rnnbr2 = random.Next(1, 3);
                        if (rnnbr2 == 1)
                        {
                            QZFaceArr[face2Id].Answer = 1;
                            QZFaceArr[face3Id].Answer = 2;
                        }
                        else
                        {
                            QZFaceArr[face2Id].Answer = 2;
                            QZFaceArr[face3Id].Answer = 1;
                        }
                    }
                }
                // type2 ------------------------------------------------->
                else if (TQuestion.QType == EnQType.MakeFormation)
                {
                    QZFaceArr[face1Id].Answer = QZGroupArr[groupNbr].GFaceIds[1];
                    QZFaceArr[face2Id].Answer = QZGroupArr[groupNbr].GFaceIds[2];
                    QZFaceArr[face3Id].Answer = QZGroupArr[groupNbr].GFaceIds[3];
                }

                // open formwebcam
                FormWebCamOpen();

                // test question
                Mode = EnMode.QStart;
                FrmMain.ButtonBackColor();
            }
            catch (Exception ex)
            {
            }
        }
示例#5
0
        public void TestFaceStart(string selectedFaceStr)
        {
            int selectedFace = -1;

            // get index
            try
            {
                selectedFace = int.Parse(selectedFaceStr.Split('_').Last());
            }
            catch (Exception)
            {
            }


            // get info
            TFaces = new QZTestFaces();
            try
            {
                TFaces.FaceId   = QZFaceArr[selectedFace].Id;
                TFaces.FaceName = QZFaceArr[selectedFace].Name;
            }
            catch (Exception)
            {
                TFaces.FaceId   = -1;
                TFaces.FaceName = "";
            }

            TFaces.Faces   = new List <Image <Gray, byte> >();
            TFaces.FaceIds = new List <int>();

            // load images
            string dir = System.IO.Path.GetFullPath($@"../../Faces/");

            string[] fileEntries = Directory.GetFiles(dir);
            foreach (string fileName in fileEntries)
            {
                string file = Path.GetFileNameWithoutExtension(fileName);

                if (((TFaces.FaceId >= 0) && file.StartsWith(TFaces.FaceName)) || (TFaces.FaceId < 0))
                {
                    string[] faceParts = file.Split('_');
                    string   faceName  = faceParts[0];
                    int      faceId    = Convert.ToInt32(faceParts[1]);

                    TFaces.Faces.Add(new Image <Gray, byte>(fileName));
                    TFaces.FaceIds.Add(faceId);
                }
            }


            // train faces
            //TFaces.FaceRecognition = new EigenFaceRecognizer(80, double.PositiveInfinity);
            //TFaces.FaceRecognition = new EigenFaceRecognizer(0, 1.0);

            TFaces.FaceRecognition = new LBPHFaceRecognizer();
            //TFaces.FaceRecognition = new FisherFaceRecognizer();

            TFaces.FaceRecognition.Train(TFaces.Faces.ToArray(), TFaces.FaceIds.ToArray());

            // open formwebcam
            FormWebCamOpen();

            // test faces
            Mode = EnMode.TFStart;
            FrmMain.ButtonBackColor();
        }