300x250 AD TOP

Blogger news

AD (728x90)

Tecnologia do Blogger.

Colaboradores

Seguidores

Postagens populares

Tagged under:

Usando a lib do Weka no Android

package com.eribeiro.epilepsia; import android.app.Activity; import android.content.Context; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import weka.classifiers.misc.SerializedClassifier; import weka.core.Attribute; import weka.core.DenseInstance; import weka.core.Instance; import weka.core.Instances; public class ManagerWeka { private Context context; private File tempFile; private SerializedClassifier classifier; public ManagerWeka(Context context){ this.context = context; InputStream iS = null; try { iS = context.getAssets().open("resultado.model"); init(iS); classifier = new SerializedClassifier(); classifier.setModelFile(this.tempFile); } catch (IOException e) { e.printStackTrace(); } } private void init(InputStream in) throws IOException { tempFile = File.createTempFile("tempFile", ".tmp"); tempFile.deleteOnExit(); FileOutputStream fout = null; try { fout = new FileOutputStream(tempFile); int c; while ((c = in.read()) != -1) { fout.write(c); } }finally { if (in != null) { in.close(); } if (fout != null) { fout.close(); } } } private Instances dataSet; public void executarClassificador(Instance instanceTest){ System.out.println("Inicio"); double pred = 0; try { pred = classifier.classifyInstance(instanceTest); //System.out.print(instanceTest.toString(instanceTest.classIndex()) + " - "); System.out.print(instanceTest.classAttribute().value((int) pred) + " - "); System.out.println("Fim"); } catch (Exception e) { e.printStackTrace(); } } public double[] lerCSV() throws IOException { double[] sensores = new double[15]; String arquivoCSV = "/home/eribeiro/Documentos/weka-3-7-12/data/promobile/gise.icomp.ufam.edu.br/embarcados/logs/Crise Epileptica_2015_9_15_21:39:39.csv"; try{ BufferedReader br = new BufferedReader(new FileReader(arquivoCSV )); String linha; while ((linha = br.readLine()) != null) { String csvDivisor=","; String[] dados = linha.split(csvDivisor); //System.out.println("tam: "+dados.length); for(int i=0;i < dados.length-2; i++){ sensores[i] = Double.valueOf(dados[i]); } Instance instance = inserirInstaciaWeka(sensores); executarClassificador(instance); } } catch(Exception e){ e.printStackTrace(); } return sensores; } public void classificar(String[] dados){ double[] sensores = new double[15]; for(int i=0;i < dados.length-2; i++){ sensores[i] = Double.valueOf(dados[i]); } Instance instance = inserirInstaciaWeka(sensores); executarClassificador(instance); } public Instance inserirInstaciaWeka(double[] dados){ Attribute accelx = new Attribute("Accel_x"); Attribute accely = new Attribute("Accel_y"); Attribute accelz = new Attribute("Accel_z"); Attribute linearAccelx = new Attribute("linearAccelx"); Attribute linearAccely = new Attribute("linearAccely"); Attribute linearAccelz = new Attribute("linearAccelz"); Attribute Gyro_x = new Attribute("Gyro_x"); Attribute Gyro_y = new Attribute("Gyro_y"); Attribute Gyro_z = new Attribute("Gyro_z"); Attribute Azimuth = new Attribute("Azimuth"); Attribute Pitch = new Attribute("Pitch"); Attribute Roll = new Attribute("Roll"); Attribute Rotation_x = new Attribute("Rotation_x"); Attribute Rotation_y = new Attribute("Rotation_y"); Attribute Rotation_z = new Attribute("Rotation_z"); ArrayList labels = new ArrayList(); labels.add("Desmaio"); labels.add("andando"); labels.add("parado"); labels.add("sentado"); Attribute cls = new Attribute("class", labels); ArrayList attributes = new ArrayList(); attributes.add(accelx); attributes.add(accely); attributes.add(accelz); attributes.add(Gyro_x); attributes.add(Gyro_y); attributes.add(Gyro_z); attributes.add(linearAccelx); attributes.add(linearAccely); attributes.add(linearAccelz); attributes.add(Azimuth); attributes.add(Pitch); attributes.add(Roll); attributes.add(Rotation_x); attributes.add(Rotation_y); attributes.add(Rotation_z); attributes.add(cls); dataSet = new Instances("ESDN", attributes, 0); double[] values = new double[dataSet.numAttributes()]; for(int i=0;i<15;i++){ values[i] = dados[i]; } dataSet.add(new DenseInstance(1, values)); dataSet.setClassIndex(15); return dataSet.firstInstance(); } }

0 comentários:

Postar um comentário