public RecognizerResult RecognizeSingleGesture(InputGesture g)
        {
            var features = mValidFeatures.Take(mValidFeatures.Count - 1).Select(x => Features.AllFeatures.GestureFeatures[x]).ToList();
            //Console.WriteLine("{0} features to be checked", features.Count);

            var results = new List <GestureWeight>();

            foreach (var kvp in mWeights)
            {
                GestureWeight gw = new GestureWeight()
                {
                    name = kvp.Key
                };
                for (int i = 0; i < features.Count; i++)
                {
                    float fres = features[i].QueryGesture(g);
                    gw.weight += kvp.Value[i] * fres;
                }
                gw.weight += kvp.Value[mValidFeatures.Count - 1];
                gw.weight  = Utility.Sigmoid(gw.weight);
                results.Add(gw);
            }

            results.Sort();
            return(new RecognizerResult()
            {
                Gesture1 = results[0].name, Confidence1 = (float)results[0].weight,
                Gesture2 = results[1].name, Confidence2 = (float)results[1].weight,
                Gesture3 = results[2].name, Confidence3 = (float)results[2].weight
            });
        }
        public RecognizerResult RecognizeSingleGesture(InputGesture g)
        {
            List <Features.IGestureFeature> features = Features.AllFeatures.GestureFeatures;

            var results = new List <GestureWeight>();

            foreach (var kvp in mWeights)
            {
                GestureWeight gw = new GestureWeight()
                {
                    name = kvp.Key
                };
                gw.weight = kvp.Value[features.Count];
                for (int i = 0; i < features.Count; i++)
                {
                    float fres = features[i].QueryGesture(g);
                    gw.weight += kvp.Value[i] * fres;
                }
                gw.weight = Math.Exp(gw.weight);
                results.Add(gw);
            }
            double total_weight = 0;

            for (int i = 0; i < results.Count; i++)
            {
                total_weight += results[i].weight;
            }
            for (int i = 0; i < results.Count; i++)
            {
                results[i].weight = 1.0 * results[i].weight / total_weight;
            }

            results.Sort();
            return(new RecognizerResult()
            {
                Gesture1 = results[0].name, Confidence1 = (float)results[0].weight,
                Gesture2 = results[1].name, Confidence2 = (float)results[1].weight,
                Gesture3 = results[2].name, Confidence3 = (float)results[2].weight
            });
        }
        public RecognizerResult RecognizeSingleGesture(InputGesture g)
        {
            var results = new List <GestureWeight>();

            foreach (var kvp in mWeights)
            {
                GestureWeight gw = new GestureWeight()
                {
                    name = kvp.Key
                };
                for (int i = 0; i < mFeatures.Count; i++)
                {
                    bool fp = mFeatures[i].QueryGesture(g);
                    if (fp)
                    {
                        gw.weight += kvp.Value[i * 2];
                    }
                    else
                    {
                        gw.weight += kvp.Value[i * 2 + 1];
                    }
                }
                results.Add(gw);
            }

            results.Sort();
            results.Reverse();
            float norm = (float)mFeatures.Count;

            return(new RecognizerResult()
            {
                Gesture1 = results[0].name, Confidence1 = results[0].weight / norm,
                Gesture2 = results[1].name, Confidence2 = results[1].weight / norm,
                Gesture3 = results[2].name, Confidence3 = results[2].weight / norm
            });
        }