本文仅介绍在Android Studio 编程中使用TFLite的问题,关于Python的问题不会涉及;
将转换好的.tflite文件放到android工程目录下的assets中;加载文件的方法: private MappedByteBuffer loadModelFile(Activity activity) throws IOException { AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(MODEL_NAME); //这里的MODEL_NAME是文件的名字,我的是net.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); } 调用运算的方法: //predict类的构造方法,(loadModelFile和 下面的classify都是Predict类中的成员方法 ): public Predict(Activity activity) throws IOException { mInterpreter = new Interpreter(loadModelFile(activity), mOptions); mECGData = ByteBuffer.allocateDirect(4*INPUT_LEN); //这里一定要用allocateDirect方法,不然会出现运算结果一致不变的问题 mECGData.order(ByteOrder.nativeOrder()); } public Result classify(XYSeries mXYSeries){ Log.d(LOG_TAG, String.valueOf(mXYSeries.getItemCount())); mECGData.rewind(); for(int i=0;i<INPUT_LEN;i++){ mECGData.putFloat((float) mXYSeries.getY(i)); // long startTime = SystemClock.uptimeMillis();//计算开始时间 mInterpreter.run(mECGData, mResult);//跑模型计算,输入mImageData,输出mResult; long endTime = SystemClock.uptimeMillis();//计算结束时间 long timeCost = endTime - startTime;//计算所用时间 Log.v(LOG_TAG, "classify(): result = " + Arrays.toString(mResult[0]) + ", timeCost = " + timeCost); return new Result(mResult[0], timeCost); } 使用的过程: 初始化Predict类,调用classify方法;