构建TensorFlow for Android的完整详细方法
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git
注意:--recurse-submodules 对于拉取子模块很重要。
从这里安装 Bazel。 Bazel 是 TensorFlow 的主要构建系统。
现在,编辑WORKSPACE,我们可以在之前克隆的TensorFlow的根目录下找到WORKSPACE文件。
# Uncomment and update the paths in these entries to build the Android demo.
#android_sdk_repository(
# name = "androidsdk",
# api_level = 23,
# build_tools_version = "25.0.1",
# # Replace with path to Android SDK on your system
# path = "<PATH_TO_SDK>",
#)
#
#android_ndk_repository(
# name="androidndk",
# path="<PATH_TO_NDK>",
# api_level=14)
如下所示,我们的 sdk 和 ndk 路径:
android_sdk_repository(
name = "androidsdk",
api_level = 23,
build_tools_version = "25.0.1",
# Replace with path to Android SDK on your system
path = "/Users/amitshekhar/Library/Android/sdk/",
)
android_ndk_repository(
name="androidndk",
path="/Users/amitshekhar/Downloads/android-ndk-r13/",
api_level=14)
然后构建 .so 文件。
bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so \
--crosstool_top=//external:android/crosstool \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--cpu=armeabi-v7a
用我们想要的目标架构替换 armeabi-v7a。
图书馆将位于:
bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so
构建 Java 对应项:
bazel build //tensorflow/contrib/android:android_tensorflow_inference_java
我们可以在以下位置找到 JAR 文件:
bazel-bin/tensorflow/contrib/android/libandroid_tensorflow_inference_java.jar
现在我们有了 jar 和 .so 文件。我已经构建了.so文件和jar,你可以直接从project使用。
将libandroid_tensorflow_inference_java.jar放入libs文件夹,右键添加为库。
compile files('libs/libandroid_tensorflow_inference_java.jar')
在主目录下创建jniLibs文件夹,将libtensorflow_inference.so放到jniLibs/armeabi-v7a/文件夹中。
现在,我们将能够调用 TensorFlow Java API。
TensorFlow Java API 通过 TensorFlowInferenceInterface 类公开了所有必需的方法。
现在,我们必须使用模型路径调用 TensorFlow Java API 并加载它。
我写了一篇完整的博客here。