tensorflow_demo移植android

一、下载tensorflow项目源码
如果像实现将tensorflow训练的模型移植到安卓手机,首先使用如下代码下载tensorflow的项目源码
git clone --recurse-submoduls https://github.com/tensorflow/tensorflow.git  注意--recurse-submoduls 是为了防止一些protobuf的编译问题。
二、安装bazel
参考自己的 ubuntu源码安装cpu版tensorflow教程。

三、准备工作
1、下载NDK,并将其解压到从github上下载的tensorflow源代码的根目录下(注:其实可以安装在任意目录下,这里以安装在tensorflow下举例),ndk的版本要12及以上,推荐使用r12版本,太高可能会导致bazel出错
wget https://dl.google.com/android/repositor/android-ndk-r12b-linux-x86_64.zip这个好像是源网址,但是被墙了,用wget下载的文件,默认文件是保存在当前的工作路径下。
www.androiddevtools.cn这个网址是一个中文网站,Android SDK Tools--->NDK--->可以下载需要的NDK版本(720M)
下载后.zip文件会存到/root/下载目录底下,把它复制到主文件夹下,可以指定它解压到我自己建立的/tensorflow/ndk目录底下。
unzip android-ndk-r12b-linux-x86_64.zip -d ~/tensorflow/ndk

 

2、安装SDK,SDK也可以选择在安装Android Studio的时候安装,
首先下载并解压sdk tools
www.androiddevtools.cn-->Android SDK Tools-->SDK TOOLS-->androiddk_r24.4.1-linux.tgz下载,将下载后的.tgz文件放在主文件夹下
运行下面代码解压到我指定的路径/tensorflow/sdk中
tar xvzf android-sdk_r24.4.1-linux.tgz -C ~/tensorflow/sdk
3、然后更新sdk,更新的时候会自动安装SDK build tools
cd /root/tensorflow/sdk/android-sdk-linux
sudo tools/android update sdk --no-ui(这个指令会自动下载安装很多个android-XX,占用内存)
sudo tools/android update sdk通过这个我竟然打开了Android SDK manager,在里面可以选择我想下载的版本。
4、修改NDK和SDK的环境变量(修改workspace文件)
在tensorflow的根目录下找到WORKSPACE文件并打开

#android_sdk_repository(
#    name = "androidsdk",
#    api_level = 23,
#    # 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 = "<PATH_TO_SDK>",

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

#android_ndk_repository(
#    name="androidndk",
#    path="<PATH_TO_NDK>",
#    # 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)

    name="androidndk",
    path="/root/tensorflow/ndk/android-ndk-r12b",
    # 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=21)


# Please add all new TensorFlow dependencies in workspace.bzl.

 


四、下载模型,android demo码源(可选,第四步可以直接跳过哦)
tensorflowr0.12码源版本自带了一个tensorflow_demo:TF-classify,在项目中,android demo 的位置是//tensorflow/examples/android
但是android demo码源是不包含训练好的tensorflow模型的,但是在编译的时候需要模型,模型一共有三个,分别对应物体识别TF Classify,行人检测TF Detect和图像风格迁移TF Stylize。(最新版的模型还增加了一个语音识别 TF Speech)
在bazel编译时,可以不用手动下载模型,因为在文件//tensorflow/examples/android/BUILD中设定了自动下载模型的操作,bazel编译apk文件时会自动下载。
但是如果使用的是Andriod studio等其他的方式进行编译时不会运行BAZEL中的自动下载操作。

手动下载模型zip文件:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

五、连接安卓手机
1、安装adb
(sudo) apt-get install android-tools-adb
2、将手机设置为 usb debugging按钮,然后手机通过usb线连接到电脑
3、从电脑端检查手机是否连接成功
adb devices
出现:
List of devices attached
D8YDU15722003144(ID号)    offline(连接状态)
offline是不行的,通过以下办法解决:
切换到sdk安装路径下的build_tools文件夹:
cd /root/tensorflow/sdk/android-sdk-linux/tools
运行:
adb kill-server
sudo adb start-server(要以root权限启动adb),注意此时手机上的弹窗,允许手机调试。
再通过 adb devices检查
出现:
List of devices attached
D8YDU15722003144(ID号)    devices(连接状态)
表明手机连接成功。


六、编译并安装apk文件
1、编译生成apk文件
cd ~/tensorflow
bazel build //tensorflow/examples/android:tensorflow_demo
出现错误:
1、
ERROR: /root/tensorflow/tensorflow/core/kernels/BUILD:4798:1: C++ compilation of rule '//tensorflow/core/kernels:android_tensorflow_kernels' failed (Exit 1).
Target //tensorflow/examples/android:tensorflow_demo failed to build
尝试:
sudo apt-get install lib32ncurses5 lib32stdc++6
2、
ERROR: /root/tensorflow/WORKSPACE:20:1: no such package '@androidsdk//': Android SDK api level 24 was requested but it is not installed in the Android SDK at /root/tensorflow/sdk/android-sdk-linux. The api levels found were [27, 26, 25]. Please choose an available api level or install api level 24 from the Android SDK Manager. and referenced by '//external:android/sdk'.
ERROR: Analysis of target '//tensorflow/examples/android:tensorflow_demo' failed; build aborted: Loading failed.
3、
ERROR: /root/.cache/bazel/_bazel_root/efb88f6336d9c4a18216fb94287b8d97/external/protobuf_archive/BUILD:135:1: C++ compilation of rule '@protobuf_archive//:protobuf' failed (Exit 1).
external/protobuf_archive/src/google/protobuf/wrappers.pb.cc:2975:1: fatal error: error writing to /tmp/ccGM1UiM.s: No space left on device
 }  // namespace google
4、
CONFLICT: asset:WORKSPACE is provided with ambiguous priority from:
    external/stylize/WORKSPACE
    external/speech_commands/WORKSPACE
CONFLICT: asset:WORKSPACE is provided with ambiguous priority from:
    external/mobile_ssd/WORKSPACE
    external/inception5h/WORKSPACE
INFO: From Compiling external/protobuf_archive/src/google/protobuf/io/coded_stream.cc:
external/protobuf_archive/src/google/protobuf/io/coded_stream.cc: In member function 'google::protobuf::int64 google::protobuf::io::CodedInputStream::ReadVarint32Fallback(google::protobuf::uint32)':
external/protobuf_archive/src/google/protobuf/io/coded_stream.cc:420:12: warning: 'temp' may be used uninitialized in this function [-Wmaybe-uninitialized]


上面出现的错误没有找到具体的解决方案,但是还是要装上64位ubuntu中缺少的部分32位库文件

编译成功后会提示生成如下三个文件:
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

2、向安卓手机安装apk文件
adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
报错:error:unknown option -g
查看adb使用详细文档,adb install 后面跟的一些可选参数来控制安装APK的行为,可用参数及含义如下:
-r:允许覆盖安装
-g:授予所有运行时权限
运行:adb install bazel-bin/tensorflow/examples/android/tensorflow_demo.apk安装成功!!!这个我也没想通!**********此处是2017年11月8日*************

七、参考教程
http://www.cnblogs.com/greentomlee/p/5656467.html
blog.csdn.net/masa_fish/article/details/54097796此教程中有TensorFlow官网教程:将 TensorFlow 深度学习模型,移植到安卓手机,进行物体识别、行人检测和图像风格迁移的一个具体实现过程,它在github上,但是不知道为什么连接不能复制粘贴过来。

 

接下来要安装好Android Studio,通过Android Studio把tensorflow demo移植到安卓手机上。可是我的电脑内存报警了!!要不要重装系统呢?还是折腾个扩容工具????又心塞塞。。。。。。。。。。。。

 

 

//以下步骤还没有亲测过。。。

四、安装Android Studio
1、首先下载Android Studio安装包,官网下载地址:dl.google...又被墙了,CSDN下载了一个,放在主文件夹下
2、将下载的android studio...zip文件解压到自己要安装的路径下面
unzip android-studio-ide-141.1890965-linux.zip -d ~/AndroidStudio
然后进入路径:
cd AndroidStudio/android-studio/bin
运行 ./studio.sh 则会看到android studio启动,如果启动失败检查一下studio.sh是否有可执行权限
在弹窗中选默认的 i do have a previous version of studio...
弹出问题窗口:unable to access android sdk add on list:这是因为没有检测到系统中有sdk而且我下载的android studio的版本也没有自带sdk
解决办法是:在androidstudio的安装目录下找到:bin\idea.properities文件,在文件的末尾添加一行disable.android.first.run=true
然后顺利进入了welcome to android studio界面

五、修改配置文件gradle
打开/root/tensorflow/tensorflow/examples/android下的build.gradle文件
1、将def bazelLocation = '/usr/local/bin/bazel'代码更改为自己的bazel安装路径

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值