最近这两天探索将TensorFlow移植到Android上的问题,跑了下官方的Demo

参考了http://blog.csdn.net/masa_fish/article/details/54097796

由于环境的不一致,遇到了各种坑,现在将其写下来,以做记忆


1、下载代码

第一步当然是下载代码

项目在github上的地址:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android


git下载代码:

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

--recurse-submodules这个必须添加

Demo在源码中的位置:tensorflow/examples/android2、安装Bazel

官网介绍安装的网站:https://docs.bazel.build/versions/master/install.html

我的系统是ubuntu14.04,也不想研究Bazel的代码,就没有下载源码编译安装

第一步,安装JDK8

    执行:

        sudo apt-get install openjdk-8-jdk


   Ubuntu 14.04 执行下面命令:

        sudo add-apt-repository ppa:webupd8team/java         sudo apt-get update && sudo apt-get install oracle-java8-installer 第二步,添加Bazel作为一个包资源    echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list    curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -第三步,安装    sudo apt-get update && sudo apt-get install bazel第四步,更新    sudo apt-get upgrade bazel


3、安装SDK与NDK

去官网下载,然后放到项目目录下,下载地址自行百度

配置位置,在项目根目录下找到WORKSPACE这个文件,打开

找到android_sdk_repository与android_ndk_repository这个两个配置项,本来它们是被注释掉的,把它们打开

然后修改path属性指向相应的目录,修改使用的版本信息等

android_sdk_repository(
    name = "androidsdk",
    api_level = 26,
    # Ensure that you have the build_tools_version below installed in the
    # SDK manager as it updates periodically.
    build_tools_version = "26.0.1",
    # Replace with path to Android SDK on your system
    path = "android-sdk-linux",
)

android_ndk_repository(
    name="androidndk",
    path="android-ndk-r14b",
    # This needs to be 14 or higher to compile TensorFlow.
    # Please specify API level to >= 21 to build for 64-bit
    # archtectures or the Android NDK will automatically select biggest
    # API level that it supports without notice.
    # Note that the NDK version is not the API level.
    api_level=14)


这里讲下,这里遇到的两个坑。

1、NDK的版本问题,这里不能用最新的NDK,最大只支持到14,但也不要小于10。我就是去官网下了个最新的,然后编译各种c++头文件找不到,崩溃

2、NDK对cmake的版本有要求,我的ubuntu14.04系统的cmake是2.8的,但ndk_r14最小要求3.6版本,所以又去官网下了个最新的3.9版本才可以


4、模型下载问题

源码项目下的编译,每次清空重新编译,都会重新下载下模型文件。这很浪费时间,可以如下改下:

打开文件tensorflow/examples/android/BUILD,把下面红色内容注释掉,即在编译的时候不再下载文件了

android_binary(
    name = "tensorflow_demo",
    srcs = glob([
        "src/**/*.java",
    ]),
    # Package assets from assets dir as well as all model targets. Remove undesired models
    # (and corresponding Activities in source) to reduce APK size.
    assets = [
        "//tensorflow/examples/android/assets:asset_files",
        #":external_assets",
    ],
    assets_dir = "",
    custom_package = "org.tensorflow.demo",
    inline_constants = 1,
    manifest = "AndroidManifest.xml",
    manifest_merger = "legacy",
    resource_files = glob(["res/**"]),
    tags = [
        "manual",
        "notap",
    ],
    deps = [
        ":tensorflow_native_libs",
        "//tensorflow/contrib/android:android_tensorflow_inference_java",
    ],
)


手动下载模型文件,并解压到assert目录,执行下面的shell

BASE_URL=https://storage.googleapis.com/download.tensorflow.org/models
for MODEL_ZIP in inception5h.zip ssd_mobilenet_v1_android_export.zip stylize_v1.zip
do
  curl -L ${BASE_URL}/${MODEL_ZIP} -o /tmp/${MODEL_ZIP}
  unzip /tmp/${MODEL_ZIP} -d tensorflow/examples/android/assets/
done


5、编译

bazel build -c opt //tensorflow/examples/android:tensorflow_demo

成功之后生成下面三个文件

bazel-bin/tensorflow/examples/android/tensorflow_demo_deploy.jar bazel-bin/tensorflow/examples/android/tensorflow_demo_unsigned.apk bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

上述命令编译出来的是armv7版本的,只可以在arm手机上跑,我的模拟器是x86的还是无法运行,后来找到项目里其实有编译的脚本,式了下还是可以用的

编译其它cpu版本的软件:

    打开脚本文件tensorflow/tools/ci_build/builds/android.sh

    将里面的--fat_apk_cpu=x86_64修改为你需要的,然后编译

编译所有cpu支持版本软件:

    执行脚本tensorflow/tools/ci_build/builds/android_full.sh



更多相关文章

  1. 解决Android(安卓)5.0以上版本Button自带阴影效果的方法
  2. Android(安卓)Studio中svn的使用(全部在这里)
  3. Android调试.so库常用工具
  4. Android开发框架介绍
  5. Error:(22, 0) Could not find method android()
  6. Android(安卓)Studio 快捷键 (Mac OS X)
  7. Android(安卓)Studio JNI开发-CMake方式
  8. 《第一行代码》第一章
  9. Android开源库集锦

随机推荐

  1. android解决无法设定listview的item高度(
  2. Android(安卓)yyyy-MM-dd'T'HH:mm:ss.SSS
  3. 手动root android 模拟器(emulator)详细
  4. Android(安卓)解决APN无权限问题
  5. Android(安卓)Developers 系列 01 - Intr
  6. Android(安卓)EditText禁止输入Emoji后设
  7. Android(安卓)GestureDetector方法详解
  8. android編譯內核模塊
  9. Android常用框架整理
  10. 锦囊篇|一文摸懂EventBus