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();
}
}
Assinar:
Postar comentários (Atom)
0 comentários:
Postar um comentário