예제 #1
0
        public void RunTest()
        {
            float[] trainFeaturesData =
            {
                2, 2, 2, 2,
                3, 3, 3, 3,
                4, 4, 4, 4,
                5, 5, 5, 5,
                6, 6, 6, 6,
                7, 7, 7, 7
            };
            var trainFeatures = new Mat(6, 4, MatType.CV_32F, trainFeaturesData);

            int[] trainLabelsData = { 2, 3, 4, 5, 6, 7 };
            var   trainLabels     = new Mat(1, 6, MatType.CV_32S, trainLabelsData);

            var kNearest = KNearest.Create();

            kNearest.Train(trainFeatures, SampleTypes.RowSample, trainLabels);

            float[] testFeatureData = { 3, 3, 3, 3 };
            var     testFeature     = new Mat(1, 4, MatType.CV_32F, testFeatureData);

            const int k                 = 1;
            var       results           = new Mat();
            var       neighborResponses = new Mat();
            var       dists             = new Mat();
            var       detectedClass     = (int)kNearest.FindNearest(testFeature, k, results, neighborResponses, dists);

            Assert.Equal(3, detectedClass);
        }
예제 #2
0
        public void SaveLoadTest()
        {
            float[] trainFeaturesData =
            {
                2, 2, 2, 2,
                3, 3, 3, 3,
                4, 4, 4, 4,
                5, 5, 5, 5,
                6, 6, 6, 6,
                7, 7, 7, 7
            };
            var trainFeatures = new Mat(6, 4, MatType.CV_32F, trainFeaturesData);

            int[] trainLabelsData = { 2, 3, 4, 5, 6, 7 };
            var   trainLabels     = new Mat(1, 6, MatType.CV_32S, trainLabelsData);

            const string fileName = "knearest.yml";

            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            using (var model = KNearest.Create())
            {
                model.Train(trainFeatures, SampleTypes.RowSample, trainLabels);

                model.Save(fileName);
            }

            Assert.True(File.Exists(fileName));

            string content = File.ReadAllText(fileName);

            //Console.WriteLine(content);

            // Assert.DoesNotThrow
            using (var model2 = KNearest.Load(fileName))
            {
                GC.KeepAlive(model2);
            }
            using (var model2 = KNearest.LoadFromString(content))
            {
                GC.KeepAlive(model2);
            }
        }
예제 #3
0
        public static void RunKNearest()
        {
            float[] trainFeaturesData =
            {
                2, 2, 2, 2,
                3, 3, 3, 3,
                4, 4, 4, 4,
                5, 5, 5, 5,
                6, 6, 6, 6,
                7, 7, 7, 7
            };
            var trainFeatures = new Mat(6, 4, MatType.CV_32F, trainFeaturesData);

            int[] trainLabelsData = { 2, 3, 4, 5, 6, 7 };
            var   trainLabels     = new Mat(1, 6, MatType.CV_32F, trainLabelsData);

            var kNearest = KNearest.Create();

            kNearest.Train(trainFeatures, SampleTypes.RowSample, trainLabels);

            float[] testFeatureData = { 3, 3, 3, 3 };
            var     testFeature     = new Mat(1, 4, MatType.CV_32F, testFeatureData);

            const int k                 = 1;
            var       results           = new Mat();
            var       neighborResponses = new Mat();
            var       dists             = new Mat();
            var       detectedClass     = (int)kNearest.FindNearest(testFeature, k, results, neighborResponses, dists);

            /*
             * K=1
             * [3]
             * [0]
             *
             * K=4:
             * [3, 2, 4, 5]
             * [0, 4, 4, 16]
             */
            Console.WriteLine("results: {0},{1}", results.Get <int>(0, 0), results.Get <int>(0, 1));
            Console.WriteLine("DetectedClass: {0}", detectedClass);
            Console.WriteLine("neighborResponses: {0}", neighborResponses);
            Console.WriteLine("dists: {0}", dists);
        }
예제 #4
0
        public KNearest TrainData(IList <ImageInfo> trainingImages)
        {
            var samples = new Mat();

            foreach (var trainingImage in trainingImages)
            {
                samples.PushBack(trainingImage.Image);
            }

            var labels        = trainingImages.Select(x => x.ImageGroupId).ToArray();
            var responses     = new Mat(labels.Length, 1, MatType.CV_32SC1, labels);
            var tmp           = responses.Reshape(1, 1); //make continuous
            var responseFloat = new Mat();

            tmp.ConvertTo(responseFloat, MatType.CV_32FC1); // Convert  to float

            var kNearest = KNearest.Create();

            kNearest.Train(samples, SampleTypes.RowSample, responseFloat); // Train with sample and responses
            return(kNearest);
        }