shaqian / flutter_tflite

Flutter plugin for TensorFlow Lite
https://pub.dartlang.org/packages/tflite
MIT License
628 stars 401 forks source link

PlaftformException even after loading model #125

Open aditya21 opened 4 years ago

aditya21 commented 4 years ago

I have loaded model with Tflite.loadModel method and then after success Tflite.runModelOnFrame.

@override
  void initState() {
    super.initState();
    // To display the current output from the camera,
    // create a CameraController.
    _controller = CameraController(
      // Get a specific camera from the list of available cameras.
      widget.camera,
      // Define the resolution to use.
      ResolutionPreset.medium,
    );
    _loadModel();
    // Next, initialize the controller. This returns a Future.
    _initializeControllerFuture = _controller.initialize().then((value) {
      _controller.startImageStream((image) {
        if (!_modelLoaded || !_detect) {
          return;
        }
        try {
          _startProcessing(image);
        } catch (e) {}
      });
    });
  }

  _loadModel() async {
    final res = await Tflite.loadModel(
      model: "assets/models/car_detection/model_unquant.tflite",
      labels: "assets/models/car_detection/labels.txt",
      numThreads: 5, // defaults to 1
      isAsset: true, // defaults to
    );

    print(res);
    setState(() {
      _modelLoaded = true;
    });
  }

  _startProcessing(CameraImage image) async {
    try {
      Tflite.runModelOnFrame(
        bytesList: image.planes.map((plane) {
          return plane.bytes;
        }).toList(),
        imageHeight: image.height,
        imageWidth: image.width,
        numResults: 1,
        asynch: true,
        threshold: 0.5,
      ).then((value) => print(value));
    } on PlatformException {}
  }

I get below errors:

Error 1 /MethodChannel#tflite(29734): Failed to handle method call E/MethodChannel#tflite(29734): java.lang.IllegalArgumentException: Unsupported value: java.lang.RuntimeException: Interpreter busy E/MethodChannel#tflite(29734): at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:278) E/MethodChannel#tflite(29734): at io.flutter.plugin.common.StandardMethodCodec.encodeErrorEnvelope(StandardMethodCodec.java:69) E/MethodChannel#tflite(29734): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:236) E/MethodChannel#tflite(29734): at sq.flutter.tflite.TflitePlugin.onMethodCall(TflitePlugin.java:114) E/MethodChannel#tflite(29734): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226) E/MethodChannel#tflite(29734): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) E/MethodChannel#tflite(29734): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631) E/MethodChannel#tflite(29734): at android.os.MessageQueue.nativePollOnce(Native Method) E/MethodChannel#tflite(29734): at android.os.MessageQueue.next(MessageQueue.java:336) E/MethodChannel#tflite(29734): at android.os.Looper.loop(Looper.java:174) E/MethodChannel#tflite(29734): at android.app.ActivityThread.main(ActivityThread.java:7356) E/MethodChannel#tflite(29734): at java.lang.reflect.Method.invoke(Native Method) E/MethodChannel#tflite(29734): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) E/MethodChannel#tflite(29734): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) W/System (29734): A resource failed to call destroy.

Error 2 E/flutter (29734): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Unsupported value: java.lang.RuntimeException: Interpreter busy, null) E/flutter (29734): #0 StandardMethodCodec.decodeEnvelope package:flutter/…/services/message_codecs.dart:569 E/flutter (29734): #1 MethodChannel._invokeMethod package:flutter/…/services/platform_channel.dart:156 E/flutter (29734): E/flutter (29734): #2 MethodChannel.invokeMethod package:flutter/…/services/platform_channel.dart:329 E/flutter (29734): #3 Tflite.runModelOnFrame package:tflite/tflite.dart:73 E/flutter (29734): #4 _CameraScreenState._startProcessing package:ai_model/camera.dart:63 E/flutter (29734): #5 _CameraScreenState.initState.. package:ai_model/camera.dart:41 E/flutter (29734): #6 CameraController.startImageStream. package:camera/camera.dart:412 E/flutter (29734): #7 _rootRunUnary (dart:async/zone.dart:1192:38) E/flutter (29734): #8 _CustomZone.runUnary (dart:async/zone.dart:1085:19) E/flutter (29734): #9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7) E/flutter (29734): #10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter (29734): #11 _DelayedData.perform (dart:async/stream_impl.dart:594:14) E/flutter (29734): #12 _StreamImplEvents.handleNext (dart:async/stream_impl.dart:710:11) E/flutter (29734): #13 _PendingEvents.schedule. (dart:async/stream_impl.dart:670:7) E/flutter (29734): #14 _rootRun (dart:async/zone.dart:1180:38) E/flutter (29734): #15 _CustomZone.run (dart:async/zone.dart:1077:19) E/flutter (29734): #16 _CustomZone.runGuarded (dart:async/zone.dart:979:7) E/flutter (29734): #17 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1019:23) E/flutter (29734): #18 _rootRun (dart:async/zone.dart:1184:13) E/flutter (29734): #19 _CustomZone.run (dart:async/zone.dart:1077:19) E/flutter (29734): #20 _CustomZone.runGuarded (dart:async/zone.dart:979:7) E/flutter (29734): #21 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1019:23) E/flutter (29734): #22 _microtaskLoop (dart:async/schedule_microtask.dart:43:21) E/flutter (29734): #23 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5) E/flutter (29734):

innerk commented 4 years ago

i was getting the same error. type in flutter run on the console and make sure your model it's loaded

aditya21 commented 4 years ago

@innerk Yes. I tried same earlier following one of the issue. My model loading returns success using Tflite.loadModel as mentioned in above code but no luck yet.

Defuera commented 3 years ago

I have same issue. Here's my code

const IMAGE_MEAN = 127.5;
const IMAGE_STD = 127.5;

void runTfLiteTest(BuildContext context) async {
  String res = await Tflite.loadModel(
      model: "assets/tflite/deeplabv3_257_mv_gpu.tflite",
      labels: "assets/tflite/labels.txt",
      numThreads: 1, 
      isAsset: true, 
      useGpuDelegate: true
      );

  print("Model loaded $res"); //prints success

  var result = await Tflite.runSegmentationOnImage( //crash on this line 
      path: "assets/tflite/256_test_0.png",
      imageMean: IMAGE_MEAN,
      imageStd: IMAGE_STD,
      outputType: "png",
      asynch: true 
      );

  print(result);
}

And stacktrace:

E/flutter (27066): [ERROR:flutter/shell/common/shell.cc(213)] Dart Error: Unhandled exception:
E/flutter (27066): PlatformException(error, Unsupported value: java.lang.RuntimeException: Interpreter busy, null)
E/flutter (27066): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (27066): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
E/flutter (27066): <asynchronous suspension>
E/flutter (27066): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
E/flutter (27066): #3      Tflite.runSegmentationOnImage (package:tflite/tflite.dart:288:27)
E/flutter (27066): #4      runTfLiteTest (package:sticked/tflite_test.dart:27:29)
E/flutter (27066): <asynchronous suspension>
E/flutter (27066): #5      _StickersEmptyScreenState.build (package:sticked/feature/sticker/stickers_empty_ui.dart:33:5)
E/flutter (27066): #6      StatefulElement.build (package:flutter/src/widgets/framework.dart:4619:28)
E/flutter (27066): #7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
E/flutter (27066): #8      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (27066): #9      Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (27066): #10     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (27066): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #12     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (27066): #13     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (27066): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (27066): #15     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (27066): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #17     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
E/flutter (27066): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #19     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (27066): #20     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (27066): #21     StatelessElement.update (package:flutter/src/widgets/framework.dart:4583:5)
E/flutter (27066): #22     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #23     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
E/flutter (27066): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #25     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
E/flutter (27066): #26     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #27     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (27066): #28     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (27066): #29     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (27066): #30     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (27066): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #32     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
E/flutter (27066): #33     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #34     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
E/flutter (27066): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (27066): #37     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (27066): #38     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (27066): #39     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (27066): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (27066): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (27066): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (27066): #43     StatelessElement.update (package:flutter/src/widgets/framework.dart:4583:5)
E/flutter (27066): #44     Element.updateChild (packa
azadprajapat commented 3 years ago

I have loaded model with Tflite.loadModel method and then after success Tflite.runModelOnFrame.

@override
  void initState() {
    super.initState();
    // To display the current output from the camera,
    // create a CameraController.
    _controller = CameraController(
      // Get a specific camera from the list of available cameras.
      widget.camera,
      // Define the resolution to use.
      ResolutionPreset.medium,
    );
    _loadModel();
    // Next, initialize the controller. This returns a Future.
    _initializeControllerFuture = _controller.initialize().then((value) {
      _controller.startImageStream((image) {
        if (!_modelLoaded || !_detect) {
          return;
        }
        try {
          _startProcessing(image);
        } catch (e) {}
      });
    });
  }

  _loadModel() async {
    final res = await Tflite.loadModel(
      model: "assets/models/car_detection/model_unquant.tflite",
      labels: "assets/models/car_detection/labels.txt",
      numThreads: 5, // defaults to 1
      isAsset: true, // defaults to
    );

    print(res);
    setState(() {
      _modelLoaded = true;
    });
  }

  _startProcessing(CameraImage image) async {
    try {
      Tflite.runModelOnFrame(
        bytesList: image.planes.map((plane) {
          return plane.bytes;
        }).toList(),
        imageHeight: image.height,
        imageWidth: image.width,
        numResults: 1,
        asynch: true,
        threshold: 0.5,
      ).then((value) => print(value));
    } on PlatformException {}
  }

I get below errors:

Error 1 /MethodChannel#tflite(29734): Failed to handle method call E/MethodChannel#tflite(29734): java.lang.IllegalArgumentException: Unsupported value: java.lang.RuntimeException: Interpreter busy E/MethodChannel#tflite(29734): at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:278) E/MethodChannel#tflite(29734): at io.flutter.plugin.common.StandardMethodCodec.encodeErrorEnvelope(StandardMethodCodec.java:69) E/MethodChannel#tflite(29734): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:236) E/MethodChannel#tflite(29734): at sq.flutter.tflite.TflitePlugin.onMethodCall(TflitePlugin.java:114) E/MethodChannel#tflite(29734): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226) E/MethodChannel#tflite(29734): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) E/MethodChannel#tflite(29734): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631) E/MethodChannel#tflite(29734): at android.os.MessageQueue.nativePollOnce(Native Method) E/MethodChannel#tflite(29734): at android.os.MessageQueue.next(MessageQueue.java:336) E/MethodChannel#tflite(29734): at android.os.Looper.loop(Looper.java:174) E/MethodChannel#tflite(29734): at android.app.ActivityThread.main(ActivityThread.java:7356) E/MethodChannel#tflite(29734): at java.lang.reflect.Method.invoke(Native Method) E/MethodChannel#tflite(29734): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) E/MethodChannel#tflite(29734): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) W/System (29734): A resource failed to call destroy.

Error 2 E/flutter (29734): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Unsupported value: java.lang.RuntimeException: Interpreter busy, null) E/flutter (29734): #0 StandardMethodCodec.decodeEnvelope package:flutter/…/services/message_codecs.dart:569 E/flutter (29734): #1 MethodChannel._invokeMethod package:flutter/…/services/platform_channel.dart:156 E/flutter (29734): E/flutter (29734): #2 MethodChannel.invokeMethod package:flutter/…/services/platform_channel.dart:329 E/flutter (29734): #3 Tflite.runModelOnFrame package:tflite/tflite.dart:73 E/flutter (29734): #4 _CameraScreenState._startProcessing package:ai_model/camera.dart:63 E/flutter (29734): #5 _CameraScreenState.initState.. package:ai_model/camera.dart:41 E/flutter (29734): #6 CameraController.startImageStream. package:camera/camera.dart:412 E/flutter (29734): #7 _rootRunUnary (dart:async/zone.dart:1192:38) E/flutter (29734): #8 _CustomZone.runUnary (dart:async/zone.dart:1085:19) E/flutter (29734): #9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7) E/flutter (29734): #10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter (29734): #11 _DelayedData.perform (dart:async/stream_impl.dart:594:14) E/flutter (29734): #12 _StreamImplEvents.handleNext (dart:async/stream_impl.dart:710:11) E/flutter (29734): #13 _PendingEvents.schedule. (dart:async/stream_impl.dart:670:7) E/flutter (29734): #14 _rootRun (dart:async/zone.dart:1180:38) E/flutter (29734): #15 _CustomZone.run (dart:async/zone.dart:1077:19) E/flutter (29734): #16 _CustomZone.runGuarded (dart:async/zone.dart:979:7) E/flutter (29734): #17 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1019:23) E/flutter (29734): #18 _rootRun (dart:async/zone.dart:1184:13) E/flutter (29734): #19 _CustomZone.run (dart:async/zone.dart:1077:19) E/flutter (29734): #20 _CustomZone.runGuarded (dart:async/zone.dart:979:7) E/flutter (29734): #21 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1019:23) E/flutter (29734): #22 _microtaskLoop (dart:async/schedule_microtask.dart:43:21) E/flutter (29734): #23 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5) E/flutter (29734):

Hi dear i face the same issue i solved by adding the following lines to my android/app/build.gradle aaptOptions { noCompress 'tflite' noCompress 'lite' }

flomingdev commented 2 years ago

@aditya21 have you found any solution?

vikas-shrma commented 1 year ago

somebody found any solution for this problem ?

karamatpkid commented 1 year ago

Same issue is on my side too,

vikas-shrma commented 1 year ago

Same issue is on my side too,

my code is running fine but result are not damn sure

karamatpkid commented 1 year ago

Use Hawaii ml kit or google ml kit segmentation .

On Wed, Jan 4, 2023, 3:39 PM Vikas Sharma @.***> wrote:

Same issue is on my side too,

my code is running fine but result are not damn sure

— Reply to this email directly, view it on GitHub https://github.com/shaqian/flutter_tflite/issues/125#issuecomment-1370758252, or unsubscribe https://github.com/notifications/unsubscribe-auth/AVWX46OL7F7OGUHNXQZDCY3WQVHOLANCNFSM4N2BMNCA . You are receiving this because you commented.Message ID: @.***>

chaoyifei commented 2 months ago

setting a flag isDetecting can slove PR

class Camera extends StatefulWidget {
  final List<CameraDescription> cameras;
  final Callback setRecognitions;
  final String model;

  const Camera(this.cameras, this.model, this.setRecognitions, {super.key});

  @override
  State<Camera> createState() => _CameraState();
}

class _CameraState extends State<Camera>
{
  late CameraController controller;
  bool isDetecting = false;
....
  if (!isDetecting) {
            isDetecting = true;
           Tflite.runModelOnFrame(
        bytesList: image.planes.map((plane) {
          return plane.bytes;
        }).toList(),
        imageHeight: image.height,
        imageWidth: image.width,
        numResults: 1,
        asynch: true,
        threshold: 0.5,
      ).then()=>{  isDetecting = false}