移动端使用tensorflow lite爬坑攻略

tensorflow编译

  1. Mac平台首先安装brew,如果你不知道brew请自行google

  2. 使用brew安装bazel工具

brew install bazel
复制代码

确认bazel安装成功,可以使用命令 - bazel version

  1. 使用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类型没有尝试
复制代码
  1. 编译完成后在tensorflow/bazel-out/armeabi-v7a-opt/bin/tensorflow/contrib/lite/java可以看到相应的.so

  2. 剩下就是在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:+'
}
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值