Introduction, Installation and Examples of tflite Flutter Plugin

What is tflite?

A Tensorflow model is converted to a Tensorflow Lite flat buffer file using Tensorflow Lite Converter (. tflite). The client, which in our instance is a mobile device operating on iOS or Android or an embedded device, receives the Tensorflow Lite flat buffer file.

tflite is a Flutter plugin for accessing TensorFlow Lite API. Supports image classification, object detection (SSD and YOLO), Pix2Pix and Deeplab and PoseNet on both iOS and Android.

Overview

TensorFlow Lite Flutter plugin provides a flexible and fast solution for accessing TensorFlow Lite interpreter and performing inference. The API is similar to the TFLite Java and Swift APIs. It directly binds to TFLite C API making it efficient (low-latency). Offers acceleration support using NNAPI, GPU delegates on Android, Metal and CoreML delegates on iOS, and XNNPack delegate on Desktop platforms.

Key Features

  • Multi-platform Support for Android, iOS, Windows, Mac, Linux.
  • Flexibility to use any TFLite Model.
  • Acceleration using multi-threading and delegate support.
  • Similar structure as TensorFlow Lite Java API.
  • Inference speeds close to native Android Apps built using the Java API.
  • You can choose to use any TensorFlow version by building binaries locally.
  • Run inference in different isolates to prevent jank in UI thread.

(Important) Initial setup : Add dynamic libraries to your app

Android

  1. Place the script install.sh (Linux/Mac) or install.bat (Windows) at the root of your project.
  2. Execute sh install.sh (Linux) / install.bat (Windows) at the root of your project to automatically download and place binaries at appropriate folders.Note: The binaries installed will not include support for GpuDelegateV2 and NnApiDelegate however InterpreterOptions().useNnApiForAndroid can still be used.
  3. Use sh install.sh -d (Linux) or install.bat -d (Windows) instead if you wish to use these GpuDelegateV2 and NnApiDelegate.

These scripts install pre-built binaries based on latest stable tensorflow release. For info about using other tensorflow versions follow instructions in wiki.

iOS

  1. Download TensorFlowLiteC.framework. For building a custom version of tensorflow, follow instructions in wiki.
  2. Place the TensorFlowLiteC.framework in the pub-cache folder of this package.

Pub-Cache folder location: (ref)

  • ~/.pub-cache/hosted/pub.dartlang.org/tflite_flutter-<plugin-version>/ios/ (Linux/ Mac)
  • %LOCALAPPDATA%\Pub\Cache\hosted\pub.dartlang.org\tflite_flutter-<plugin-version>\ios\ (Windows)

Desktop

Follow instructions in this guide to build and use desktop binaries.

TFLite Flutter Helper Library

A dedicated library with simple architecture for processing and manipulating input and output of TFLite Models. API design and documentation is identical to the TensorFlow Lite Android Support Library. Strongly recommended to be used with tflite_flutter_pluginLearn more.

Examples

Text Classification App

Source Code: Text Classification App.

Click here for more detailed information Blog/Tutorials.

Image Classification App

Source Code: Image Classification App.

Object Detection App

Source Code: Object Detection App.

Click here for more detailed information, Blog/Tutorial.

Reinforcement Learning App

Source Code: Reinforcement Learning App.

Click here for more detailed information, Blog/Tutorial.

Import

import 'package:tflite_flutter/tflite_flutter.dart';

Usage instructions

Creating the Interpreter

  • From assetPlace your_model.tflite in assets directory. Make sure to include assets in pubspec.yaml.final interpreter = await tfl.Interpreter.fromAsset(‘your_model.tflite’);

Refer to the documentation for info on creating interpreter from buffer or file.

Performing inference

See TFLite Flutter Helper Library for easy processing of input and output.

  • For single input and outputUse void run(Object input, Object output).// For ex: if input tensor shape [1,5] and type is float32 var input = [[1.23, 6.54, 7.81. 3.21, 2.22]]; // if output tensor shape [1,2] and type is float32 var output = List.filled(1*2, 0).reshape([1,2]); // inference interpreter.run(input, output); // print the output print(output);
  • For multiple inputs and outputsUse void runForMultipleInputs(List<Object> inputs, Map<int, Object> outputs).var input0 = [1.23]; var input1 = [2.43]; // input: List<Object> var inputs = [input0, input1, input0, input1]; var output0 = List<double>.filled(1, 0); var output1 = List<double>.filled(1, 0); // output: Map<int, Object> var outputs = {0: output0, 1: output1}; // inference interpreter.runForMultipleInputs(inputs, outputs); // print outputs print(outputs)

Closing the interpreter

interpreter.close();

Improve performance using delegate support

Note: This feature is under testing and could be unstable with some builds and on some devices.
  • NNAPI delegate for Androidvar interpreterOptions = InterpreterOptions()..useNnApiForAndroid = true; final interpreter = await Interpreter.fromAsset(‘your_model.tflite’, options: interpreterOptions); orvar interpreterOptions = InterpreterOptions()..addDelegate(NnApiDelegate()); final interpreter = await Interpreter.fromAsset(‘your_model.tflite’, options: interpreterOptions);
  • GPU delegate for Android and iOS
    • Android GpuDelegateV2final gpuDelegateV2 = GpuDelegateV2( options: GpuDelegateOptionsV2( false, TfLiteGpuInferenceUsage.fastSingleAnswer, TfLiteGpuInferencePriority.minLatency, TfLiteGpuInferencePriority.auto, TfLiteGpuInferencePriority.auto, )); var interpreterOptions = InterpreterOptions()..addDelegate(gpuDelegateV2); final interpreter = await Interpreter.fromAsset(‘your_model.tflite’, options: interpreterOptions);
    • iOS Metal Delegate (GpuDelegate)final gpuDelegate = GpuDelegate( options: GpuDelegateOptions(true, TFLGpuDelegateWaitType.active), ); var interpreterOptions = InterpreterOptions()..addDelegate(gpuDelegate); final interpreter = await Interpreter.fromAsset(‘your_model.tflite’, options: interpreterOptions);

Refer Tests to see more example code for each method.

Credits

  • Tian LIN, Jared Duke, Andrew Selle, YoungSeok Yoon, Shuangfeng Li from the TensorFlow Lite Team for their invaluable guidance.
  • Authors of dart-lang/tflite_native.
SHARE Introduction, Installation and Examples of tflite Flutter Plugin

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Share