예제 #1
0
        private void executeFaceRecognition()
        {
            //array containing the 16 facial parameters resulting from the program
            double[] facialParamters = doFaceRecognitionTask(mainPictureBox.Image);

            //When the algorithm is unsuccesful, the facial parameters can be null
            if (facialParamters != null)
            {
                //Gezicht inscannen
                if (scanRadioButton.Checked == true)
                {
                    //retrieve the TestSet-file location, if it doesn't exist create it and save the (new) path in the config-file
                    if ((ConfigManager.GetSetting("testSetPath") != null || ConfigManager.GetSetting("testSetPath") != ""))
                    {
                        TestSetFile tsf     = TestSetFile.readFromFile();
                        string      imgPath = saveImageToTestSetDir(mainPictureBox.Image, (nameTextBox.Text == "" ? "<unknown>" : nameTextBox.Text));
                        tsf.testSets.Add(new TestSet((nameTextBox.Text == "" ? "<unknown>" : nameTextBox.Text), facialParamters, imgPath));
                        tsf.writeToFile();

                        log(imgPath);
                        log("inscannen succesvol.");
                    }
                }

                //Gezicht vergelijken
                else if (recognizeRadioButton.Checked == true || sequenceRadioButton.Checked == true)
                {
                    //retrieve the TestSet-file location form the config-file, if it doesn't exist do nothing
                    if ((ConfigManager.GetSetting("testSetPath") != null || ConfigManager.GetSetting("testSetPath") != ""))
                    {
                        string bestMatchName       = "";
                        double bestMatchDifference = 999;
                        string bestMatchPath       = "";

                        //compare the facial parameters to each item in the TestSet-file
                        TestSetFile tsf = TestSetFile.readFromFile();
                        foreach (TestSet ts in tsf.testSets)
                        {
                            double difference = 0;
                            for (int i = 0; i < ts.Parameters.Length; i++)
                            {
                                difference += Math.Abs(ts.Parameters[i] - facialParamters[i]);
                            }
                            //the representation is currently compared by the average difference in values
                            difference /= facialParamters.Length;

                            if (difference < bestMatchDifference)
                            {
                                bestMatchDifference = difference;
                                bestMatchName       = ts.Name;
                                bestMatchPath       = ts.ImagePath;
                            }
                        }
                        if (tsf.testSets.Count < 1 || bestMatchPath == null)
                        {
                            //Test set is empty!
                            log("TestSet is leeg. Scan eerst een aantal gezichten in! ");
                        }
                        else
                        {
                            resultPictureBox.Image = new Bitmap(bestMatchPath);
                            log("Best match is: " + bestMatchName + "  (gemiddeld verschil:" + bestMatchDifference + ")");
                        }
                    }
                    else
                    {
                        log("Testset-file bestaat niet of is niet gevonden.");
                    }
                }

                for (int i = 0; i < facialParamters.Length; i++)
                {
                    //uncomment if you want to print the found facial parameters in the feedbackTextBox
                    //log("param#" + (i + 1) + ": " + facialParamters[i]);
                }
            }
            else
            {
                log("Geen facial parameters beschikbaar.");
                log("Match berekenen is mislukt.");
            }
        }