Skip to content

Commit

Permalink
Ultimi ritocchi wiigesture: aggiunti parametri per tests automatizzati.
Browse files Browse the repository at this point in the history
  • Loading branch information
andrea committed Dec 29, 2008
1 parent f90246b commit cf9db99
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 19 deletions.
4 changes: 2 additions & 2 deletions hmm/include/GestureModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ class GestureModel
void setQuantizer(Quantizer2* newQuant);
Quantizer2* getQuantizer();

void trainQuantizer( std::vector<Gesture> dataset );
void trainQuantizer( std::vector<Gesture> dataset, int considered_gestures );
bool isQuantizerTrained();

void trainHMM(std::vector<Gesture > trainSet);
void trainHMM( std::vector<Gesture > trainSet, int considered_gestures );
std::vector<double > evaluateGestures(std::vector<Gesture >& testSet);

protected:
Expand Down
2 changes: 1 addition & 1 deletion hmm/include/quantizer2.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class Quantizer2{
std::vector<int> getDiscreteSequence(Gesture& gesture);

// addestra i centroidi
void train(std::vector<Gesture> gestures);
void train(std::vector<Gesture> gestures, int considered_gestures);

~Quantizer2();

Expand Down
16 changes: 12 additions & 4 deletions hmm/src/GestureModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,26 @@ Quantizer2* GestureModel::getQuantizer(){
return this->quant;
}

void GestureModel::trainQuantizer( std::vector<Gesture> dataset ){
quant->train(dataset);
void GestureModel::trainQuantizer( std::vector<Gesture> dataset, int considered_gestures ){
quant->train(dataset, considered_gestures);
this->quantizerTrained = true;
}

bool GestureModel::isQuantizerTrained(){
return this->quantizerTrained;
}

void GestureModel::trainHMM(std::vector<Gesture > trainSet){
void GestureModel::trainHMM(std::vector<Gesture > trainSet, int considered_gestures){
std::vector<std::vector<int> > discreteTrainSet;
for(int i=0; i<trainSet.size(); i++){

int gesture_number;
if(considered_gestures<trainSet.size()){
gesture_number = considered_gestures;
}else{
gesture_number = trainSet.size();
}

for(int i=0; i<gesture_number; i++){
discreteTrainSet.push_back( quant->getDiscreteSequence(trainSet.at(i)) );
}
gestureHMM->trainMS( discreteTrainSet );
Expand Down
28 changes: 19 additions & 9 deletions hmm/src/crossvalidation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ return dataset;
int main(int argc, char** argv)
{
//parsing degli input
if(argc < 9){
std::cout<<"USO: wiiGesture <train_file1> <train_file2> <train_file3> <validation_file1> <validation_file2> <validation_file3> <num_stati> <span>"<<std::endl;
if(argc < 11){
std::cout<<"USO: wiiGesture <train_file1> <train_file2> <train_file3> <validation_file1> <validation_file2> <validation_file3> <num_stati> <span> <numero_epoche> <numero_gesture_considerate>"<<std::endl;
return 1;
}

Expand All @@ -106,7 +106,15 @@ int main(int argc, char** argv)
int span;
s_span >> span;

std::cout<<"numero stati: "<<stati<<" | span: "<<span<<std::endl;
std::istringstream s_epoche(argv[9]);
int required_epoche;
s_epoche >> required_epoche;

std::istringstream s_consGest(argv[10]);
int gesture_considerate;
s_consGest >> gesture_considerate;

std::cout<<"numero stati: "<<stati<<" | span: "<<span<<" | epoche: "<<required_epoche<<" | gesture considerate: "<<gesture_considerate<<std::endl;

//Costruzione dei Trainset
std::vector<Gesture> trainset1 = importDataFile(train1);
Expand All @@ -129,16 +137,18 @@ int main(int argc, char** argv)
gesture3 = new GestureModel(stati, span);

//Addestramento dei quantizzatore
gesture1->trainQuantizer(trainset1);
gesture2->trainQuantizer(trainset2);
gesture3->trainQuantizer(trainset3);
gesture1->trainQuantizer(trainset1, gesture_considerate);
gesture2->trainQuantizer(trainset2, gesture_considerate);
gesture3->trainQuantizer(trainset3, gesture_considerate);

std::cout<<"quantizerS: OK"<<std::endl;

//Addestramento HMMs
gesture1->trainHMM(trainset1);
gesture2->trainHMM(trainset2);
gesture3->trainHMM(trainset3);
for(int epoche =0; epoche<=required_epoche; epoche++){
gesture1->trainHMM(trainset1, gesture_considerate);
gesture2->trainHMM(trainset2, gesture_considerate);
gesture3->trainHMM(trainset3, gesture_considerate);
}

std::cout<<"hmmS: TRAINED"<<std::endl;

Expand Down
2 changes: 1 addition & 1 deletion hmm/src/discretizzazione.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ int main(int argc, char** argv){
}

Quantizer2 q;
q.train(dataset);
q.train(dataset, 90000);//da rivedere mettendo qualcosa di sensato come numero di gesture considerate così le considera tutte

for(int k=0; k<dataset_size; k++){

Expand Down
10 changes: 8 additions & 2 deletions hmm/src/quantizer2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,18 @@ void Quantizer2::init(Gesture gesture){
}


void Quantizer2::train(std::vector<Gesture> gestures){
void Quantizer2::train(std::vector<Gesture> gestures, int considered_gestures){
//metagesture: contiene tutte le componenti di tutte le gesture.
Gesture gesture;

//costruzione della metagesture
for(int k=0; k<gestures.size(); k++){
int gesture_number;
if(considered_gestures<gestures.size()){
gesture_number = considered_gestures;
}else{
gesture_number = gestures.size();
}
for(int k=0; k<gesture_number; k++){
std::vector<Sample_3d> curGesturData = gestures.at(k).getData();
for(int w=0; w<curGesturData.size(); w++){
gesture.add( curGesturData.at(w) );
Expand Down

0 comments on commit cf9db99

Please sign in to comment.