Flutter не может обнаружить файл model.tflite из папки ресурсов (FileNotFoundException)

Фон

Я делаю приложение для классификации фруктов, используя флаттер в студии Android. Приложение будет работать следующим образом:

  1. Сделайте снимок с помощью камеры.
  2. Предскажите вид фруктов на картинке.

Для выполнения шага (2) я использую файл 'model.tflite', который был экспортирован из обучающая машина. Я также использую плагин tflite для флаттера.

Эта проблема

Когда моя программа пытается предсказать изображение, я получаю в консоли следующее сообщение:


    E/MethodChannel#tflite( 7296): Failed to handle method call
    E/MethodChannel#tflite( 7296): java.lang.IllegalArgumentException: Unsupported value: java.io.FileNotFoundException: flutter_assets/assets/model.tflite
    E/MethodChannel#tflite( 7296):  at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:278)
    E/MethodChannel#tflite( 7296):  at io.flutter.plugin.common.StandardMethodCodec.encodeErrorEnvelope(StandardMethodCodec.java:69)
    E/MethodChannel#tflite( 7296):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:236)
    E/MethodChannel#tflite( 7296):  at sq.flutter.tflite.TflitePlugin.onMethodCall(TflitePlugin.java:98)
    E/MethodChannel#tflite( 7296):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
    E/MethodChannel#tflite( 7296):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
    E/MethodChannel#tflite( 7296):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
    E/MethodChannel#tflite( 7296):  at android.os.MessageQueue.nativePollOnce(Native Method)
    E/MethodChannel#tflite( 7296):  at android.os.MessageQueue.next(MessageQueue.java:336)
    E/MethodChannel#tflite( 7296):  at android.os.Looper.loop(Looper.java:197)
    E/MethodChannel#tflite( 7296):  at android.app.ActivityThread.main(ActivityThread.java:7948)
    E/MethodChannel#tflite( 7296):  at java.lang.reflect.Method.invoke(Native Method)
    E/MethodChannel#tflite( 7296):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    E/MethodChannel#tflite( 7296):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
    I/flutter ( 7296):  
    I/flutter ( 7296): ERROR: PlatformException(error, Unsupported value: java.io.FileNotFoundException: flutter_assets/assets/model.tflite, null)

Кажется, Flutter не может найти файл model.tflite в папке с моими ресурсами!

Что я пробовал

  • Я трижды проверил отступы в pubspec.yaml (ниже). Пути к файлам и имена каталогов также верны.

    flutter:
      assets:
        - assets/labels.txt
        - assets/model.tflite

  • Я прочитал tflite docs.
  • Я загрузил model.tflite как тип с плавающей запятой и квантованный тип.
  • Я попытался переименовать файл model.tflite (можно было сказать, что я уже отчаялся).
  • Я также попытался изменить некоторые параметры в моем коде. Ниже приведена функция, в которой, похоже, происходит ошибка - она ​​вызывается всякий раз, когда пользователь делает снимок.

      Future classifyImage() async {
        try{
          String res = await Tflite.loadModel(
              model: 'assets/model.tflite',
              labels: 'assets/labels.txt',
              numThreads: 1,
              isAsset: true,
              useGpuDelegate: true
          );
          print(res);
          var recognitions = await Tflite.runModelOnImage(
            path: _image.path,
            imageMean: 117.0,
            imageStd: 1.0,
            numResults: 1,
            threshold: 0.5,
            asynch: true,
          );
          _recognitions = recognitions;
          await Tflite.close();
        } catch (error){
          print(' ');
          print('ERROR: $error');
        }

  • Вот снимок экрана каталогов моего проекта.
  • Я также попробовал очистить флаттер, выйти из студии Android и перезапустить проект.

ПОЖАЛУЙСТА ПОМОГИ! В настоящее время я жду, когда кто-то уплывет с небес и волшебным образом решит мою проблему. Я тоже новичок в трепетании, поэтому буду благодарен за любые общие предложения по моему коду :-).

Спасибо.


person Keeran Parthipan    schedule 21.07.2020    source источник
comment
(Для проверки работоспособности вы остановили приложение и перезапустили / пересобирали?)   -  person Dave Newton    schedule 21.07.2020
comment
Глупый вопрос, но у вас действительно есть файл с именем model.tflite в папке с ресурсами вашего проекта?   -  person GrahamD    schedule 21.07.2020
comment
Спасибо за ответы. У меня определенно есть файл model.tflite в папке с ресурсами. Я также перезапустил приложение и использовал flutter clean.   -  person Keeran Parthipan    schedule 22.07.2020


Ответы (2)


На следующий день я продолжил свой проект, и, похоже, ошибка не возникает. Не совсем уверен, что случилось ... Возможно, это было связано с моим ноутбуком?

person Keeran Parthipan    schedule 22.07.2020

Откройте файл android / app / build.gradle и добавьте следующий код в блок android.

aaptOptions {
    noCompress 'tflite'
    noCompress 'lite'
}
person Hutomo Sakti Kartiko    schedule 25.12.2020