TensorFlow Android开发入门(1)

1、Mac环境下安装和编译

TensorFlow的深度学习有GPU和CPU两种版本,因为手上的MacBookPro16是不带独立GPU的,所以只能选择不带GPU版本的通过本地的PIP安装环境依赖,下列操作均在终端进行:

//请先泡茶
 git clone https://github.com/tensorflow/tensorflow 
 //这时候去喝茶,喝完回来你会看到才刚开始
 cd tensorflow
 git checkout Branch
 //切换到制定分支,如r1.0,实际上如果不求稳定,关系也不大

接下来安装编译环境bazel,这个是谷歌开源的分布式构建工具

//首先确保JDK环境为1.8
java -version
//安装Homebrew,这是mac下的自动安装工具
 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//安装bazel,这里一般不会出问题,有问题请自行谷歌
brew install bazel

最后安装python依赖:

sudo pip install six numpy wheel

环境到此应该就好了,接下来是配置脚本的工作

./configure //这里会有一堆的询问,按照实际情况填写即可

编译PIP安装包

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

生成.whl文件,供安装使用

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

安装

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.0.1-cp27-cp27m-macosx_10_12_x86_64.whl

试运行python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))

接下来是编译Android 平台应用,下载SDK和NDK,修改WORKSPACE文件如下:

# Uncomment and update the paths in these entries to build the Android demo.
android_sdk_repository(
    name = "androidsdk",
    api_level = 23,
    build_tools_version = "25.0.2",
    # Replace with path to Android SDK on your system
    path = "/users/william/library/android/sdk",
)
#
android_ndk_repository(
    name="androidndk",
    path="/users/william/library/android/ndk/r13b",
    api_level=21)

然后编译:

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

根据生成的文件提示即可

2、Android studio 编译

直接在Android studio中打开tensorflow/examples/android 目录工程即可,如有必要需要打开gradle编译部分依赖关系和语法问题

如果发现assets文件夹下缺少pb等学习模型文件,则下载以下文件,解压内容放在该目录下即可

https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1a.zip
https://storage.googleapis.com/download.tensorflow.org/models/stylize_v1.zip

最后准备一杯茶,点击编译,慢慢喝茶干点别的事情,比如说写这篇文章 我的配置是MacBook Pro 2016款带Touchbar,内存为16Gb

补充一句,这个工程的NDK是通过调用Bazel完成的,部分拷贝动作通过python和一些sh脚本完成

3、Yolo模型的使用(不看也关系不大)

Yolo是一个不错的算法模型:YOLO: Real-Time Object Detection 这里提供了一些训练好了的weights数据,效果见:https://www.youtube.com/watch?v=VOC3huqHrss 但是呢,因为我们用的是Android,所以使用的是tiny版本,反应速度和识别信度都比较低。

Darkflow thtrieu/darkflow 提供了一个将weights数据转化为TensorFlow pb模型的方法 打开上面的android demo代码,在DetectorActivity 中看到这里已经集成了这部分的实现,1.0之后Google官方已经将Classifier抽象出来了,具体内容很简单,自己看代码。

具体可以通过./flow –model cfg/tiny-yolo-voc.cfg –load bin/tiny-yolo-voc.weights –savepb –verbalise=True 命令在darkflow中将weights转化为pb文件,保证命名正确之后将pb文件放在assets中即可

    原文作者:WilliamChen
    原文地址: https://zhuanlan.zhihu.com/p/27039428
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞