Фон
Я делаю приложение для классификации фруктов, используя флаттер в студии Android. Приложение будет работать следующим образом:
- Сделайте снимок с помощью камеры.
- Предскажите вид фруктов на картинке.
Для выполнения шага (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 и перезапустить проект.
ПОЖАЛУЙСТА ПОМОГИ! В настоящее время я жду, когда кто-то уплывет с небес и волшебным образом решит мою проблему. Я тоже новичок в трепетании, поэтому буду благодарен за любые общие предложения по моему коду :-).
Спасибо.