在flutter中使用tflite处理自定义模型时,应用程序崩溃了。我怎样才能解决这个问题?

3 人关注

我已经建立了一个自定义的tflite模型,它是从Keras hdf5模型转换而来的。但是,当使用转换后的模型时,在安卓系统中进行预测时,应用程序会崩溃,但当我使用从互联网上下载的移动网络tflite模型时,应用程序工作正常。我需要做什么改变?问题是在模型转换中还是在应用程序中?

我已经尝试使用tflite软件包的内置功能,支持移动网和tflite给出的其他各种网,我改成了自定义建立模型预测功能,并保持转换后的文件模型。在第一种情况下,它工作,但在第二种情况下,它没有。

Future prediction(File image) async{
  _recognitions= null;
  var recognitions = await Tflite.runModelOnImage(
  path: image.path,   // required
  imageMean: 0.0,   // defaults to 117.0
  imageStd: 255.0,  // defaults to 1.0
  numResults: 2,    // defaults to 5
  threshold: 0.2,   // defaults to 0.1
  asynch: true      // defaults to true
  // var recognitions = await Tflite.detectObjectOnImage(
  //   path: image.path,
  //   model: "SSDMobileNet",
  //   imageMean: 127.5,
  //   threshold: 0.4,
  //   numResultsPerClass: 2,
  //   asynch: true
  // );
  print(recognitions);
  setState(() {
    _recognitions=recognitions;

我已经在资产中添加了2个模型。

  assets:
   - images/webdoctor.png
   - assets/detect.tflite
   - assets/labelmap.txt
   - assets/labels.txt
   - assets/modelPneumonia.tflite

预期的结果将是自定义模型的工作,而不会出现应用程序崩溃。

android
flutter
keras
prediction
Jithin Palepu
Jithin Palepu
发布于 2019-08-26
2 个回答
G.Kaviraj
G.Kaviraj
发布于 2021-05-23
0 人赞同

我遇到了类似的问题,是内存泄漏导致应用程序崩溃。我通过以下方法解决了这个问题。

  • 添加以下内容来关闭任何资源

    @override
    void dispose() {
      // you can add to close tflite if error is caused by tflite
      // tflite.close();
      controller?.dispose(); // this is to dispose camera controller if you are using live detection
      super.dispose();
    
  • Run the Command: flutter clean

  • Rebuild your project

  •