Esempio n. 1
0
        // Load an array of training set items from the csv file
        public static List <TrainingItem> Load(string csvFile)
        {
            List <TrainingItem> trainingItems = new List <TrainingItem>();
            string line;

            string[] items;

            // Read the file and display it line by line.
            System.IO.StreamReader file = new System.IO.StreamReader(csvFile);

            // Skip the first line since it is the header
            file.ReadLine();

            while ((line = file.ReadLine()) != null)
            {
                TrainingItem trainingItem = new TrainingItem();
                items = line.Split(',');
                trainingItem.FileName = items[0];
                trainingItem.Label    = items[1];
                trainingItems.Add(trainingItem);
            }

            file.Close();

            return(trainingItems);
        }
        // Load an array of training set items from the csv file
        public static List<TrainingItem> Load(string csvFile)
        {
            List<TrainingItem> trainingItems = new List<TrainingItem>();
            string line;
            string[] items;

            // Read the file and display it line by line.
            System.IO.StreamReader file = new System.IO.StreamReader(csvFile);

            // Skip the first line since it is the header
            file.ReadLine();

            while ((line = file.ReadLine()) != null)
            {
                TrainingItem trainingItem = new TrainingItem();
                items = line.Split(',');
                trainingItem.FileName = items[0];
                trainingItem.Label = items[1];
                trainingItems.Add(trainingItem);
            }

            file.Close();

            return trainingItems;
        }
Esempio n. 3
0
        // Converts the images in a directory into the appropriate dimension
        // and saves them to the trianing set directory
        public static void Convert()
        {
            // Load the images in the directory with training set images
            DirectoryInfo di = new DirectoryInfo(@".\trainingset\tests");
            FileInfo[] fi = di.GetFiles("*", SearchOption.TopDirectoryOnly);

            // Empty the data csv file
            System.IO.File.WriteAllText(trainingSetCSVFile, "FileName, Label\r\n");

            foreach (FileInfo file in fi)
            {
                //// Convert the image into gray and the training width and height
                //Image<Gray, Byte> image = new Image<Gray, Byte>(file.FullName);
                //image = image.Resize(trainingImgWidth, trainingImgHeight, INTER.CV_INTER_CUBIC);

                //// Save file in bmp
                //string label = Path.GetFileNameWithoutExtension(file.FullName);
                //string fileName = label + imageExt;
                //image.Save(@".\trainingset\" + fileName);

                List<RecognizerResult> list = Detect(file.FullName);
                string fileName = Path.GetFileName(list[0].FileName);
                File.Move(list[0].FileName, trainingSetDir + @"/" + fileName);

                // Add item to CSV
                TrainingItem item = new TrainingItem();
                item.FileName = fileName;
                item.Label = Path.GetFileNameWithoutExtension(list[0].FileName);
                item.AddToCSV(trainingSetCSVFile);
            }
        }
Esempio n. 4
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            int selectedIndex = lvResults.SelectedIndices[0];

            if (selectedIndex >= 0 && selectedIndex < rcgnResultList.Count)
            {
                string sourceFile = rcgnResultList[selectedIndex].FileName;
                string destFile   = Program.trainingSetDir + @"\" + Path.GetFileName(sourceFile);

                // Check if this image is already part of the training set
                if (File.Exists(destFile))
                {
                    System.Windows.Forms.MessageBox.Show("This image already exist in the training set.");
                    return;
                }

                // Copy the result image file to training set folder
                System.IO.File.Copy(sourceFile, destFile, true);

                // Add the item to the training set
                TrainingItem item = new TrainingItem();
                item.FileName = Path.GetFileName(sourceFile);
                item.Label    = txtLabel.Text;
                item.AddToCSV(Program.trainingSetCSVFile);

                // Process the update training set and update the display tabs
                //ilTrainingSet.Images.Clear();
                //lvTrainingSet.Items.Clear();
                //ilEigenFaces.Images.Clear();
                //lvEigenFaces.Items.Clear();
                //Program.Train();
                //showTrainingSet();
                //showEigenFaces();
            }
        }
Esempio n. 5
0
        // Converts the images in a directory into the appropriate dimension
        // and saves them to the trianing set directory
        public static void Convert()
        {
            // Load the images in the directory with training set images
            DirectoryInfo di = new DirectoryInfo(@".\trainingset\tests");

            FileInfo[] fi = di.GetFiles("*", SearchOption.TopDirectoryOnly);

            // Empty the data csv file
            System.IO.File.WriteAllText(trainingSetCSVFile, "FileName, Label\r\n");

            foreach (FileInfo file in fi)
            {
                //// Convert the image into gray and the training width and height
                //Image<Gray, Byte> image = new Image<Gray, Byte>(file.FullName);
                //image = image.Resize(trainingImgWidth, trainingImgHeight, INTER.CV_INTER_CUBIC);

                //// Save file in bmp
                //string label = Path.GetFileNameWithoutExtension(file.FullName);
                //string fileName = label + imageExt;
                //image.Save(@".\trainingset\" + fileName);

                List <RecognizerResult> list = Detect(file.FullName);
                string fileName = Path.GetFileName(list[0].FileName);
                File.Move(list[0].FileName, trainingSetDir + @"/" + fileName);

                // Add item to CSV
                TrainingItem item = new TrainingItem();
                item.FileName = fileName;
                item.Label    = Path.GetFileNameWithoutExtension(list[0].FileName);
                item.AddToCSV(trainingSetCSVFile);
            }
        }
Esempio n. 6
0
        public static void Train()
        {
            List <TrainingItem> items = TrainingItem.Load(trainingSetCSVFile);

            Image <Gray, Byte>[] trainingImages = new Image <Gray, Byte> [items.Count];
            String[]             labels         = new String[items.Count];

            for (int index = 0; index < items.Count; index++)
            {
                trainingImages[index] = new Image <Gray, byte>(trainingSetDir + @"\" + items[index].FileName);
                labels[index]         = Path.GetFileNameWithoutExtension(items[index].Label);
            }

            MCvTermCriteria termCrit = new MCvTermCriteria(maxEigenFaces, 0.001);

            // Initialize Eigen Recognizer Object
            recognizer = new EigenObjectRecognizer(
                trainingImages,
                labels,
                eigenDistanceThreshold,
                ref termCrit);

            // Remove all old eigen images
            DirectoryInfo eigenDir = new DirectoryInfo(eigenImageDir);

            FileInfo[] eigenFiles = eigenDir.GetFiles();
            foreach (FileInfo file in eigenFiles)
            {
                file.Delete();
            }

            // Save the average Image
            recognizer.AverageImage.Save(averageImageName);

            // Save all eigen images
            for (int index = 0; index < recognizer.EigenImages.Length; index++)
            {
                String fileName = eigenImageName + (index + 1) + imageExt;
                recognizer.EigenImages[index].ToBitmap().Save(fileName);
            }

            // Print eigen values
            Console.WriteLine(String.Format("Num eigen values: {0}", recognizer.EigenValues.Length));
            Console.WriteLine(String.Format("Num rows in eigen values: {0}", recognizer.EigenValues[0].Rows));
            Console.WriteLine(String.Format("Num cols in eigen values: {0}", recognizer.EigenValues[0].Cols));
        }
Esempio n. 7
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            int selectedIndex = lvResults.SelectedIndices[0];
            if (selectedIndex >= 0 && selectedIndex < rcgnResultList.Count)
            {
                string sourceFile = rcgnResultList[selectedIndex].FileName;
                string destFile = Program.trainingSetDir + @"\" + Path.GetFileName(sourceFile);

                // Check if this image is already part of the training set
                if (File.Exists(destFile))
                {
                    System.Windows.Forms.MessageBox.Show("This image already exist in the training set.");
                    return;
                }

                // Copy the result image file to training set folder
                System.IO.File.Copy(sourceFile, destFile, true);

                // Add the item to the training set
                TrainingItem item = new TrainingItem();
                item.FileName = Path.GetFileName(sourceFile);
                item.Label = txtLabel.Text;
                item.AddToCSV(Program.trainingSetCSVFile);

                // Process the update training set and update the display tabs
                //ilTrainingSet.Images.Clear();
                //lvTrainingSet.Items.Clear();
                //ilEigenFaces.Images.Clear();
                //lvEigenFaces.Items.Clear();
                //Program.Train();
                //showTrainingSet();
                //showEigenFaces();
            }
        }