整个android项目起源于tensorflow官方的例子Camera2BasicFragment。 我们对其进行编辑以满足我们检测人体运动的需求。 但是,当我们尝试将tflite文件加载到Asset文件夹下时,出现了一些问题。
我是否编写了自定义代码:否
OS平台和发行版(例如Linux Ubuntu 16.04):OSX 10.12.3
移动设备:ASUS_X00ID
从(源或二进制)安装的TensorFlow:
TensorFlow版本(使用下面的命令):1.14.0
Python版本:3.6.9
Bazel版本(如果从源代码编译):无
GCC /编译器版本(如果从源代码编译):无
CUDA / cuDNN版本:无
GPU模型和内存:无
这是我们尝试加载模型的代码 错误产生于 这条线 当我们尝试将其放在手机上时,它陷入陷阱并显示错误消息“ JAVA.LANG.ILLEGALARGUMENTEXCEPTION:MAPPEDBYTEBUFFER不是有效的FLATBUFFER模型” 我们假定它与“ MAPPREDBYTEBUFFER”有关,但是问题是我们确实创建了一个非常简单的项目来测试负载模型过程,并且没有显示错误。
private void trymodel(){
String modelFile="LSTM_1.tflite";
Interpreter tflite = null;
try {
tflite=new Interpreter(loadModelFile(CameraActivity.this));
} catch (Exception e) {
testmodel_but.setText(String.valueOf(e));
}
float[][][] inputX;
inputX = new float[1][1][22];
//random the array
Random random=new Random();
for( int i = 0 ; i < inputX.length ; i++ ) {
for ( int j = 0 ; j < inputX[i].length ; j++ ) {
for (int k=0;k < inputX[j].length ; k++){
inputX[i][j][k]= random.nextInt(101);
}
}
}
我们加载模型文件的功能
private MappedByteBuffer loadModelFile(Activity activity) throws Exception {
AssetFileDescriptor fileDescriptor = activity.getAssets().openFd("LSTM_1.tflite");
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
FileChannel fileChannel = inputStream.getChannel();
long startOffset = fileDescriptor.getStartOffset();
long declaredLength = fileDescriptor.getDeclaredLength();
return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
}