tensorflow编译
-
Mac平台首先安装brew,如果你不知道brew请自行google
-
使用brew安装bazel工具
brew install bazel
复制代码
确认bazel安装成功,可以使用命令 - bazel version
- 使用bazel构建tensorflow的so库
//下载tensorflow源码
git clone https://github.com/tensorflow/tensorflow.git
//进入tensorflow源码目录,在workspace文件中添加如下配置
#注意对应配置好你的sdk版本以及位置,还有ndk的版本和位置
android_sdk_repository(
name = "androidsdk",
#api_level需要设置成你本地sdk最高的版本,推荐23及以上,在android:build.gradle 以及AndroidManifest.xml也对应修改targetSdkVersion
api_level = 25,
build_tools_version = "27.0.3",
path = "/Users/yanfei/Library/Android/sdk",
)
android_ndk_repository(
name = "androidndk",
path = "/Users/yanfei/Library/Android/sdk/ndk-bundle",
api_level = 15, #api_level必须为14或更高
)
//进入目录:tensorflow/contrib/lite/java/demo/app/src/main
bazel build --cxxopt='--std=c++11' //tensorflow/contrib/lite/java:tensorflowlite
--crosstool_top=//external:android/crosstool
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain
--cpu=armeabi-v7a
cpu版本最好使用armeabi-v7a,如果选用armeabi的话编译会出错,别的cpu类型没有尝试
复制代码
-
编译完成后在tensorflow/bazel-out/armeabi-v7a-opt/bin/tensorflow/contrib/lite/java可以看到相应的.so
-
剩下就是在android项目中引入.so和相应的jar了, 部分build.gradle文件
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ndk {
moduleName "tensorflowlite_jni"
abiFilters "armeabi"
}
aaptOptions {
noCompress "tflite"
noCompress "lite"
}
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
resources.srcDirs = ['src/main/res']
aidl.srcDirs = ['src/main/java']
// renderscript.srcDirs = ['src']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
jniLibs.srcDirs = ['src/main/libs']
jni.srcDirs = []
}
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:+'
}
复制代码