convert_model.tflite не кодирует допустимую модель TensorFlowLite: не удалось открыть file_path. Модель не является допустимым файлом Flatbuffer - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь загрузить converted_tflite.tflite из каталога ресурсов.
Это дает мне ошибку java.lang.IllegalArgumentException: Contents of /file:/android_asset/converted_model.tflite does not encode a valid TensorFlowLite model: Could not open '/file:/android_asset/converted_model.tflite'.The model is not a valid Flatbuffer file

File file = new File("file:///android_asset/converted_model.tflite");
        try (Interpreter interpreter = new Interpreter(file)) {
            interpreter.run(inputData, output);
            Log.d("TF LOG", output);
        }catch(Exception e){
            e.printStackTrace();
}

То, что я пробовал на основе ответов stackoverflow

aaptOptions {
    noCompress "tflite"
}

Nightsoflow-Lite ночная версия

implementation 'org.tensorflow:tensorflow-lite:0.1.2-nightly'

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Я использовал версию Grace с поддержкой тензорного потока 0.1.2

    implementation 'org.tensorflow:tensorflow-lite:0.1.2-nightly'

Для загрузки модели

/** Memory-map the model file in Assets. */
private static MappedByteBuffer loadModelFile(AssetManager assets, String modelFilename)
        throws IOException {
    AssetFileDescriptor fileDescriptor = assets.openFd(modelFilename);
    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);
}
1 голос
/ 23 мая 2019

Как показывает ошибка model is not a valid Flatbuffer file. В вашей реализации модель выглядит как File. Он должен быть преобразован в файл flatbuffer, как показано ниже,

FileInputStream f_input_stream= new FileInputStream(new File("file:///android_asset/converted_model.tflite"));
FileChannel f_channel = f_input_stream.getChannel();
MappedByteBuffer tflite_model = f_channel.map(FileChannel.MapMode.READ_ONLY, 0, f_channel .size());

И чем вы можете использовать этот tflite_model для создания интерпретатора tflite как New Interpreter(...).

...