A resource failed to call close -flutter/tflite error

Viewed 1530

I want to do image processing in flutter. I load the ml model(tflite) in flutter. Here I successfully take the image from gallery/camera . I stuck in processing part of the image .I didnt get the required ouput. please help me

    import 'dart:io';
    import 'package:flutter/material.dart';
    import 'package:image_picker/image_picker.dart';
    import 'package:tflite/tflite.dart';


    void main() {
      runApp(new MaterialApp(
          title: "corona",
          home: LandingScreen(),
      ));
    }

    class LandingScreen extends StatefulWidget {
      @override
      _LandingScreenState createState() => _LandingScreenState();
    }

    class _LandingScreenState extends State<LandingScreen> {
      File imageFile;
      String result;
      String path;
    
      _openGallery(BuildContext context) async {
        var picture = await ImagePicker.pickImage(source: ImageSource.gallery);
        this.setState(() {
          imageFile = picture;
          path = picture.path;
        });
        Navigator.of(context).pop();
      }
    
      _openCamera(BuildContext context) async {
        var picture = await ImagePicker.pickImage(source: ImageSource.camera);
        this.setState(() {
          imageFile = picture;
          path = picture.path;
        });
        Navigator.of(context).pop();
      }
    
    
      // **classifyimage function to process the image from tflite**
    
      Future classifyImage() async {
        await Tflite.loadModel(
          model: "assets/covid19_densenet.tflite",
          labels: "assets/x.txt",
        );
        var output = await Tflite.runModelOnImage(path: path);
    
        setState(() {
          result = output.toString();
        });
      }
    
      // Other functions
    
      Future<void> _showChoiceDialog(BuildContext context) {
        return showDialog(context: context, builder: (BuildContext context) {
          return AlertDialog(
            title: Text("Make a Choose!"),
            content: SingleChildScrollView(
              child: ListBody(
                children: <Widget>[
                  GestureDetector(
                    child: Text("Gallery"),
                    onTap: () {
                      _openGallery(context);
                    },
                  ),
                  Padding(padding: EdgeInsets.all(8.0)),
                  GestureDetector(
                    child: Text("Camera"),
                    onTap: () {
                      _openCamera(context);
                    },
                  )
                ],
              ),
            ),
          );
        });
      }
    
      Widget _decideImageView() {
        if (imageFile == null) {
          return Text("No Image Selected!");
        } else {
          return Image.file(imageFile, width: 400, height: 400);
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("CORONA DETECTION"),
          ),
          body: Container(
            child: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  _decideImageView(),
                  RaisedButton(
                    onPressed: () {
                      _showChoiceDialog(context);
                    },
                    child: Text("select image!"),
                  ),
    
                  Container(
                    margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
                    child: RaisedButton(
                      onPressed: () => classifyImage(),
                      child: Text('Classify Image'),
                      textColor: Colors.white,
                      color: Colors.blue,
                      padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
                    ),
                  ),
    
                  result == null ? Text('Result') : Text(result)
                ],
              ),
            ),
          ),
        );
      }
    }

This is an UI of application. when i tap on the classify image button

Image

Here i am trying to upload image to model by this button and then it processing and returns the output

This is an error

1 Answers

The tflite seems to be throwing a BufferOverflowException due to lack of grayscale support on onFrame methods. The issue should have been fixed as mentioned on this GitHub issue ticket.

Related