Revision 22 Gestures.h

Gestures.h (revision 22)
96 96
	void trainWithSamples(vector<GestureSample> trainingSet, string gestureName)
97 97
	{
98 98
		vector<vector<vector<double> > > trnsfTrain = transformSamples(trainingSet);
99
		//Use the first sample as the representative
100
		scale_filter filter = scale_filter(trnsfTrain[0][0]);
101
		//Ensure the training set is appropriately scaled
102
		vector<vector<vector<double> > > trnsfScaled = trnsfTrain;
99
		//Magical filter takes care of all preprocessing, and live processing of the incoming sample(s).
100
		multitouch_filter filter = multitouch_filter(trnsfTrain);
101

  
102
		//Ensure the training set is appropriately scaled for training the model.
103
		vector<vector<vector<double> > > filteredTraining = trnsfTrain;
103 104
		for(size_t i = 0; i < trnsfTrain.size(); i++)
104 105
		{
105
			boost::copy(trnsfTrain[i] | boost::adaptors::transformed(filter),trnsfScaled[i].begin());
106
			filter.reset_params_for(trnsfTrain[i]);
107
			boost::copy(trnsfTrain[i] | boost::adaptors::transformed(filter),filteredTraining[i].begin());
106 108
		}
107
		cout << "Training With: " << trnsfScaled.size() << " samples" << endl;
108
		classifier.addGestureWithExamplesAndFilter(trnsfScaled, 11, filter);
109

  
110
		cout << "Training With: " << filteredTraining.size() << " samples" << endl;
111
		classifier.addGestureWithExamplesAndFilter(filteredTraining, 5, filter);
109 112
		gestureNameMap.insert(pair<int, string>(classifier.numGestures() - 1, gestureName));
110
		cout << "Added: " << gestureName << " as gesture number: " << classifier.numGestures() - 1 << "\n"<<endl;
113
		cout << "\nAdded new gesture(" << classifier.numGestures() - 1 << "): " << gestureName << "\n"<<endl;
111 114
	}
112 115

  
113 116
	string classify(GestureSample sample)
......
115 118
		vector<vector<double> > transformed = sample.transform();
116 119
		//printTransform(transformed);
117 120
		int classIndex = classifier.classify(transformed);
118
		if(classIndex >= 0 && ((unsigned int)classIndex) < gestureNameMap.size())
121
		vector<long double> probs = classifier.probabilities();
122

  
123
		bool allZero = true;
124
		for(unsigned int i = 0 ; i < probs.size(); i++)
125
		{
126
			if(probs[i] > 0)
127
				allZero = false;
128
			cout << probs[i] << ", ";
129
		}
130
		cout << endl;
131

  
132
		if(!allZero && classIndex >= 0 && ((unsigned int)classIndex) < gestureNameMap.size())
119 133
			return gestureNameMap[classIndex];
120
		else //classIndex == -1 when sample doesn't match any filter-model pair
134
		else //classIndex == -1 || allZero probabilities when sample doesn't match any filter-model pair
121 135
			return "None";
122 136
	}
123 137

  

Also available in: Unified diff