Esempio n. 1
0
        /// <summary>
        /// predict
        /// </summary>
        /// <param name="svm"></param>
        /// <param name="src"></param>
        /// <returns></returns>
        static float Predict(SVM svm, Mat src)
        {
            var hog  = new HOGDescriptor(new Size(64, 64), new Size(16, 16), new Size(8, 8), new Size(8, 8));
            Mat data = Mat.Zeros(1, hog.GetDescriptorSize(), MatType.CV_32FC1);

            Cv2.Resize(src, src, new Size(64, 64));

            src = src.Threshold(200, 255, ThresholdTypes.Binary);

            MoveToCenter(src);

            var descriptors = hog.Compute(src, new Size(1, 1), new Size(0, 0));

            for (var i = 0; i < descriptors.Length; i++)
            {
                data.Set(0, i, descriptors[i]);
            }
            return(svm.Predict(data));
        }
Esempio n. 2
0
        /// <summary>
        /// train model
        /// </summary>
        static void Train()
        {
            //load catalog
            var paras   = File.ReadAllLines("JPEGImages\\SVM_Train.txt");
            var imgPath = new List <string>();
            var imgCatg = new List <int>();
            var nImgCnt = paras.Length;

            foreach (var i in paras)
            {
                var temp = i.Split(':');
                imgPath.Add(temp[1]);
                imgCatg.Add(Convert.ToInt32(temp[0]));
            }

            //create HOG
            var hog = new HOGDescriptor(new Size(64, 64), new Size(16, 16), new Size(8, 8), new Size(8, 8));

            Mat data = Mat.Zeros(nImgCnt, hog.GetDescriptorSize(), MatType.CV_32FC1);
            Mat res  = Mat.Zeros(nImgCnt, 1, MatType.CV_32SC1);

            for (var z = 0; z < nImgCnt; z++)
            {
                //load img
                Mat src = Cv2.ImRead(imgPath[z], ImreadModes.GrayScale);
                Console.WriteLine($"Processing: {Path.GetFileNameWithoutExtension(imgPath[z])}");

                //resize to 64*64
                Cv2.Resize(src, src, new Size(64, 64));

                //threshold
                src = src.Threshold(200, 255, ThresholdTypes.Binary);

                //center image
                MoveToCenter(src);

                //computer descriptors
                var descriptors = hog.Compute(src, new Size(1, 1), new Size(0, 0));
                for (var i = 0; i < descriptors.Length; i++)
                {
                    data.Set(z, i, descriptors[i]);
                }
                res.Set(z, 0, imgCatg[z]);
                src.Release();
            }

            Console.WriteLine("Start training");

            //create svm
            var svm = SVM.Create();

            svm.TermCriteria = new TermCriteria(CriteriaType.Eps, 1000, float.Epsilon);
            svm.Type         = SVM.Types.CSvc;
            svm.KernelType   = SVM.KernelTypes.Rbf;
            svm.Degree       = 10;
            svm.Gamma        = 0.09;
            svm.Coef0        = 1;
            svm.C            = 10;
            svm.Nu           = 0.5;
            svm.P            = 1;

            //training
            svm.Train(data, SampleTypes.RowSample, res);

            //save result
            svm.Save("SVM_RESULT.xml");
        }