之前的文章中,我们跟大家介绍过如何使用NNAPI来加速TFLite-Android的inference(可参考使用NNAPI加速android-tflite的Mobilenet分类器)。不过之前介绍的文章,在进行模型加载和推断使用的是官方提供的预编译好的Jar文件,业务代码都通过Java进行编写。如果你想使用C++在native层进行业务代码的编写,你也可以参考本文的实现思路。跟之前专栏中介绍的框架一样,我们首先需要进行框架的编译 — TFLite的库函数编译。我们先下载最新版本master分支的tensorflow源码。
git clone https://github.com/tensorflow/tensorflow
在下载好源码以后,我需要进入tensorflow文件夹目录下,然后进行配置。在此之前,你还需要确保NDK和Bazel安装的正确性,本文采用的NDK为ndk-r17c,bazel采用的版本为 0.24.1。
cd tensorflow
./configure
配置完毕后,你还需要在该目录下的WORKSPACE文件中添加ndk的环境,直接在文件的末尾加入如下参数即可,
android_ndk_repository(
name = "androidndk", # Required. Name *must* be "androidndk".
api_level = 21,
)
本文在RK3288开发板进行验证,Android系统为5.1版本。所以为了兼容,这里采用的APP_PLATFORM为21,对应于api_level为21。下面,我们开始进行TFLite的模型编译。
bazel build