From 7a02a7a892731f9a2d0530bf4ca500cc89429f7e Mon Sep 17 00:00:00 2001 From: Yongjoo Ahn Date: Thu, 8 Oct 2020 15:32:56 +0900 Subject: [PATCH] [Android/tflite] Let NDK know TFLITE_VERSION - After support for tf2-lite, TFLITE_VERSION is required. Let NDK know it - For Android, the name of subplugin should be always "tensorflow-lite" not "tensorflow2-lite" Signed-off-by: Yongjoo Ahn --- .../api/src/main/jni/Android-tensorflow-lite.mk | 22 +++++++++++++++++++++- api/android/api/src/main/jni/Android.mk | 2 -- api/android/build-android-lib.sh | 1 + .../tensor_filter/tensor_filter_tensorflow_lite.cc | 6 +++--- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/api/android/api/src/main/jni/Android-tensorflow-lite.mk b/api/android/api/src/main/jni/Android-tensorflow-lite.mk index 401f4d0..43f782d 100644 --- a/api/android/api/src/main/jni/Android-tensorflow-lite.mk +++ b/api/android/api/src/main/jni/Android-tensorflow-lite.mk @@ -15,6 +15,26 @@ endif include $(NNSTREAMER_ROOT)/jni/nnstreamer.mk +TFLITE_VERSION := 1.13.1 + +_TFLITE_VERSIONS = $(subst ., , $(TFLITE_VERSION)) +TFLITE_VERSION_MAJOR := $(word 1, $(_TFLITE_VERSIONS)) +TFLITE_VERSION_MINOR := $(word 2, $(_TFLITE_VERSIONS)) +TFLITE_VERSION_MICRO := $(word 3, $(_TFLITE_VERSIONS)) + +TFLITE_FLAGS := \ + -DTFLITE_VERSION=$(TFLITE_VERSION) \ + -DTFLITE_VERSION_MAJOR=$(TFLITE_VERSION_MAJOR) \ + -DTFLITE_VERSION_MINOR=$(TFLITE_VERSION_MINOR) \ + -DTFLITE_VERSION_MICRO=$(TFLITE_VERSION_MICRO) + +# define types in tensorflow-lite sub-plugin. FLOAT16/COMPLEX64 for tensorflow-lite >= 2, and INT8/INT16 for tensorflow-lite >=1.13 +ifeq ($(TFLITE_VERSION_MAJOR),2) +TFLITE_FLAGS += -DTFLITE_INT8=1 -DTFLITE_INT16=1 -DTFLITE_FLOAT16=1 -DTFLITE_COMPLEX64=1 +else ifeq ($(shell test $(TFLITE_VERSION_MINOR) -ge 13; echo $$?),0) +TFLITE_FLAGS += -DTFLITE_INT8=1 -DTFLITE_INT16=1 +endif + TF_LITE_DIR := $(LOCAL_PATH)/tensorflow-lite TF_LITE_INCLUDES := $(TF_LITE_DIR)/include @@ -43,7 +63,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := tensorflow-lite-subplugin LOCAL_SRC_FILES := $(NNSTREAMER_FILTER_TFLITE_SRCS) -LOCAL_CXXFLAGS := -std=c++11 -O3 -fPIC -frtti -fexceptions +LOCAL_CXXFLAGS := -std=c++11 -O3 -fPIC -frtti -fexceptions $(NNS_API_FLAGS) $(TFLITE_FLAGS) LOCAL_C_INCLUDES := $(TF_LITE_INCLUDES) $(NNSTREAMER_INCLUDES) $(GST_HEADERS_COMMON) LOCAL_STATIC_LIBRARIES := tensorflow-lite-lib cpufeatures diff --git a/api/android/api/src/main/jni/Android.mk b/api/android/api/src/main/jni/Android.mk index 745395c..876f025 100644 --- a/api/android/api/src/main/jni/Android.mk +++ b/api/android/api/src/main/jni/Android.mk @@ -63,8 +63,6 @@ endif #------------------------------------------------------ ifeq ($(ENABLE_TF_LITE),true) NNS_API_FLAGS += -DENABLE_TENSORFLOW_LITE=1 -# define types in tensorflow-lite sub-plugin. This assumes tensorflow-lite >= 1.13 (older versions don't have INT8/INT16) -NNS_API_FLAGS += -DTFLITE_INT8=1 -DTFLITE_INT16=1 NNS_SUBPLUGINS += tensorflow-lite-subplugin include $(LOCAL_PATH)/Android-tensorflow-lite.mk diff --git a/api/android/build-android-lib.sh b/api/android/build-android-lib.sh index dc2db31..1dda57a 100644 --- a/api/android/build-android-lib.sh +++ b/api/android/build-android-lib.sh @@ -330,6 +330,7 @@ fi if [[ $enable_tflite == "yes" ]]; then sed -i "s|ENABLE_TF_LITE := false|ENABLE_TF_LITE := true|" api/src/main/jni/Android-nnstreamer-prebuilt.mk sed -i "s|ENABLE_TF_LITE := false|ENABLE_TF_LITE := true|" api/src/main/jni/Android.mk + sed -i "s|TFLITE_VERSION := 1.13.1|TFLITE_VERSION := $tf_lite_ver|" api/src/main/jni/Android-tensorflow-lite.mk tar -xJf ./external/tensorflow-lite-$tf_lite_ver.tar.xz -C ./api/src/main/jni fi diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc index ff30b2c..0dac5f5 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc @@ -1145,10 +1145,10 @@ tflite_checkAvailability (accl_hw hw) return -ENOENT; } -#if TFLITE_VERSION_MAJOR == 1 -static gchar filter_subplugin_tensorflow_lite[] = "tensorflow-lite"; -#else +#if TFLITE_VERSION_MAJOR == 2 && !defined(__ANDROID__) static gchar filter_subplugin_tensorflow_lite[] = "tensorflow2-lite"; +#else +static gchar filter_subplugin_tensorflow_lite[] = "tensorflow-lite"; #endif static GstTensorFilterFramework NNS_support_tensorflow_lite = { -- 2.7.4