背景
我正在android studio上使用flutter制作一个水果分类应用程序。该应用程序将按如下方式工作:
- 用相机拍照。
- 预测图片中的水果类型。
要执行步骤 (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 文档。
- 我已将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');
}
- 这是我的项目目录的屏幕截图。
- 我也尝试过flutter clean,退出android studio并重新启动项目。
请帮忙!我目前正在等待有人从天上飘来神奇地解决我的问题。我也是颤振的初学者,因此对我的代码的任何一般性建议将不胜感激:-)。
谢谢你。