Android Open Source - wiigee_android_test File I O






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
 * //  w w w . j ava  2  s .  co 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.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.wiigee.logic.GestureModel;
import org.wiigee.logic.HMM;
import org.wiigee.logic.Quantizer;

/**
 * This is a static class to support saving and loading complete gestures. I've
 * choosen not to use some kind of XML, because the big multidimensional arrays
 * would cause a huge senseless amount of xml-data. So KISS: Keep It Simple,
 * Stupid! ;) Comma-separated-vectors with some control data.
 * 
 * @author Benjamin 'BePo' Poppinga
 * 
 */
public class FileIO {

  public static void writeToFile(GestureModel m, String name) {
    try {
      // initialize file and get values
      BufferedWriter out = new BufferedWriter(new FileWriter(name+".txt"));
      int numStates = m.getNumStates();
      int numObservations = m.getNumObservations();
      double defaultProbability = m.getDefaultProbability();
      Quantizer quantizer = m.getQuantizer();
      HMM hmm = m.getHMM();
      
      out.write("# numStates:");
      out.newLine();
      out.write(Integer.toString(numStates));
      out.newLine();
      
      out.write("# numObservations:");
      out.newLine();
      out.write(Integer.toString(numObservations));
      out.newLine();
      
      out.write("# defaultProbability:");
      out.newLine();
      out.write(Double.toString(defaultProbability));
      out.newLine();
      
      out.write("# Quantizer: Radius");
      out.newLine();
      out.write(Double.toString(quantizer.getRadius()));
      out.newLine();
      out.write("# Quantizer: MAP");
      out.newLine();
      double[][] map = quantizer.getHashMap();
      for(int v=0; v<map.length; v++) {
        double[] d = map[v];
        out.write(Double.toString(d[0])+", "+Double.toString(d[1])+", "+Double.toString(d[2]));
        out.newLine();
      }
      
      out.write("# HMM: PI");
      out.newLine();
      double[] pi = hmm.getPi();
      for (int i=0; i<numStates; i++) {
        if(i==numStates-1) {
          out.write(Double.toString(pi[i]));
          out.newLine();
        } else {
          out.write(Double.toString(pi[i])+", ");
        }
      }
      
      out.write("# HMM: A");
      out.newLine();
      double[][] a = hmm.getA();
      for(int i=0; i<numStates; i++) {
        for(int j=0; j<numStates; j++) {
          if(j==numStates-1) {
            out.write(Double.toString(a[i][j]));
            out.newLine();
          } else {
            out.write(Double.toString(a[i][j])+", ");
          }
        }
      }
      
      out.write("# HMM: B");
      out.newLine();
      double[][] b = hmm.getB();
      for(int i=0; i<numStates; i++) {
        for(int j=0; j<numObservations; j++) {
          if(j==numObservations-1) {
            out.write(Double.toString(b[i][j]));
            out.newLine();
          } else {
            out.write(Double.toString(b[i][j])+", ");
          }
        }
      }
      
      out.write("# END");
      
      // close file
      out.flush();
      out.close();
    } catch (IOException e) {
      System.out.println("Error: Write to File!");
      e.printStackTrace();
    }
  }

  public static GestureModel readFromFile(String name) {
    try {
      // initialize file and create values
      BufferedReader in = new BufferedReader(new FileReader(name+".txt"));
      int numStates = 0;
      int numObservations = 0;
      double defaultprobability = 0;
      double radius = 0;
      double[][] map = new double[numObservations][3];
      double[] pi = new double[numStates];
      double[][] a = new double[numStates][numStates];
      double[][] b = new double[numStates][numObservations];
      
      String line;
      int position = 0;
      while(in.ready()) {
        line = in.readLine();
        if(!line.startsWith("#")) { // isn't a comment
          switch (position++) {
          case 0:
            numStates = Integer.parseInt(line);
            break;
          case 1:
            numObservations = Integer.parseInt(line);
            break;
          case 2:
            defaultprobability = Double.parseDouble(line);
            break;
          case 3:
            radius = Double.parseDouble(line);
            break;
          case 4:
            map = new double[numObservations][3];
            for(int i=0; i<numObservations; i++) {
              String s[] = line.split(", ");
              double[] d = new double[] { Double.parseDouble(s[0]),
                            Double.parseDouble(s[1]),
                            Double.parseDouble(s[2]) };
              map[i] = d;
              line = in.ready() ? in.readLine() : "";
            }
            break;
          case 5:
            pi = new double[numStates];
            String pi_row[] = line.split(", ");
            for(int i=0; i<numStates; i++) {
              pi[i] = Double.parseDouble(pi_row[i]);
            }
            break;
          case 6:
            a = new double[numStates][numStates];
            for(int i=0; i<numStates; i++) {
              String a_row[] = line.split(", ");
              for(int j=0; j<numStates; j++) {
                a[i][j] = Double.parseDouble(a_row[j]);
              }
              line = in.ready() ? in.readLine() : "";
            }
            break;
          case 7:
            b = new double[numStates][numObservations];
            for(int i=0; i<numStates; i++) {
              String b_row[] = line.split(", ");
              for(int j=0; j<numObservations; j++) {
                b[i][j] = Double.parseDouble(b_row[j]);
              }
              line = in.ready() ? in.readLine() : "";
            }
            break;
          default:
            System.out.println("SWITCH EMPTY!");
            break;
          }
        }
      }
      
      GestureModel ret = new GestureModel();
      ret.setDefaultProbability(defaultprobability);
      
      Quantizer quantizer = new Quantizer(numStates);
      quantizer.setUpManually(map, radius);
      ret.setQuantizer(quantizer);
      
      HMM hmm = new HMM(numStates, numObservations);
      hmm.setPi(pi);
      hmm.setA(a);
      hmm.setB(b);
      ret.setHMM(hmm);
      
      return ret;
    } catch (Exception e) {
      System.out.println("Error: Read from File!");
      e.printStackTrace();
    }
    return null; // bad error case
  }

}




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