Как сравнить модели, уже классифицированные в Kinect C #? - PullRequest
0 голосов
/ 20 мая 2019

Я делаю проект с Kinect в C #.

Я извлекаю функции лица и записываю их в файлы ".arff" (некоторые из них в каталог под названием "training", а другие вкаталог под названием "тест").Каждый из файлов .arff имеет рамки для каждой функции.Например, "lipLeftCorner.arff", "lipRightCorner.arff" ...

Я объединяю все файлы .arff и получаю файл "final.arff".

Затем с помощьюклассификатор (например, Дерево решений J48), я читаю файл "final.arff" и обучаю классификатор.Он дает вывод правильных чисел из соответствующего размера обучения.

Мой вопрос: как мне сравнить эту модель обучения с Kinect в реальном времени?

У меня есть код для Kinectсравнить с базой данных Visual Gesture Builder (файлы ".gbd"), но как я могу сравнить с этой моделью классификатора?Могу ли я сериализовать эту модель в файл «.gbd» или другой файл, к которому у Kinect есть доступ?

Спасибо за ваше время.

public static void ClassifyDecisionTree()
        {
            string result = "";
            insts = MergeInstances();

            try
            {
                insts.setClassIndex(insts.numAttributes() - 1);

                weka.classifiers.Classifier cl = new weka.classifiers.trees.J48();

                // Randomize the order of the instances in the dataset
                weka.filters.Filter myRandom = new weka.filters.unsupervised.instance.Randomize();
                myRandom.setInputFormat(insts);
                insts = weka.filters.Filter.useFilter(insts, myRandom);

                int trainSize = insts.numInstances() * percentSplit / 100;
                int testSize = insts.numInstances() - trainSize;
                Instances train = new Instances(insts, 0, trainSize);

                cl.buildClassifier(train);
                int numCorrect = 0;
                for (int i = trainSize; i < insts.numInstances(); i++)
                {
                    Instance currentInst = insts.instance(i);
                    double predictedClass = cl.classifyInstance(currentInst);
                    if (predictedClass == insts.instance(i).classValue())
                        numCorrect++;
                }

                result += numCorrect + " out of " + testSize + " correct (" + (double)numCorrect / (double)testSize * 100.0 + "%) ";

                Console.WriteLine("Decision Tree: " + result);

                // Serialize model
                //java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(new java.io.FileOutputStream(pathModels + file.Name.Substring(0, file.Name.Length - 5) + ".gbd")); // ???
               // oos.writeObject(cl);
                //oos.flush();
                //oos.close();
            }
            catch (Exception)
            {
                Console.WriteLine("Error: Decision Tree Classifier.");
            }

        }
...