/**
  * Performs hmm train for all training data set.<br>
  * First quantizes the feature vector against codebook, and then train baum-welch
  *
  * @return
  */
 public boolean trainHMM() {
   boolean operationSuccess = false;
   codebook = new Codebook();
   database.setMode(DBMode.TRAINDATA);
   Model[][] regModels = database.readAllDataofCurrentMode();
   String[] gestName = database.getRegisteredModelNames();
   int quantizedSeq[][];
   HiddenMarkov mkv = new HiddenMarkov(NUM_STATES, NUM_SYMBOLS);
   // for each gesture
   for (int i = 0; i < regModels.length; i++) {
     operationSuccess = false;
     // for each train sample of current gesture
     quantizedSeq = new int[regModels[i].length][];
     for (int j = 0; j < regModels[i].length; j++) {
       GestureFeature[] gf = getFeature((RawFeature) regModels[i][j]);
       Points[] pts = getPointsFromFeatureVector(gf);
       quantizedSeq[j] = codebook.quantize(pts);
     }
     mkv.setTrainSeq(quantizedSeq);
     mkv.train();
     mkv.save(gestName[i]);
     operationSuccess = true;
   }
   return operationSuccess;
 }
 public String[] readTrainData1D() {
   database.setMode(DBMode.TRAINDATA);
   return (database.getRegisteredModelNames());
 }
 public String[] readRegGestureModels() {
   database.setMode(DBMode.HMM_MODEL);
   return (database.getRegisteredModelNames());
 }