コード例 #1
0
        public void SanFranciscoCrimeSVMClassificationDataSetTest()
        {
            DataSetLoader dataSetLoader = new DataSetLoader();

            Console.WriteLine(" Reading DataSet.. ");
            var           crimes        = dataSetLoader.SelectCrimes();
            Kernel        kernel        = new GaussianKernel(0.9);
            SVMClassifier svmClassifier =
                new SVMClassifier(crimes, kernel);

            svmClassifier.Train();
            var crimeTests  = dataSetLoader.SelectCrimes();
            var trueCounter = 0;
            var counter     = 0;

            foreach (var item in crimeTests)
            {
                var outputValue = svmClassifier.Classify(item.Item1);
                if (outputValue == item.Item2)
                {
                    trueCounter++;
                }
                Debug.WriteLine(string.Format("Value {0} - Predicted {1} = {2}",
                                              item.Item2, outputValue, (outputValue == item.Item2) ? "true" : "false"));
                counter++;
            }
            Debug.WriteLine(string.Format("Data {0} - True {1} Verhältnis: {2}",
                                          counter.ToString(), trueCounter.ToString(), (Convert.ToDouble(trueCounter) / Convert.ToDouble(counter)).ToString()));
        }
コード例 #2
0
        public void CreditDataClassifyMethod()
        {
            DataSetLoader          dataSetLoader          = new DataSetLoader();
            var                    creditData             = dataSetLoader.SelectCreditData();
            var                    data                   = dataSetLoader.CalculatePercent(100, creditData);
            DecisionTreeClassifier decisionTreeClassifier =
                new DecisionTreeClassifier(data.Item1, new ShannonEntropySplitter());
            NaiveBayesClassifier naiveBayes =
                new NaiveBayesClassifier(data.Item1);
            var           list          = new List <NetML.Classification>();
            Kernel        kernel        = new LinearKernel();
            SVMClassifier SVMClassifier =
                new SVMClassifier(creditData, kernel, 0.001, 10.0);
            var neuronalCreditData = dataSetLoader.SelectNeuronalNetworksCreditData();
            NeuronalNetworkClassifier neuronalNetworkClassifier =
                new NeuronalNetworkClassifier(neuronalCreditData, 20, 2, 20, 5000, 0.1);

            list.Add(decisionTreeClassifier);
            list.Add(naiveBayes);
            list.Add(SVMClassifier);
            //list.Add(neuronalNetworkClassifier);
            Classifier classifier = new Classifier();

            classifier.Classify(list, creditData);
        }
コード例 #3
0
        public void AnimalClassifyMethod()
        {
            DataSetLoader          dataSetLoader          = new DataSetLoader();
            var                    animals                = dataSetLoader.SelectAnimals();
            var                    data                   = dataSetLoader.CalculatePercent(50, animals);
            DecisionTreeClassifier decisionTreeClassifier =
                new DecisionTreeClassifier(data.Item1, new ShannonEntropySplitter());
            NaiveBayesClassifier naiveBayes =
                new NaiveBayesClassifier(data.Item1);
            var           list   = new List <NetML.Classification>();
            Kernel        kernel = new LinearKernel();
            SVMClassifier animalSVMClassifier =
                new SVMClassifier(animals, kernel, 0.001, 10.0);
            var neuronalAnimals = dataSetLoader.SelectNeuronalNetworkAnimals();
            NeuronalNetworkClassifier neuronalNetworkClassifier =
                new NeuronalNetworkClassifier(neuronalAnimals, 16, 7, 16, 500, 0.1);

            list.Add(decisionTreeClassifier);
            list.Add(naiveBayes);
            list.Add(animalSVMClassifier);
            list.Add(neuronalNetworkClassifier);
            Classifier classifier = new Classifier();

            classifier.Classify(list, data.Item2);
        }
コード例 #4
0
        public void IrisSupportVectorMachineClassifierTest()
        {
            DataSetLoader dataSetLoader = new DataSetLoader();

            Console.WriteLine(" Reading DataSet.. ");
            var irises = dataSetLoader.SelectIrises();

            for (double i = 0; i < 1; i = i + 1)
            {
                Kernel        kernel = new LinearKernel();
                SVMClassifier animalSVMClassifier = new SVMClassifier(irises, kernel, 0.001, 10.0);
                animalSVMClassifier.Train();
                var irisesTest  = dataSetLoader.SelectIrises();
                var trueCounter = 0;
                var counter     = 0;
                foreach (var item in irisesTest)
                {
                    var outputValue = animalSVMClassifier.Classify(item.Item1);
                    if (outputValue == item.Item2)
                    {
                        trueCounter++;
                    }
                    Debug.WriteLine(string.Format("Value {0} - Predicted {1} = {2}",
                                                  item.Item2, outputValue, (outputValue == item.Item2) ? "true" : "false"));
                    counter++;
                }
                Debug.WriteLine(string.Format(" i = {0} Data {1} - True {2} Verhältnis: {3}", i,
                                              counter.ToString(), trueCounter.ToString(), (Convert.ToDouble(trueCounter) / Convert.ToDouble(counter)).ToString()));
            }
        }
コード例 #5
0
ファイル: Controller.cs プロジェクト: cric96/-vision_exam
 /// <summary>
 ///
 /// </summary>
 /// <param name="tomatoSets">
 /// The tomato set divided into training and validation.
 /// In the training set, the classificator learns the svm params.
 /// The classifier predicts label on the validation set.
 /// </param>
 public Controller(
     IDictionary <SetType, List <Tomato> > tomatoSets)
 {
     this.images    = new List <VisualEvent>();
     imageExtractor = new LBPExtractor(true);
     imageExtractor.VisualEventManager += OnImageComputed;
     classifier      = new TomatoClassifier(new LBPExtractor(false), SVMClassifier.Linear(0.43f));
     this.tomatoSets = tomatoSets;
 }
コード例 #6
0
ファイル: Program.cs プロジェクト: Yozer/CodesReader
        private static void TryNeuralNetwork()
        {
            Directory.EnumerateFiles(@"D:\dataset\easy\wrong_segmentation").ToList().ForEach(File.Delete);
            Directory.EnumerateFiles(@"D:\dataset\easy\wrong_segmentation_whole").ToList().ForEach(File.Delete);
            var dictionary = new Dictionary <char, int>();
            int counter = 0, failed = 0, failed_letters = 0;
            //IClassifier classifier = new NnLetterClassifier("models/experiment-17/model");
            //IClassifier classifier = new RNNClassifier("models/seq/model");
            IClassifier classifier = new SVMClassifier(@"models\best.yaml");

            //classifier.Recognize(new List<ComputeResult> { new ComputeResult("") { Letters = new List<Bitmap> { (Bitmap)Image.FromFile("D:\\test.bmp") } } });

            using (var compute = new ParallelCompute(new ImageProcessorOpenCv(), classifier))
            {
                Console.Clear();

                foreach (var computeResult in compute.Compute(Directory.EnumerateFiles(@"C:\grzego\read")))
                {
                    Console.SetCursorPosition(0, 0);
                    ++counter;
                    string fileName    = Path.GetFileNameWithoutExtension(computeResult.ImagePath);
                    string correctCode = Path.GetFileNameWithoutExtension(computeResult.ImagePath).Replace("-", string.Empty);
                    if (computeResult.PredictedCodeLetters == null || correctCode != computeResult.PredictedCodeLetters)
                    {
                        ++failed;
                    }

                    if (computeResult.PredictedCodeLetters != null && correctCode != computeResult.PredictedCodeLetters)
                    {
                        File.Copy(computeResult.ImagePath, @"D:\dataset\easy\wrong_segmentation_whole\" + fileName + ".jpg", true);
                        for (int i = 0; i < 25; ++i)
                        {
                            if (correctCode[i] != computeResult.PredictedCodeLetters[i])
                            {
                                if (!dictionary.ContainsKey(correctCode[i]))
                                {
                                    dictionary.Add(correctCode[i], 0);
                                }

                                computeResult.Letters[i].Save(@"D:\dataset\easy\wrong_segmentation\" +
                                                              $"{correctCode[i]}_predicted={computeResult.PredictedCodeLetters[i]}_{fileName}_{dictionary[correctCode[i]]}.bmp", ImageFormat.Bmp);

                                ++failed_letters;
                                ++dictionary[correctCode[i]];
                            }
                        }
                    }
                    //File.Move(computeResult.ImagePath, Path.Combine(@"D:\SO#138270\SO#138270", computeResult.PredictedCode + ".jpg"));
                    Console.WriteLine($"Total: {counter} Bad: {failed}/{counter} Failed letters: {failed_letters}/{counter * 25}.");
                    computeResult.Dispose();
                }
            }
            classifier.Dispose();
        }
コード例 #7
0
        public void LoadTrainData(string trainDataPath)
        {
            TrainDataPath = trainDataPath;
            if (!Directory.GetFiles(trainDataPath).Any())
            {
                return;
            }

            var features = FeatureLoader.GetObservations(trainDataPath);

            SvmClassifier = SVMClassifier.Create(features);
        }
コード例 #8
0
        public static ConfusionMatrix Validate(List <ImageFeatures> train, List <ImageFeatures> validation)
        {
            var svmClassifier = SVMClassifier.Create(train);

            var confusionMatrix = new ConfusionMatrix();

            foreach (var validationObservation in validation)
            {
                var predict = svmClassifier.Predict(validationObservation);
                confusionMatrix.AddVote(actual: validationObservation.IsOccupied, predicted: predict);
            }
            return(confusionMatrix);
        }
コード例 #9
0
        public override double ExecuteCommand()
        {
            FeatureVectorFile vectorFile = new FeatureVectorFile(path: vector_file, noOfHeaderColumns: 1, featureDelimiter: ':', isSortRequired: true);
            FeatureVectorFile modelFile  = new FeatureVectorFile(path: model_file, noOfHeaderColumns: 1, featureDelimiter: ':', isSortRequired: true);

            int alphaColumn_i = 0;

            TextIdMapper[] headerToHeaderIds_model = new TextIdMapper[modelFile.NoOfHeaderColumns];
            headerToHeaderIds_model[alphaColumn_i] = new TextIdMapper();

            var accuracy = Program.ReportOnModel(vectorFile, sys_output
                                                 , classifierFactory: (classToClassId, featureToFeatureId) =>
            {
                return(SVMClassifier.LoadModel(modelFile, classToClassId, featureToFeatureId, alphaColumn_i, headerToHeaderIds_model));
            }
                                                 , getDetailsFunc: GetDetails
                                                 );

            return(accuracy);
        }
コード例 #10
0
        static void Main(string[] args)
        {
            ImageUnderstandingConfig config = ImageUnderstandingConfig.ImportSettings();

            Console.WriteLine("Feature Generation: [" + config.featureGeneratorMethod + "]");
            Console.WriteLine("Classification:     [" + config.classifierMethod + "]\n");
            Console.WriteLine("SoftNormalization:  [" + config.UseSoftNormalization + "]\n");

            // some parameters
            string path          = config.path;
            int    foldCount     = config.FoldCount;
            int    testFoldCount = config.TestFoldCount;

            string[] restrictTo = config.RestrictTo;
            string[] ignoreTags = config.IgnoreTags;

            // get all images
            List <TaggedImage>       images     = new List <TaggedImage>();
            Dictionary <string, int> tagIndices = new Dictionary <string, int>();

            foreach (string folderPath in Directory.GetDirectories(path))
            {
                foreach (string imagePath in Directory.GetFiles(folderPath))
                {
                    TaggedImage image = new TaggedImage(imagePath);

                    if (ignoreTags.Contains(image.Tag) || (restrictTo.Length != 0 && !restrictTo.Contains(image.Tag)))
                    {
                        continue;
                    }

                    images.Add(image);

                    if (!tagIndices.ContainsKey(image.Tag))
                    {
                        tagIndices.Add(image.Tag, tagIndices.Count);
                    }
                }
            }

            Console.WriteLine("starting feature vector generation [" + config.featureGeneratorMethod + "]\n");

            ////////////////////////////////////////////////////////////////////////////////////////////////////
            // FEATURE GENERATOR                                                                              //
            ////////////////////////////////////////////////////////////////////////////////////////////////////

            FeatureGenerator <TaggedImage, float> featureGenerator;

            switch (config.featureGeneratorMethod)
            {
            case ImageUnderstandingConfig.FeatureGeneratorMethod.HOG:
                featureGenerator = new HOGFeatureGenerator();
                break;

            case ImageUnderstandingConfig.FeatureGeneratorMethod.SIFT:
                featureGenerator = new SIFTFeatureGenerator();
                break;

            case ImageUnderstandingConfig.FeatureGeneratorMethod.Random:
                featureGenerator = new RandomFeatureGenerator();
                break;

            case ImageUnderstandingConfig.FeatureGeneratorMethod.Unity:
                featureGenerator = new UnityFeatureGenerator();
                break;

            default:
                throw new Exception("Unknown Feature Generator Method");
            }

            featureGenerator.InitializeViaConfig(config);


            string tag = "";

            foreach (TaggedImage image in images)
            {
                if (tag != image.Tag)
                {
                    Console.WriteLine("generating feature vector: [" + image.Tag + "]");
                    tag = image.Tag;
                }
                image.FeatureVector = featureGenerator.GetFeatureVector(image);
            }

            featureGenerator.Dispose();

            if (config.UseSoftNormalization)
            {
                SoftNormalizeFeatureVectors(images);
            }

            ////////////////////////////////////////////////////////////////////////////////////////////////////
            // FOLD ORGANIZER                                                                                 //
            ////////////////////////////////////////////////////////////////////////////////////////////////////
            FoldOrganizer <TaggedImage, string> foldOrganizer = new FoldOrganizer <TaggedImage, string>(images, foldCount, testFoldCount);

            ////////////////////////////////////////////////////////////////////////////////////////////////////
            // CONFUSION MATRIX                                                                               //
            ////////////////////////////////////////////////////////////////////////////////////////////////////
            Mat confusionMatrix = new Mat(tagIndices.Count, tagIndices.Count, DepthType.Cv32F, 1);

            // initialize with zeros
            for (int y = 0; y < confusionMatrix.Rows; ++y)
            {
                for (int x = 0; x < confusionMatrix.Cols; ++x)
                {
                    confusionMatrix.SetValue(x, y, 0F);
                }
            }

            Console.WriteLine("\nstarting Classification. [" + config.classifierMethod + "]");

            for (int iteration = 0; iteration < foldCount; ++iteration)
            {
                Console.WriteLine("\ncurrent iteration: " + iteration);

                Console.WriteLine("train classifier (" + iteration + ")");

                ////////////////////////////////////////////////////////////////////////////////////////////////////
                // CLASSIFIER                                                                                     //
                ////////////////////////////////////////////////////////////////////////////////////////////////////
                Classifier.Classifier <TaggedImage, string, float> classifier;

                switch (config.classifierMethod)
                {
                case ImageUnderstandingConfig.ClassifierMethod.KNearest:
                    classifier = new KNearestClassifier();
                    break;

                case ImageUnderstandingConfig.ClassifierMethod.Random:
                    classifier = new RandomClassifier <TaggedImage, string, float>();
                    break;

                case ImageUnderstandingConfig.ClassifierMethod.SingleResult:
                    classifier = new SingleResultClassifier();
                    break;

                case ImageUnderstandingConfig.ClassifierMethod.SVM:
                    classifier = new SVMClassifier();
                    break;

                default:
                    throw new Exception("Unknown Classifier Method");
                }
                classifier.InitializeViaConfig(config);

                classifier.Train(foldOrganizer.GetTrainingData(iteration));

                // evaluate Test set
                Console.WriteLine("testing (" + iteration + ")");

                List <TaggedImage> testSet = foldOrganizer.GetTestData(iteration);

                foreach (TaggedImage testDataSample in testSet)
                {
                    string evaluatedTag = classifier.Evaluate(testDataSample);

                    int indexOfRealTag      = tagIndices[testDataSample.Tag];
                    int indexOfEvaluatedTag = tagIndices[evaluatedTag];

                    float value = confusionMatrix.GetValue(indexOfRealTag, indexOfEvaluatedTag);
                    value += 1F / (float)foldOrganizer.GetTotalDataCount(testDataSample.Tag);

                    confusionMatrix.SetValue(indexOfRealTag, indexOfEvaluatedTag, value);
                }

                classifier.Dispose();

                foreach (KeyValuePair <string, int> tagIndexPair in tagIndices)
                {
                    float accuracy = confusionMatrix.GetValue(tagIndexPair.Value, tagIndexPair.Value);
                    Console.WriteLine("accuracy = " + string.Format("{0,12:#.0000}%", (accuracy * 100)) + ",\t " + tagIndexPair.Key);
                    //Console.WriteLine("accuracy = " + accuracy + ",\t " + tagIndexPair.Key);
                }
            }

            float        totalAccuracy = 0F;
            List <float> accuracies    = new List <float>();

            foreach (KeyValuePair <string, int> tagIndexPair in tagIndices)
            {
                accuracies.Add(confusionMatrix.GetValue(tagIndexPair.Value, tagIndexPair.Value));
                totalAccuracy += confusionMatrix.GetValue(tagIndexPair.Value, tagIndexPair.Value) / tagIndices.Count;
            }
            Console.WriteLine("total accuracy = " + string.Format("{0,12:#.0000}%", (totalAccuracy * 100)));
            Console.WriteLine("stdDeviation over all total accuracies = " + accuracies.ToArray().StdDeviation());


            for (int x = 0; x < tagIndices.Count; ++x)
            {
                for (int y = 0; y < tagIndices.Count; ++y)
                {
                    confusionMatrix.SetValue(x, y, (float)Math.Sqrt(Math.Sqrt(confusionMatrix.GetValue(x, y))));
                }
            }

            // perform Tests
            string s;

            Test.Test t = new Test.FoldOrganizer_Test();
            t.PerformTest(out s);
            Console.WriteLine(s);

            //visualize accuracy
            {
                String win1 = "Confusion Matrix"; //The name of the window
                CvInvoke.NamedWindow(win1);       //Create the window using the specific name

                int confusionMatrixScale = 5;

                Mat scaledConfusionMatrix = new Mat(confusionMatrix.Cols * confusionMatrixScale, confusionMatrix.Rows * confusionMatrixScale, confusionMatrix.Depth, confusionMatrix.NumberOfChannels);

                for (int y = 0; y < scaledConfusionMatrix.Rows; ++y)
                {
                    for (int x = 0; x < scaledConfusionMatrix.Cols; ++x)
                    {
                        scaledConfusionMatrix.SetValue(x, y, (float)confusionMatrix.GetValue(x / confusionMatrixScale, y / confusionMatrixScale));
                    }
                }

                CvInvoke.Imshow(win1, scaledConfusionMatrix); //Show the image
                CvInvoke.WaitKey(0);                          //Wait for the key pressing event
                CvInvoke.DestroyWindow(win1);                 //Destroy the window if key is pressed
            }
        }
コード例 #11
0
ファイル: Launcher.cs プロジェクト: cric96/-vision_exam
        static TomatoClassifier standardClassifier()
        {
            var extractor = new LBPExtractor(false);

            return(new TomatoClassifier(extractor, SVMClassifier.Linear(0.43f))); //best performance with 0.43
        }
コード例 #12
0
        private void detectBtn_Click(object sender, EventArgs e)
        {
            StringValues sv      = new StringValues();
            Bitmap       bmp     = new Bitmap(inputFilePath);
            int          xmax    = bmp.Width;
            int          ymax    = bmp.Height;
            Bitmap       bwimage = processImage(bmp);

            int[] xaxis = new int[xmax];
            int[] yline = new int[ymax];
            int[] tempx = new int[xmax];
            int[] tempy = new int[ymax];
            int   i = 1, j = 1;

            //calculated y axis
            yaxis = getYArray(xmax, ymax, bwimage);

            //todo- calculate yaxis for each character and store it.

            xaxis = getXArray(xmax, ymax, bwimage, yline);

            int k;

            Bitmap[] croppedImg = new Bitmap[30];
            for (i = 1, j = 2, k = 0; k < (xaxis.Length) / 2; k++)
            {
                try
                {
                    Crop filter = new Crop(new Rectangle(xaxis[i], yaxis[1], (xaxis[j] - xaxis[i]), yaxis[2] - yaxis[1]));
                    croppedImg[k] = filter.Apply(bwimage);
                    ResizeBicubic rbc = new ResizeBicubic(60, 90);
                    croppedImg[k] = rbc.Apply(croppedImg[k]);
                    croppedImg[k].Save(sv.browseFileBoundaryDetectionPath + "\\img_" + k + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                catch
                {
                    break;
                }
                i = i + 2;
                j = j + 2;
            }



            string       loc1 = sv.browseFileBoundaryDetectionPath;
            FileStream   fs   = new FileStream(sv.browseFileFeatureExtractionFile, FileMode.Create, FileAccess.Write);
            StreamWriter sr   = new StreamWriter(fs);

            String[]      straimageloc = System.IO.Directory.GetFiles(loc1, "*.jpg*");
            List <Bitmap> imageList    = new List <Bitmap>();

            foreach (var path in straimageloc)
            {
                Bitmap image = new Bitmap(path);
                imageList.Add(image);
            }
            int    label = 0;
            string data  = label + " ";

            for (int n = 0; n < imageList.Count; n++)
            {
                float  norvar    = 0;
                Bitmap grayimage = processImage(new Bitmap(imageList[n]));

                ResizeBicubic filter = new ResizeBicubic(60, 90);
                grayimage     = filter.Apply(grayimage);
                float[,] zone = new float[90, 60];
                int index = 1;
                for (j = 0; j < 90; j += 10)
                {
                    for (i = 0; i < 60; i += 10)
                    {
                        float  x      = 0;
                        Bitmap sector = grayimage.Clone(new System.Drawing.Rectangle(i, j, 10, 10), grayimage.PixelFormat);
                        for (k = 0; k < 10; k++)
                        {
                            for (int l = 0; l < 10; l++)
                            {
                                if (sector.GetPixel(k, l).Name == "ff000000")
                                {
                                    x++;
                                }
                            }
                        }
                        norvar += x;
                    }
                }
                for (j = 0; j < 90; j += 10)
                {
                    for (i = 0; i < 60; i += 10)
                    {
                        float  x      = 0;
                        Bitmap sector = grayimage.Clone(new System.Drawing.Rectangle(i, j, 10, 10), grayimage.PixelFormat);
                        for (k = 0; k < 10; k++)
                        {
                            for (int l = 0; l < 10; l++)
                            {
                                if (sector.GetPixel(k, l).Name == "ff000000")
                                {
                                    x++;
                                }
                            }
                        }
                        zone[j, i] = x / norvar;
                        data      += index++ + ":" + zone[j, i] + " ";
                    }
                }

                index = 0;

                sr.WriteLine(data);


                data = label + " ";
            }
            label++;
            sr.Flush();
            sr.Close();
            fs.Close();

            SVMClassifier svm = new SVMClassifier();

            svm.Classify();


            foreach (string line in File.ReadLines(sv.finalOutputFile, Encoding.UTF8))
            {
                Console.WriteLine(line);
                string c = Char.ConvertFromUtf32(Int32.Parse(line) + 64);
                outputLabel.Text += c;
            }
        }