package ar.labs.androidml;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.AssetFileDescriptor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.tensorflow.lite.DataType;
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.support.tensorbuffer.TensorBuffer;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Arrays;
import ar.labs.androidml.ml.Model1;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn= findViewById(R.id.button);
TextView tv= findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try{
EditText inputEditText;
inputEditText = findViewById(R.id.editTextNumberDecimal);
Float data= Float.parseFloat(inputEditText.getText().toString());
ByteBuffer byteBuffer= ByteBuffer.allocateDirect(1*4);
byteBuffer.putFloat(data);
byteBuffer.rewind();
System.out.println("#############################-");
System.out.println(data+"\n"+Arrays.toString(byteBuffer.array())
+ "\nPosition: " + byteBuffer.position()
+ "\nLimit: " + byteBuffer.limit());
float[] input = new float[1];
float[] output = new float[1];
output[0]=4f;input[0]=data;
try (Interpreter interpreter = new Interpreter(loadModelFile())) {
interpreter.run(input[0], output[0]);
interpreter.close();
}
tv.setText(String.valueOf(output[0]));
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(), e.getMessage().toString(),Toast.LENGTH_LONG).show();
}
}
});
}
public MappedByteBuffer loadModelFile() throws IOException {
String MODEL_ASSETS_PATH = "model1.tflite";
AssetFileDescriptor assetFileDescriptor = getApplicationContext().getAssets().openFd(MODEL_ASSETS_PATH) ;
FileInputStream fileInputStream = new FileInputStream( assetFileDescriptor.getFileDescriptor() ) ;
FileChannel fileChannel = fileInputStream.getChannel() ;
long startoffset = assetFileDescriptor.getStartOffset() ;
long declaredLength = assetFileDescriptor.getDeclaredLength() ;
return fileChannel.map( FileChannel.MapMode.READ_ONLY , startoffset , declaredLength ) ;
}
}