Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ String res = await Tflite.loadModel(
numThreads: 1, // defaults to 1
isAsset: true, // defaults to true, set to false to load resources outside assets
useGpuDelegate: false // defaults to false, set to true to use GPU delegate
useCoreMLDelegate: false // defaults to false, set to true to use CoreML delegate on iOS devices - has no effect on Android
);
```

Expand Down
1 change: 1 addition & 0 deletions example/ios/Flutter/Debug.xcconfig
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
1 change: 1 addition & 0 deletions example/ios/Flutter/Release.xcconfig
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
15 changes: 11 additions & 4 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@ PODS:
- image_picker (0.0.1):
- Flutter
- TensorFlowLiteC (2.2.0)
- tflite (1.1.2):
- TensorFlowLiteC/Core (2.4.0)
- TensorFlowLiteC/CoreML (2.4.0):
- TensorFlowLiteC/Core
- TensorFlowLiteC/Metal (2.4.0):
- TensorFlowLiteC/Core
- tflite (1.1.1):
- Flutter
- TensorFlowLiteC
- TensorFlowLiteC/Core
- TensorFlowLiteC/CoreML
- TensorFlowLiteC/Metal

DEPENDENCIES:
- Flutter (from `Flutter`)
Expand All @@ -27,8 +34,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
image_picker: a211f28b95a560433c00f5cd3773f4710a20404d
TensorFlowLiteC: b3ab9e867b0b71052ca102a32a786555b330b02e
tflite: f0403a894740019d63ab5662253bba5b2dd37296
TensorFlowLiteC: 09f8ac75a76caeadb19bcfa694e97454cc1ecf87
tflite: d701e08676abd255d3340a79bb8cb4ba1594723c

PODFILE CHECKSUM: 8e679eca47255a8ca8067c4c67aab20e64cb974d

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
34 changes: 26 additions & 8 deletions ios/Classes/TflitePlugin.mm
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@
#elif defined TFLITE2
#import "TensorFlowLiteC.h"
#import "metal_delegate.h"
#import "coreml_delegate.h"
#else
#include "tensorflow/lite/kernels/register.h"
#include "tensorflow/lite/model.h"
#include "tensorflow/lite/string_util.h"
#include "tensorflow/lite/op_resolver.h"
#endif

#include "ios_image_load.h"
#include "ios_image_load.hh"

#define LOG(x) std::cerr

Expand Down Expand Up @@ -118,6 +119,7 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
TfLiteInterpreter *interpreter = nullptr;
TfLiteModel *model = nullptr;
TfLiteDelegate *delegate = nullptr;
bool isCoreMLDelegate = false;
#else
std::unique_ptr<tflite::FlatBufferModel> model;
std::unique_ptr<tflite::Interpreter> interpreter;
Expand Down Expand Up @@ -153,17 +155,28 @@ static void LoadLabels(NSString* labels_path,
const int num_threads = [args[@"numThreads"] intValue];

#ifdef TFLITE2
TfLiteInterpreterOptions *options = nullptr;
model = TfLiteModelCreateFromFile(graph_path.UTF8String);
if (!model) {
return [NSString stringWithFormat:@"%s %@", "Failed to mmap model", graph_path];
}
options = TfLiteInterpreterOptionsCreate();
TfLiteInterpreterOptionsSetNumThreads(options, num_threads);


bool useGpuDelegate = [args[@"useGpuDelegate"] boolValue];
if (useGpuDelegate) {
delegate = TFLGpuDelegateCreate(nullptr);
bool useCoreMLDelegate = [args[@"useCoreMLDelegate"] boolValue];
if (useCoreMLDelegate) {
TfLiteCoreMlDelegateOptions options = {};
options.enabled_devices = TfLiteCoreMlDelegateAllDevices;
options.coreml_version = 3;
delegate = TfLiteCoreMlDelegateCreate(&options);
if (delegate) {
isCoreMLDelegate = true;
}
}
TfLiteInterpreterOptions *options = TfLiteInterpreterOptionsCreate();
if (!delegate && useGpuDelegate) {
TfLiteInterpreterOptionsSetNumThreads(options, num_threads);
delegate = TFLGpuDelegateCreate(NULL);
}
if (!delegate) {
TfLiteInterpreterOptionsAddDelegate(options, delegate);
}
#else
Expand Down Expand Up @@ -1487,10 +1500,15 @@ void runPoseNetOnFrame(NSDictionary* args, FlutterResult result) {

void close() {
#ifdef TFLITE2
TfLiteInterpreterDelete(interpreter);
interpreter = nullptr;
if (delegate != nullptr)
if (isCoreMLDelegate && delegate != nullptr) {
TfLiteCoreMlDelegateDelete(delegate);
} else if (delegate != nullptr) {
TFLGpuDelegateDelete(delegate);
}
delegate = nullptr;
TfLiteModelDelete(model);
#else
interpreter.release();
interpreter = NULL;
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion ios/Classes/ios_image_load.mm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#import <Flutter/Flutter.h>
#include "ios_image_load.h"
#include "ios_image_load.hh"

#include <stdlib.h>
#include <string.h>
Expand Down
6 changes: 4 additions & 2 deletions ios/tflite.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ A Flutter plugin for accessing TensorFlow Lite. Supports both iOS and Android.
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
s.dependency 'TensorFlowLiteC'
s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '$(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/tflite" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/TensorFlowLite/tensorflow_lite" "${PODS_ROOT}/Headers/Public/tflite" "${PODS_ROOT}/TensorFlowLite/Frameworks/tensorflow_lite.framework/Headers" "${PODS_ROOT}/TensorFlowLiteC/Frameworks/TensorFlowLiteC.framework/Headers"' }
s.dependency 'TensorFlowLiteC/Core'
s.dependency 'TensorFlowLiteC/Metal'
s.dependency 'TensorFlowLiteC/CoreML'
s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '$(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/tflite" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/TensorFlowLite/tensorflow_lite" "${PODS_ROOT}/Headers/Public/tflite" "${PODS_ROOT}/TensorFlowLite/Frameworks/tensorflow_lite.framework/Headers" "${PODS_ROOT}/TensorFlowLiteC/Frameworks/TensorFlowLiteC.framework/Headers" "${PODS_ROOT}/TensorFlowLiteC/Frameworks/TensorFlowLiteCMetal.framework/Headers" "${PODS_ROOT}/TensorFlowLiteC/Frameworks/TensorFlowLiteCCoreML.framework/Headers"' }

s.ios.deployment_target = '9.0'
s.static_framework = true
Expand Down
6 changes: 4 additions & 2 deletions lib/tflite.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ class Tflite {
String labels = "",
int numThreads = 1,
bool isAsset = true,
bool useGpuDelegate = false}) async {
bool useGpuDelegate = false,
bool useCoreMLDelegate = false}) async {
return await _channel.invokeMethod(
'loadModel',
{
"model": model,
"labels": labels,
"numThreads": numThreads,
"isAsset": isAsset,
'useGpuDelegate': useGpuDelegate
"useGpuDelegate": useGpuDelegate,
"useCoreMLDelegate": useCoreMLDelegate
},
);
}
Expand Down