A Flutter plugin to use the Firebase ML Kit.

Overview

mlkit

pub package

A Flutter plugin to use the Firebase ML Kit.

Only your star motivate me!

this is not official package

The flutter team now has the firebase_ml_vision or firebase_ml_custom package for Firebase ML Kit. Please consider trying to use firebase_ml_vision.

Note: This plugin is still under development, and some APIs might not be available yet. Feedback and Pull Requests are most welcome!

Features

Feature Android iOS
Recognize text(on device)
Recognize text(cloud) yet yet
Detect faces(on device)
Scan barcodes(on device)
Label Images(on device)
Label Images(cloud) yet yet
Object detection & tracking yet yet
Recognize landmarks(cloud) yet yet
Language identification
Translation yet yet
Smart Reply yet yet
AutoML model inference yet yet
Custom model(on device)
Custom model(cloud)

What features are available on device or in the cloud?

Usage

To use this plugin, add mlkit as a dependency in your pubspec.yaml file.

Getting Started

Check out the example directory for a sample app using Firebase Cloud Messaging.

Android Integration

To integrate your plugin into the Android part of your app, follow these steps:

  1. Using the Firebase Console add an Android app to your project: Follow the assistant, download the generated google-services.json file and place it inside android/app. Next, modify the android/build.gradle file and the android/app/build.gradle file to add the Google services plugin as described by the Firebase assistant.

iOS Integration

To integrate your plugin into the iOS part of your app, follow these steps:

  1. Using the Firebase Console add an iOS app to your project: Follow the assistant, download the generated GoogleService-Info.plist file, open ios/Runner.xcworkspace with Xcode, and within Xcode place the file inside ios/Runner. Don't follow the steps named "Add Firebase SDK" and "Add initialization code" in the Firebase assistant.

Dart/Flutter Integration

From your Dart code, you need to import the plugin and instantiate it:

import 'package:mlkit/mlkit.dart';

FirebaseVisionTextDetector detector = FirebaseVisionTextDetector.instance;

// Detect form file/image by path
var currentLabels = await detector.detectFromPath(_file?.path);

// Detect from binary data of a file/image
var currentLabels = await detector.detectFromBinary(_file?.readAsBytesSync());

custom model interpreter

native sample code

import 'package:mlkit/mlkit.dart';
import 'package:image/image.dart' as img;

FirebaseModelInterpreter interpreter = FirebaseModelInterpreter.instance;
FirebaseModelManager manager = FirebaseModelManager.instance;

//Register Cloud Model
manager.registerRemoteModelSource(
        FirebaseRemoteModelSource(modelName: "mobilenet_v1_224_quant"));

//Register Local Backup
manager.registerLocalModelSource(FirebaseLocalModelSource(modelName: 'mobilenet_v1_224_quant',  assetFilePath: 'ml/mobilenet_v1_224_quant.tflite');


var imageBytes = (await rootBundle.load("assets/mountain.jpg")).buffer;
img.Image image = img.decodeJpg(imageBytes.asUint8List());
image = img.copyResize(image, 224, 224);

//The app will download the remote model. While the remote model is being downloaded, it will use the local model.
var results = await interpreter.run(
        remoteModelName: "mobilenet_v1_224_quant",
        localModelName: "mobilenet_v1_224_quant",
        inputOutputOptions: FirebaseModelInputOutputOptions([
          FirebaseModelIOOption(FirebaseModelDataType.FLOAT32, [1, 224, 224, 3])
        ], [
          FirebaseModelIOOption(FirebaseModelDataType.FLOAT32, [1, 1001])
        ]),
        inputBytes: imageToByteList(image));

// int model
Uint8List imageToByteList(img.Image image) {
    var _inputSize = 224;
    var convertedBytes = new Uint8List(1 * _inputSize * _inputSize * 3);
    var buffer = new ByteData.view(convertedBytes.buffer);
    int pixelIndex = 0;
    for (var i = 0; i < _inputSize; i++) {
      for (var j = 0; j < _inputSize; j++) {
        var pixel = image.getPixel(i, j);
        buffer.setUint8(pixelIndex, (pixel >> 16) & 0xFF);
        pixelIndex++;
        buffer.setUint8(pixelIndex, (pixel >> 8) & 0xFF);
        pixelIndex++;
        buffer.setUint8(pixelIndex, (pixel) & 0xFF);
        pixelIndex++;
      }
    }
    return convertedBytes;
  }

// float model
Uint8List imageToByteList(img.Image image) {
  var _inputSize = 224;
  var convertedBytes = Float32List(1 * _inputSize * _inputSize * 3);
  var buffer = Float32List.view(convertedBytes.buffer);
  int pixelIndex = 0;
  for (var i = 0; i < _inputSize; i++) {
    for (var j = 0; j < _inputSize; j++) {
      var pixel = image.getPixel(i, j);
      buffer[pixelIndex] = ((pixel >> 16) & 0xFF) / 255;
      pixelIndex += 1;
      buffer[pixelIndex] = ((pixel >> 8) & 0xFF) / 255;
      pixelIndex += 1;
      buffer[pixelIndex] = ((pixel) & 0xFF) / 255;
      pixelIndex += 1;
    }
  }
  return convertedBytes.buffer.asUint8List();
}
Comments
  • Issue with detecting faces

    Issue with detecting faces

    When trying to detect faces in android I always receive this output: W/DynamiteModule(14227): Local module descriptor class for com.google.android.gms.vision.dynamite.face not found. I/DynamiteModule(14227): Considering local module com.google.android.gms.vision.dynamite.face:0 and remote module com.google.android.gms.vision.dynamite.face:0 D/FaceNativeHandle(14227): Cannot load feature, fall back to load whole module. W/DynamiteModule(14227): Local module descriptor class for com.google.android.gms.vision.dynamite not found. I/DynamiteModule(14227): Considering local module com.google.android.gms.vision.dynamite:0 and remote module com.google.android.gms.vision.dynamite:1800 I/DynamiteModule(14227): Selected remote version of com.google.android.gms.vision.dynamite, version >= 1800 V/DynamiteModule(14227): Dynamite loader version >= 2, using loadModule2NoCrashUtils I/Vision (14227): Loading library libmobile_vision_face.so I/Vision (14227): libmobile_vision_face.so library load status: true

    Using a Galaxy note 8 in portrait and in landscape. Also for IOS I receive this output: `CocoaPods' output: ↳ Preparing

    Analyzing dependencies
    
    Inspecting targets to integrate
      Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)
    
    Finding Podfile changes
      A mlkit
      R firebase_ml_vision
      - Flutter
      - camera
      - cloud_firestore
      - firebase_analytics
      - firebase_auth
      - firebase_core
      - firebase_database
      - firebase_storage
      - flutter_inapp_purchase
      - flutter_native_image
      - flutter_statusbar_manager
      - flutter_webview_plugin
      - geocoder
      - image_picker
      - location
      - path_provider
      - shared_preferences
      - url_launcher
      - video_player
    
    Fetching external sources
    -> Fetching podspec for `Flutter` from `.symlinks/flutter/ios`
    -> Fetching podspec for `camera` from `.symlinks/plugins/camera/ios`
    -> Fetching podspec for `cloud_firestore` from `.symlinks/plugins/cloud_firestore/ios`
    -> Fetching podspec for `firebase_analytics` from `.symlinks/plugins/firebase_analytics/ios`
    -> Fetching podspec for `firebase_auth` from `.symlinks/plugins/firebase_auth/ios`
    -> Fetching podspec for `firebase_core` from `.symlinks/plugins/firebase_core/ios`
    -> Fetching podspec for `firebase_database` from `.symlinks/plugins/firebase_database/ios`
    -> Fetching podspec for `firebase_storage` from `.symlinks/plugins/firebase_storage/ios`
    -> Fetching podspec for `flutter_inapp_purchase` from `.symlinks/plugins/flutter_inapp_purchase/ios`
    -> Fetching podspec for `flutter_native_image` from `.symlinks/plugins/flutter_native_image/ios`
    -> Fetching podspec for `flutter_statusbar_manager` from `.symlinks/plugins/flutter_statusbar_manager/ios`
    -> Fetching podspec for `flutter_webview_plugin` from `.symlinks/plugins/flutter_webview_plugin/ios`
    -> Fetching podspec for `geocoder` from `.symlinks/plugins/geocoder/ios`
    -> Fetching podspec for `image_picker` from `.symlinks/plugins/image_picker/ios`
    -> Fetching podspec for `location` from `.symlinks/plugins/location/ios`
    -> Fetching podspec for `mlkit` from `.symlinks/plugins/mlkit/ios`
    -> Fetching podspec for `path_provider` from `.symlinks/plugins/path_provider/ios`
    -> Fetching podspec for `shared_preferences` from `.symlinks/plugins/shared_preferences/ios`
    -> Fetching podspec for `url_launcher` from `.symlinks/plugins/url_launcher/ios`
    -> Fetching podspec for `video_player` from `.symlinks/plugins/video_player/ios`
    
    Resolving dependencies of `Podfile`
    [!] CocoaPods could not find compatible versions for pod "Firebase/Core":
      In snapshot (Podfile.lock):
        Firebase/Core (= 5.10.0)
    
      In Podfile:
        cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) was resolved to 0.0.1, which depends on
          Firebase/Core
    
        mlkit (from `.symlinks/plugins/mlkit/ios`) was resolved to 0.6.3, which depends on
          Firebase/Core (~> 5.8.0)
    
    It seems like you've changed the constraints of dependency `Firebase/Core` inside your development pod `mlkit`.
    You should run `pod update Firebase/Core` to apply changes you've made.
    
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:328:in `raise_error_unless_state'
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:310:in `block in unwind_for_conflict'
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `tap'
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `unwind_for_conflict'
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:257:in `process_topmost_state'
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:182:in `resolve'
    /usr/local/lib/ruby/gems/2.4.0/gems/molinillo-0.6.6/lib/molinillo/resolver.rb:43:in `resolve'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/resolver.rb:123:in `resolve'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer/analyzer.rb:896:in `block in resolve_dependencies'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/user_interface.rb:64:in `section'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer/analyzer.rb:894:in `resolve_dependencies'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer/analyzer.rb:106:in `analyze'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer.rb:250:in `analyze'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer.rb:160:in `block in resolve_dependencies'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/user_interface.rb:64:in `section'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer.rb:159:in `resolve_dependencies'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/installer.rb:122:in `install!'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/command/install.rb:48:in `run'
    /usr/local/lib/ruby/gems/2.4.0/gems/claide-1.0.2/lib/claide/command.rb:334:in `run'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/lib/cocoapods/command.rb:52:in `run'
    /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.6.0.beta.1/bin/pod:55:in `<top (required)>'
    /usr/local/bin/pod:23:in `load'
    /usr/local/bin/pod:23:in `<main>'`
    
    waiting-reply 
    opened by rlee1990 13
  • Fresh install causes errors

    Fresh install causes errors

    Getting below errors while building for IOS. I do everything as instructed. My targe ios is 10.0

    /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:234:37: error: no visible @interface for 'FIRRemoteModel' declares the selector 'initWithName:allowsModelUpdates:initialConditions:updateConditions:' [[FIRRemoteModel alloc] initWithName:modeName ~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:239:45: error: no visible @interface for 'FIRModelManager' declares the selector 'registerRemoteModel:' [[FIRModelManager modelManager] registerRemoteModel:remoteModelSource]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:238:18: warning: unused variable 'registrationSuccess' [-Wunused-variable] BOOL registrationSuccess = ^ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:247:64: error: no visible @interface for 'FIRLocalModel' declares the selector 'initWithName:path:' FIRLocalModel *localModel = [[FIRLocalModel alloc] initWithName:modeName ~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:250:45: error: no visible @interface for 'FIRModelManager' declares the selector 'registerLocalModel:' [[FIRModelManager modelManager] registerLocalModel:localModel]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:249:18: warning: unused variable 'registrationSuccess' [-Wunused-variable] BOOL registrationSuccess = ^ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:261:9: error: unknown type name 'FIRModelOptions'; did you mean 'FIRModelOutputs'? FIRModelOptions *options = [[FIRModelOptions alloc] initWithRemoteModelName:remoteModelName localModelName:localModelName]; ^~~~~~~~~~~~~~~ FIRModelOutputs In module 'FirebaseMLModelInterpreter' imported from /Users/arrrrny/Developer/ml_test/ios/Pods/Headers/Public/Firebase/Firebase.h:69: /Users/arrrrny/Developer/ml_test/ios/Pods/FirebaseMLModelInterpreter/Frameworks/FirebaseMLModelInterpreter.framework/Headers/FIRModelOutputs.h:7:12: note: 'FIRModelOutputs' declared here @interface FIRModelOutputs : NSObject ^ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:261:38: error: unknown receiver 'FIRModelOptions'; did you mean 'FIRModelOutputs'? FIRModelOptions *options = [[FIRModelOptions alloc] initWithRemoteModelName:remoteModelName localModelName:localModelName]; ^~~~~~~~~~~~~~~ FIRModelOutputs In module 'FirebaseMLModelInterpreter' imported from /Users/arrrrny/Developer/ml_test/ios/Pods/Headers/Public/Firebase/Firebase.h:69: /Users/arrrrny/Developer/ml_test/ios/Pods/FirebaseMLModelInterpreter/Frameworks/FirebaseMLModelInterpreter.framework/Headers/FIRModelOutputs.h:7:12: note: 'FIRModelOutputs' declared here @interface FIRModelOutputs : NSObject /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:261:61: error: no visible @interface for 'FIRModelOutputs' declares the selector 'initWithRemoteModelName:localModelName:' FIRModelOptions *options = [[FIRModelOptions alloc] initWithRemoteModelName:remoteModelName localModelName:localModelName]; ~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:262:65: error: no known class method for selector 'modelInterpreterWithOptions:' FIRModelInterpreter *interpreter = [FIRModelInterpreter modelInterpreterWithOptions:options]; ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/arrrrny/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.14.1/ios/Classes/MlkitPlugin.m:365:22: warning: implicit conversion loses integer precision: 'NSUInteger' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] int length = [((NSArray *)o) count];

    wip under investigation waiting-reply 
    opened by arrrrny 12
  • Wrong package name

    Wrong package name

    Hi, First, thank you for developing this MLKit plugin for flutter :) I'm trying to configure your plugin but it seems that it don't take my package name When I launch my app, I have this error :

    • What went wrong: Execution failed for task ':mlkit:processDebugGoogleServices'.

    No matching client found for package name 'com.azihsoyn.flutter.mlkit'

    Could you tell me if there is a place to give my package name ? Thank's

    bug 
    opened by PsyOhm23 10
  • issue with latest google-services dependency

    issue with latest google-services dependency

    Building a project with the latest version of google-services:4.2.0, the one recommended on the firebase console causes a dependency error. The newer com.google.firebase:[email protected] doesn't let gradle compile due to your library being dependent upon com.google.firebase:[email protected]. Might be worth making a note of in the readme if you don't plan on updating anytime soon.

    opened by tensor-programming 9
  • cannot run on ios

    cannot run on ios

    hi. I want to use your FirebaseVisionTextDetector. my app works fine on android, but when tried to run on ios, build failed with following errors. what would you suppose wrong with my project?

    Xcode's output: ↳ === BUILD TARGET mlkit OF PROJECT Pods WITH CONFIGURATION Debug === In file included from /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:1: In file included from /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.h:1: In file included from /Users/kunugisayuri/StudioProjects/insurance_card_reader/ios/Pods/Headers/Public/Flutter/Flutter/Flutter.h:37: In file included from /Users/kunugisayuri/StudioProjects/insurance_card_reader/ios/Pods/Headers/Public/Flutter/Flutter/FlutterAppDelegate.h:11: /Users/kunugisayuri/StudioProjects/insurance_card_reader/ios/Pods/Headers/Public/Flutter/Flutter/FlutterPlugin.h:140:58: warning: this block declaration is not a prototype [-Wstrict-prototypes] completionHandler:(nonnull void (^)())completionHandler; ^ void /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:25:1: error: unknown type name 'FIRVisionTextDetector'; did you mean 'FIRVisionFaceDetector'? FIRVisionTextDetector textDetector; ^~~~~~~~~~~~~~~~~~~~~ FIRVisionFaceDetector In file included from /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:2: In file included from /Users/kunugisayuri/StudioProjects/insurance_card_reader/ios/Pods/Headers/Private/Firebase/Firebase.h:62: In file included from /Users/kunugisayuri/StudioProjects/insurance_card_reader/ios/Pods/Headers/Public/FirebaseMLVision/FirebaseMLVision/FirebaseMLVision.h:19: /Users/kunugisayuri/StudioProjects/insurance_card_reader/ios/Pods/Headers/Public/FirebaseMLVision/FirebaseMLVision/FIRVisionFaceDetector.h:22:12: note: 'FIRVisionFaceDetector' declared here @interface FIRVisionFaceDetector : NSObject ^ /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:186:41: error: type argument 'FIRVisionText' must be a pointer (requires a '') NSDictionary *visionTextToDictionary(id visionText) { ^ * /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:186:38: error: type arguments cannot be applied to non-class type 'id' NSDictionary visionTextToDictionary(id visionText) { ^ ~~~~~~~~~~~~~~~ /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:72:32: error: no visible @interface for 'FIRVision' declares the selector 'textDetector' textDetector = [vision textDetector]; ~~~~~~ ^~~~~~~~~~~~ /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:82:43: error: type argument 'FIRVisionText' must be a pointer (requires a '') for (id feature in features) { ^ * /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:82:39: error: type arguments cannot be applied to non-class type 'id' for (id feature in features) { ^ ~~~~~~~~~~~~~~~ /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:188:17: error: property 'cornerPoints' not found on object of type '__strong id' [visionText.cornerPoints enumerateObjectsUsingBlock:^(NSValue * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { ^ /Users/kunugisayuri/flutter/.pub-cache/hosted/pub.dartlang.org/mlkit-0.6.0/ios/Classes/MlkitPlugin.m:195:35: error: property 'text' not found on object of type '__strong id' @"text" : visionText.text, ^ 1 warning and 8 errors generated. Could not build the application for the simulator. Error launching application on iPhone X.

    opened by sayurikunugi 7
  • Local model

    Local model

    Is local model supported? I see the local model register method in the APIs but for interpreter invoke method the only argument it asks for is the remote one. Can you please share a timeline when the local model will be available for inference?

    Thanks

    opened by nominator 5
  • Update to current version of flutter and ML Kit. Custom models extended

    Update to current version of flutter and ML Kit. Custom models extended

    I have updated the code and dependencies to run with the current version of flutter and ML Kit. I have also updated the plugin to allow multiple inputs and outputs for custom models so that more complex models like object detection can be used, as well as adding an example app for this. I am just begging to use flutter and have very little experience with it, as well as practically no experience with iOs / Objective-c. I'd be happy for any suggested improvements.

    in review 
    opened by RichiWIP 4
  • Feature/image labeling

    Feature/image labeling

    I've accidentally closed the old PR(https://github.com/azihsoyn/flutter_mlkit/pull/19). So I've created the new one instead.

    Sorry for the inconvenience, I'm very new to contribution in GitHub T^T.

    opened by kajornsakp 4
  • Fix issue on memory allocation in multiple inputs

    Fix issue on memory allocation in multiple inputs

    This PR fixes issues on multiple inputs for custom models.

    The issues we want to improve occur as follows:

    1. In the current signature of FirebaseModelInterpreter.run(), multiple inputs should be concatenated into a Uint8List and passed as inputBytes.
    2. In FirebaseModelInterpreter#run, ByteBuffer is allocated for each input. Its capacity is the size of each input, not the sum of all inputs.
    3. inputBytes is dispatched into ByteBuffer. Note that, the size of inputBytes is the sum of all inputs.
    4. Buffer overflow is occurred since the capacity of allocated ByteBuffer is smaller than the size of InputBytes.

    I tested fixed code using the following gist. https://gist.github.com/arosh/c4bf342669b52a647b1f1a780f65aa6d

    in review 
    opened by arosh 2
  • CocoaPods could not find compatible versions for pod

    CocoaPods could not find compatible versions for pod "Firebase/MLNaturalLanguage"

    I cloned this repository, But example does not work with "Firebase/MLNaturalLanguage" version issue.

    $ cd example
    
    $ flutter run
    
    Launching lib/main.dart on iPhone Xʀ in debug mode...
    Running pod install...                                              0.6s
    CocoaPods' output:
    ↳
          Preparing
    
        Analyzing dependencies
    
        Inspecting targets to integrate
          Using `ARCHS` setting to build architectures of target `Pods-Runner`: (`arm64`)
    
        Fetching external sources
        -> Fetching podspec for `Flutter` from `Pods/.symlinks/flutter/ios`
        -> Fetching podspec for `image_picker` from `Pods/.symlinks/plugins/image_picker/ios`
        -> Fetching podspec for `mlkit` from `Pods/.symlinks/plugins/mlkit/ios`
    
        Resolving dependencies of `Podfile`
        [!] CocoaPods could not find compatible versions for pod "Firebase/MLNaturalLanguage":
          In Podfile:
            mlkit (from `Pods/.symlinks/plugins/mlkit/ios`) was resolved to 0.8.3, which depends on
              Firebase/MLNaturalLanguage (~> 5.11.0)
    
        None of your spec sources contain a spec satisfying the dependency: `Firebase/MLNaturalLanguage (~> 5.11.0)`.
    
        You have either:
         * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
         * mistyped the name or version.
         * not added the source repo that hosts the Podspec to your Podfile.
    
        Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by default.
    
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:328:in `raise_error_unless_state'
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:310:in `block in unwind_for_conflict'
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `tap'
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `unwind_for_conflict'
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:257:in `process_topmost_state'
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:182:in `resolve'
        /Library/Ruby/Gems/2.3.0/gems/molinillo-0.6.6/lib/molinillo/resolver.rb:43:in `resolve'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/resolver.rb:88:in `resolve'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer/analyzer.rb:939:in `block in resolve_dependencies'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/user_interface.rb:64:in `section'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer/analyzer.rb:937:in `resolve_dependencies'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer/analyzer.rb:118:in `analyze'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer.rb:398:in `analyze'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer.rb:221:in `block in resolve_dependencies'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/user_interface.rb:64:in `section'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer.rb:220:in `resolve_dependencies'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/installer.rb:156:in `install!'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/command/install.rb:51:in `run'
        /Library/Ruby/Gems/2.3.0/gems/claide-1.0.2/lib/claide/command.rb:334:in `run'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/lib/cocoapods/command.rb:52:in `run'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.0/bin/pod:55:in `<top (required)>'
        /usr/local/bin/pod:22:in `load'
        /usr/local/bin/pod:22:in `<main>'
    
    Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
    To update the CocoaPods specs, run:
      pod repo update
    
    
    
    Error running pod install
    Error launching application on iPhone Xʀ.
    
    $ uname -a
    Darwin jessica.local 18.6.0 Darwin Kernel Version 18.6.0: Thu Apr 25 23:16:27 PDT 2019; root:xnu-4903.261.4~2/RELEASE_X86_64 x86_64
    
    $ flutter --version
    Flutter 1.5.4-hotfix.2 • channel stable • https://github.com/flutter/flutter.git
    Framework • revision 7a4c33425d (4 weeks ago) • 2019-04-29 11:05:24 -0700
    Engine • revision 52c7a1e849
    Tools • Dart 2.3.0 (build 2.3.0-dev.0.5 a1668566e5)
    
    $ pod --version
    1.7.0
    
    $ pod list | grep -i firebase
      ANN9FirebaseAnalytics 0.0.2
      AppicFirebase 5.18.0
      ChatSDKFirebase 4.11.1
      CodableFirebase 0.2.1
      DryFirebase 0.0.2
      FireBasePod 0.1.2
      Firebase 6.1.0
      Firebase-Cocoa-SDK 2.3.4
      Firebase-RACExtensions 0.3.1
      FirebaseABTesting 3.0.0
      FirebaseAnalytics 6.0.1
      FirebaseAnalyticsInterop 1.2.0
      FirebaseAppIndexing 1.2.0
      FirebaseAuth 6.1.0
      FirebaseAuthInterop 1.0.0
      FirebaseChat 0.1.1
      FirebaseCheckVersion 1.0.9
      FirebaseCommunity 0.1.6
      FirebaseCore 6.0.1
      FirebaseCrash 3.1.1
      FirebaseDatabase 6.0.0
      FirebaseDeviceStore 0.0.1
      FirebaseDynamicLinks 4.0.0
      FirebaseFirestore 1.3.1
      FirebaseFunctions 2.5.1
      FirebaseGenericClient 0.1.1
      FirebaseHelper 1.0.0
      FirebaseInAppMessaging 0.14.1
      FirebaseInAppMessagingDisplay 0.14.0
      FirebaseInstanceID 4.1.0
      FirebaseInvites 3.0.1
      FirebaseMLCommon 0.16.0
      FirebaseMLModelInterpreter 0.16.0
      FirebaseMLNLLanguageID 0.16.1
      FirebaseMLNLSmartReply 0.16.1
      FirebaseMLNLTranslate 0.16.1
      FirebaseMLNaturalLanguage 0.16.1
      FirebaseMLVision 0.16.0
      FirebaseMLVisionAutoML 0.16.0
      FirebaseMLVisionBarcodeModel 0.16.0
      FirebaseMLVisionFaceModel 0.16.0
      FirebaseMLVisionLabelModel 0.16.0
      FirebaseMLVisionObjectDetection 0.16.0
      FirebaseMLVisionTextModel 0.16.0
      FirebaseMessaging 4.0.1
      FirebaseOSX 2.5.1
      FirebaseObjects 0.0.1
      FirebasePerformance 3.0.0
      FirebaseRemoteConfig 4.0.0
      FirebaseResultsController 1.0.0
      FirebaseRxSwiftExtensions 2.0.10
      FirebaseStorage 3.2.1
      FirebaseStorageCache 0.0.10
      FirebaseStorageCacheable 0.1.2
      FirebaseSwizzlingUtilities 2.0.0
      FirebaseUI 7.0.0
      FirebaseUtils 0.1.0
      FirebaseWrapper 0.1.0
      IF_FirebaseFollowHelperKit 0.0.1
      MKFirebaseObjectMapping 0.2.2
      MzzFirebase 0.1.0
      OneSDKFireBase 0.3.0
      ReactiveFirebase 0.1.3
      RxFirebase 0.3.6
      RxFirebaseAuth 2.2
      RxFirebaseAuthentication 0.3.7
      RxFirebaseDatabase 0.3.7
      RxFirebaseFirestore 0.3.7
      RxFirebaseFunctions 0.3.7
      RxFirebaseRemoteConfig 0.3.7
      RxFirebaseStorage 0.3.7
      Segment-Firebase 2.4.0
      mParticle-Google-Analytics-Firebase 7.9.1
    
    under investigation 
    opened by eyasuyuki 2
  • Detector option support

    Detector option support

    like this

    • https://firebase.google.com/docs/reference/swift/firebasemlvision/api/reference/Classes/VisionFaceDetectorOptions
    • https://firebase.google.com/docs/reference/ios/firebasemlvision/api/reference/Classes/FIRVisionFaceDetectorOptions
    • https://firebase.google.com/docs/reference/android/com/google/firebase/ml/vision/face/FirebaseVisionFaceDetectorOptions
    opened by azihsoyn 2
  • Write method channel in Swift to replace objective C method channel

    Write method channel in Swift to replace objective C method channel

    The Object-C method channel to mlkit libraries while still technically valid, would be much more accessible in Swift. Potentially consider replacing it with a Swift implementatoin.

    opened by iamalwaysuncomfortable 0
  • Is there a way to use url ( video stream ) such as rtsp link with mlkit

    Is there a way to use url ( video stream ) such as rtsp link with mlkit

    I have tried mlkit and it works great with the camera and image path. But I would like to know if there is any method for using stream URL to do detections.

    opened by ksajan 1
  • Attempt to invoke virtual method 'android.content.ContentResolver android.app.Activity.getContentResolver()

    Attempt to invoke virtual method 'android.content.ContentResolver android.app.Activity.getContentResolver()

    error detecting text after pick an image

    I/flutter (16811): PlatformException(error, Attempt to invoke virtual method 'android.content.ContentResolver android.app.Activity.getContentResolver()' on a null object reference, null, java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ContentResolver android.app.Activity.getContentResolver()' on a null object reference I/flutter (16811): at com.azihsoyn.flutter.mlkit.MlkitPlugin.onMethodCall(MlkitPlugin.java:140) I/flutter (16811): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) I/flutter (16811): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:84) I/flutter (16811): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:865) I/flutter (16811): at android.os.MessageQueue.nativePollOnce(Native Method) I/flutter (16811): at android.os.MessageQueue.next(MessageQueue.java:335) I/flutter (16811): at android.os.Looper.loop(Looper.java:206) I/flutter (16811): at android.app.ActivityThread.main(ActivityThread.java:8506) I/flutter (16811): at java.lang.reflect.Method.invoke(Native Method) I/flutter (16811): at com.android.internal.os.RuntimeInit$MethodAndArgs

    opened by DivaRamadha 0
  • Pod install error with latest version of firebase core

    Pod install error with latest version of firebase core

    Related dependencies

      firebase_storage: ^8.1.2
      firebase_core: ^1.0.2
      cloud_firestore: ^1.0.2
      firebase_auth: ^1.4.0
    
      mlkit: ^0.15.1
    

    I'm getting the following error while installing the pod

    [!] CocoaPods could not find compatible versions for pod "Firebase/CoreOnly":
      In Podfile:
        firebase_core (from `.symlinks/plugins/firebase_core/ios`) was resolved to 1.3.0, which depends on
          Firebase/CoreOnly (= 8.0.0)
    
        mlkit (from `.symlinks/plugins/mlkit/ios`) was resolved to 0.15.0, which depends on
          Firebase/MLModelInterpreter (~> 6.11) was resolved to 6.11.0, which depends on
            Firebase/CoreOnly (= 6.11.0)
    
    

    Podfile :

    # Uncomment this line to define a global platform for your project
    platform :ios, '12.0'
    
    # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
    ENV['COCOAPODS_DISABLE_STATS'] = 'true'
    
    project 'Runner', {
      'Debug' => :debug,
      'Profile' => :release,
      'Release' => :release,
    }
    
    def flutter_root
      generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
      unless File.exist?(generated_xcode_build_settings_path)
        raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
      end
    
      File.foreach(generated_xcode_build_settings_path) do |line|
        matches = line.match(/FLUTTER_ROOT\=(.*)/)
        return matches[1].strip if matches
      end
      raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
    end
    
    require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
    
    flutter_ios_podfile_setup
    
    target 'Runner' do
      use_frameworks!
      use_modular_headers!
    
      flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
    end
    
    post_install do |installer|
      installer.pods_project.targets.each do |target|
        flutter_additional_ios_build_settings(target)
      end
    end
    
    opened by priyeshbhuva 0
  • Failed to load native TensorFlow Lite methods. Check that the correct native libraries are present, and, if using a custom native library, have been properly loaded via System.loadLibrary():

    Failed to load native TensorFlow Lite methods. Check that the correct native libraries are present, and, if using a custom native library, have been properly loaded via System.loadLibrary():

    No implementation found for java.lang.String org.tensorflow.lite.TensorFlowLite.nativeRuntimeVersion() (tried Java_org_tensorflow_lite_TensorFlowLite_nativeRuntimeVersion and Java_org_tensorflow_lite_TensorFlowLite_nativeRuntimeVersion__) E/AndroidRuntime(11990): FATAL EXCEPTION: main E/AndroidRuntime(11990): Process: com.example.mumotionplayer, PID: 11990 E/AndroidRuntime(11990): java.lang.UnsatisfiedLinkError: Failed to load native TensorFlow Lite methods. Check that the correct native libraries are present, and, if using a custom native library, have been properly loaded via System.loadLibrary(): E/AndroidRuntime(11990): java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String org.tensorflow.lite.TensorFlowLite.nativeRuntimeVersion() (tried Java_org_tensorflow_lite_TensorFlowLite_nativeRuntimeVersion and Java_org_tensorflow_lite_TensorFlowLite_nativeRuntimeVersion__) E/AndroidRuntime(11990): at org.tensorflow.lite.TensorFlowLite.init(TensorFlowLite.java:80) E/AndroidRuntime(11990): at org.tensorflow.lite.TensorFlowLite.schemaVersion(TensorFlowLite.java:58) E/AndroidRuntime(11990): at org.tensorflow.lite.TensorFlowLite.version(TensorFlowLite.java:47) E/AndroidRuntime(11990): at com.google.android.gms.internal.firebase_ml.zzpr.(Unknown Source:186) E/AndroidRuntime(11990): at com.google.firebase.ml.custom.FirebaseModelInterpreter.(Unknown Source:25) E/AndroidRuntime(11990): at com.google.firebase.ml.custom.FirebaseModelInterpreter.zza(Unknown Source:38) E/AndroidRuntime(11990): at com.google.firebase.ml.custom.FirebaseModelInterpreter.getInstance(Unknown Source:31) E/AndroidRuntime(11990): at com.azihsoyn.flutter.mlkit.MlkitPlugin.onMethodCall(MlkitPlugin.java:360) E/AndroidRuntime(11990): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) E/AndroidRuntime(11990): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) E/AndroidRuntime(11990): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818) E/AndroidRuntime(11990): at android.os.MessageQueue.nativePollOnce(Native Method) E/AndroidRuntime(11990): at android.os.MessageQueue.next(MessageQueue.java:336) E/AndroidRuntime(11990): at android.os.Looper.loop(Looper.java:174) E/AndroidRuntime(11990): at android.app.ActivityThread.main(ActivityThread.java:7356) E/AndroidRuntime(11990): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(11990): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) E/AndroidRuntime(11990): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) I/Process (11990): Sending signal. PID: 11990 SIG: 9 Lost connection to device.

    opened by prakashssp077 0
  • Remote Model not downloading

    Remote Model not downloading

    Hey @azihsoyn ! Again thanks for your awesome plugin. I had an issue with custom remote models that I had uploaded to firebase. It always says this - Remote model failed to load with options

    Can you help me out as to why this is happening?

    opened by ArnavBansal11 0
Owner
Naoya Yoshizawa
http://rehash.fm
Naoya Yoshizawa
Flutter-Shop-UI-Kit - Create An E-commerce App UI kit Using Flutter

Flutter Shop UI kit If you are planning to create an e-commerce app using Flutte

Abu Anwar 405 Dec 28, 2022
A starter kit for beginner learns with Bloc pattern, RxDart, sqflite, Fluro and Dio to architect a flutter project. This starter kit build an App Store app as a example

Flutter Starter Kit - App Store Example A starter kit for beginner learns with Bloc pattern, RxDart, sqflite, Fluro and Dio to architect a flutter pro

kw101 678 Jan 8, 2023
Let's setup Firebase​​ for our Flutter​​ app on Android​, iOS​ and Flutter Web. Setup Firebase to use Firebase products.

Flutter Tutorial - Firebase Setup For Flutter Web Let's setup Firebase for our Flutter app on Android, iOS and Flutter Web. Setup Firebase to use Fire

null 1 Apr 27, 2022
A complete, ready to use, Neumorphic ui kit for Flutter, 🕶️ dark mode compatible

flutter_neumorphic A complete, ready to use, Neumorphic ui kit for Flutter Try Flutter-Neumorphic on your browser : ?? https://flutter-neumorphic.fire

Idean 1.6k Jan 1, 2023
Face detection app built with Flutter and Firebase ML Kit

Flutter Face Detection Flutter Face Detection with Firebase ML Kit and CustomPainter. Read the article on Medium Made with ?? by Akora-IngDKB. Follow

Akora Ing. Debrah Kwesi Buabeng 44 Sep 29, 2022
An App I made to learn of FIrebase Phone Auth and ML Kit

demoapp A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

D Srikhar Shashi 1 Oct 19, 2021
Flutter Plugin for Google ML Kit Vision

A Flutter plugin to use the capabilities of on-device Google ML Kit

Brian M Tully 39 Oct 10, 2022
A flutter plugin that implements google's standalone ml kit

A flutter plugin that implements google's standalone ml kit

Bharat Biradar 424 Dec 30, 2022
A flutter plugin that implements google's standalone ml kit

Google's ML Kit for Flutter Google's ML Kit for Flutter is a set of Flutter plugins that enable Flutter apps to use Google's standalone ML Kit. Featur

kyle reginaldo 2 Aug 29, 2022
Connect your flutter app to firebase, use firebase's Authentication. Don't mind my poor UI. 😬

flutter_email_auth A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you start

Syed Muhammad Ahmad 2 May 2, 2022
This is just the simplyfied Flutter Plugin use for one of the popular flutter plugin for social media login.

social_media_logins Flutter Plugin to login via Social Media Accounts. Available Social Media Logins: Facebook Google Apple Getting Started To use thi

Reymark Esponilla 3 Aug 24, 2022
A Flutter example to use Google Maps in iOS and Android apps via the embedded Google Maps plugin Google Maps Plugin

maps_demo A Flutter example to use Google Maps in iOS and Android apps via the embedded Google Maps plugin Google Maps Plugin Getting Started Get an A

Gerry High 41 Feb 14, 2022
Flutter-watchtips - Flutter App (Embedded Watch Kit app with iOS version)

watchtips Update Version 2.2 The Watch tips project has been updated again, The interface has been tidied up and a seperate value for the tip cost has

Steve Rogers 137 Dec 31, 2022
flukit is a Flutter UI Kit

A Flutter UI Kit. 一个Flutter UI组件库。

Flutter中国开源项目 4.7k Jan 3, 2023
A Productivity Mobile Application UI kit built with Flutter

Taskez A productivity mobile application UI kit built with Flutter Designs and inspiration by Taskez IOS UI kit. Application Flow - Youtube Show some

Davies Kwarteng 554 Jan 7, 2023
A Flutter Starter Kit (Boilerplate) to kick-start your next Android and iOS app

Flutter Starter Kit (Boilerplate) using the BLoC Pattern A Flutter starter application that utilizes the BLoC Pattern. You can read more at this Mediu

AceLords 233 Dec 28, 2022
Flutter - E Commerce UI KIT ( completely free for everyone )

Flutter E-Commerce UI KIT A powerful Flutter E-Commerce starter template that bootstraps development of your mobile application. Flutter E-Commerce St

Muhammad Furqan 307 Dec 24, 2022
A Flutter IM Kit

flutter_im_kit 概述 flutter_im_kit 是一套基于 Flutter 的 IM 组件库,提供 IM 业务场景下的常用 UI 组件和解决方案。 组件集合 flutter_excellent_badge 常用于消息提醒的红点展示。 BadgePosition 用于设置 flutt

Teren 6 Jul 27, 2022
Mobile and Desktop whatsapp clone with Flutter UI tool kit

Mobile and Desktop whatsapp clone with Flutter UI tool kit

Travis Okonicha 10 Oct 25, 2022
Flutter Movie UI Kit

flutter_movie_uikit A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you star

Dicky Reynaldi 2 Sep 12, 2021