Android Open Source - wiigee_android_test Classifier






From Project

Back to project page wiigee_android_test.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project wiigee_android_test listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * wiigee - accelerometerbased gesture recognition
 * Copyright (C) 2007, 2008, 2009 Benjamin Poppinga
 * /*from  w  w w  .  ja v  a  2  s .  c  o m*/
 * Developed at University of Oldenburg
 * Contact: wiigee@benjaminpoppinga.de
 *
 * This file is part of wiigee.
 *
 * wiigee is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

package org.wiigee.logic;

import java.util.Vector;

public class Classifier {

  private Vector<GestureModel> gesturemodel; // each gesturetype got its own 
                    // gesturemodel in this vector
  private double lastprob;
  
  public Classifier() {
    this.gesturemodel=new Vector<GestureModel>();
    this.lastprob=0.0;
  }
  
  /** 
   * This method recognize a specific gesture, given to the procedure.
   * For classification a bayes classification algorithm is used.
   * 
   * @param g  gesture to classify
   */
  public int classifyGesture(Gesture g) {
    //Log.write("Recognizing gesture...");
    
    // Wert im Nenner berechnen, nach Bayes
    double sum = 0;
    for(int i=0; i<this.gesturemodel.size(); i++) {
      sum+=this.gesturemodel.elementAt(i).getDefaultProbability()*
          this.gesturemodel.elementAt(i).matches(g);
    }
    
    int recognized = -1; // which gesture has been recognized
    double recogprob = Integer.MIN_VALUE; // probability of this gesture
    double probgesture = 0; // temporal value for bayes algorithm
    double probmodel = 0; // temporal value for bayes algorithm
    for(int i=0; i<this.gesturemodel.size(); i++) {
      //this.gesturemodel.elementAt(i).print(); // Debug
      double tmpgesture = this.gesturemodel.elementAt(i).matches(g);
      double tmpmodel = this.gesturemodel.elementAt(i).getDefaultProbability();
      
      if(((tmpmodel*tmpgesture)/sum)>recogprob) {
        probgesture=tmpgesture;
        probmodel=tmpmodel;
        recogprob=((tmpmodel*tmpgesture)/sum);
        recognized=i;
      }
    }
    
    // a gesture could be recognized
    if(recogprob>0 && probmodel>0 && probgesture>0 && sum>0) {
      this.lastprob=recogprob;
      return recognized;
    } else {
      // no gesture could be recognized
      return -1;
    }
    
  }
  
  public double getLastProbability() {
    return this.lastprob;
  }
  
  public void addGestureModel(GestureModel gm) {
    this.gesturemodel.add(gm);
  }

  public GestureModel getGestureModel(int id) {
    return this.gesturemodel.elementAt(id);
  }
  
  public Vector<GestureModel> getGestureModels() {
    return this.gesturemodel;
  }

    public int getCountOfGestures() {
        return this.gesturemodel.size();
    }
  
  public void clear() {
    this.gesturemodel = new Vector<GestureModel>();
  }
  

}




Java Source Code List

asus4.wiigeeandroid.Logger.java
asus4.wiigeeandroid.MainActivity.java
org.wiigee.control.AndroidWiigee.java
org.wiigee.control.Wiigee.java
org.wiigee.device.AndroidDevice.java
org.wiigee.device.Device.java
org.wiigee.event.AccelerationEvent.java
org.wiigee.event.AccelerationListener.java
org.wiigee.event.ActionStartEvent.java
org.wiigee.event.ActionStopEvent.java
org.wiigee.event.ButtonListener.java
org.wiigee.event.ButtonPressedEvent.java
org.wiigee.event.ButtonReleasedEvent.java
org.wiigee.event.GestureEvent.java
org.wiigee.event.GestureListener.java
org.wiigee.event.MotionStartEvent.java
org.wiigee.event.MotionStopEvent.java
org.wiigee.filter.DirectionalEquivalenceFilter.java
org.wiigee.filter.Filter.java
org.wiigee.filter.HighPassFilter.java
org.wiigee.filter.IdleStateFilter.java
org.wiigee.filter.LowPassFilter.java
org.wiigee.filter.MotionDetectFilter.java
org.wiigee.logic.Classifier.java
org.wiigee.logic.GestureModel.java
org.wiigee.logic.Gesture.java
org.wiigee.logic.HMM.java
org.wiigee.logic.PreciseHMM.java
org.wiigee.logic.ProcessingUnit.java
org.wiigee.logic.Quantizer.java
org.wiigee.logic.TriggeredProcessingUnit.java
org.wiigee.util.FileIO.java
org.wiigee.util.Log.java