您的位置:首页 > 移动开发 > Android开发

TensorFlow Android Camera Demo(Ubuntu Trusty 14.04 LTS)

2016-11-03 14:36 316 查看


第一部分

Tensorflow重要学习资料 
英文官网 
中文社区 
极客学院 
Tensorflow Github


0 资料介绍

Tensorflow Mobile 

官网:https://www.tensorflow.org/mobile.html

Github–Android Camera Demo 

Github:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android/ (重点参考资料)

Android Studio 

官网:https://developer.android.com/studio/index.html 

教程:http://blog.infocool.net/qingqingdeaini/article/details/51995981(Blog第5节)

SDK 

Baidu云下载链接:http://pan.baidu.com/s/1c1Y7rXY 密码:uue8 

官网:https://developer.android.com/studio/releases/build-tools.html 

SDK结构: 

|—Sdk 

|——add-ons(Google API) 

|——build-tools(android 开发所需) 

|——————24.0.1 

|——extras 

|——platforms (android Level API) 

|——————android-24 

|——platform-tools(各版本SDK。根据API Level划分的SDK版本) 

|——tools( 各版本SDK通用工具。比如adb、和aapt、aidl、dx等文件)

NDK 

官网:https://developer.android.com/ndk/index.html 

中文网:http://www.androiddevtools.cn/ 

NDK百度云下载链接:http://pan.baidu.com/s/1eSE0GWq 密码:6226

Bazel 

官网:http://www.bazel.io/docs/install.html

说明
# 24 July, 2016; Ling Bao
#
# Ubuntu Trusty 14.04 LTS (虚拟机) Ubuntu Kylin 16.04.1 LTS也适用
# 内存 2G; 处理器 2
#
# python2.7
# JDK8
# SDK & NDK (具体版本详见本Blog 2.2.2. 配置WORKSPACE)
1
2
3
4
5
6
7
8


1 环境搭建


1.1 配置jdk环境(不是必须的步骤)

参考资料 

教程:http://blog.infocool.net/qingqingdeaini/article/details/51921543(Blog第一节)

配置环境变量

# 打开配置文件
sudo gedit /etc/profile #Global Env
或者
sudo gedit ~/.bashrc    #Local Env

#配置内容
eg.
JAVA_HOME=/usr/sparkdir/java/jdk1.8.0_91
PATH=$JAVA_HOME/bin:$PATH   CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export JAVA_HOME PATH CLASSPATH

# 使配置生效
source /etc/profile
或者
source ~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


1.2 SDK与NDK下载

略,详见0节 资源介绍


1.3 安装Bazel


1.3.1 Using our custom APT repostiory

## Install JDK 8
# As For Ubuntu Trusty (14.04 LTS)
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update sudo apt-get install oracle-java8-installer # As For Ubuntu Wily (15.10) sudo apt-get install openjdk-8-jdk ## Add Bazel distribution URI as a package source (one time setup) echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add - ## Update and install Bazel sudo apt-get update && sudo apt-get install bazel sudo apt-get upgrade bazel
1
2
3
4


1.3.2 Using binary installer

## Install JDK 8(同上)

## Install required packages
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
1
2
3
4


1.3.3 Compiling Bazel from source

## Compiling
git clone https://github.com/bazelbuild/bazel.git cd bazel
./compile.sh

## Configurate Env
参考教程:http://blog.csdn.net/qingqingdeaini/article/details/51995981(Blog第5节第3小点)
sudo gedit /etc/environment
1
2
3
4
5
6
7
8


第二部分


2 Tensorflow Android Camera Demo


2.1 下载Tensorflow源码

/tensorflow/examples/android是Camera Demo
## 命令来源于http://blog.infocool.net/wei220000/article/details/50985609(Blog第二:Build APK第2小点的说明)
git clone --recurse-submodules https://github.com/tensorflow/tensorflow 
备注:--recurse-submodules 参数是必须得, 用于获取 TesorFlow 依赖的 protobuf 库.
1
2
3
4


2.2 下载训练库、配置WORKSPACE、编译


2.2.1 下载训练库

训练库官方下载点这里,并全部解压到assets文件夹内(需要在android项目中新建/assets文件夹)

百度云下载链接:http://pan.baidu.com/s/1ceGZaI 密码:jv47

注意:是将解压后的inception5h中的文件拷贝到assests下。如果不这样做,在andorid上运行编译后的apk提示无 inception5h中的 .txt文件。
# 解压到/android/assests
unzip inception5h.zip -d ~/tensorflow/tensorflow/examples/android/assets/
1
2


2.2.2. 配置WORKSPACE

## 配置/tensorflow/WORKSPACE文件,打开并去掉android_sdk_repository和android_ndk_repository的#注释,替换SDK和NDK的路径,配置后内容(部分)如下

## 打开配置文件
gedit ./tensorflow/WORKSPACE

## android_sdk_repository和android_ndk_repository配置内容
# Uncomment and update the paths in these entries to build the Android demo.
android_sdk_repository(
name = "androidsdk",
api_level = 24,
build_tools_version = "24.0.1",
# Replace with path to Android SDK on your system
path = "/home/ubuntu1/Android/Sdk",
)
#
android_ndk_repository(
name="androidndk",
path="/home/ubuntu1/Android/android-ndk-r11c",
api_level=21)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19


2.2.3 编译

编译
## 进入tensorflow根目录进行编译,编译成功后会输出apk到tensorflow/bazel-bin/tensorflow/eexamples/android/
bazel build //tensorflow/examples/android:tensorflow_demo

## 如果想输出详尽的编译错误信息需要增加 --verbose_failures
bazel build //tensorflow/examples/android:tensorflow_demo --verbose_failures

## If you get build errors about protocol buffers, run git submodule update --init and build again
git submodule update --init
1
2
3
4
5
6
7
8

错误分析
## 编译过程中出现如下错误
ERROR: /home/ubuntu1/.cache/bazel/_bazel_ubuntu1/036d6be7ed7ea8f6432b9254606342c5/external/gif_archive/BUILD:14:1: C++ compilation of rule '@gif_archive//:gif' failed: namespace-sandbox failed: error executing command
(cd /home/ubuntu1/.cache/bazel/_bazel_ubuntu1/036d6be7ed7ea8f6432b9254606342c5/execroot/tensorflow && \
exec env - \
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games \
/home/ubuntu1/.cache/bazel/_bazel_ubuntu1/036d6be7ed7ea8f6432b9254606342c5/execroot/tensorflow/_bin/namespace-sandbox @/home/ubuntu1/.cache/bazel/_bazel_ubuntu1/036d6be7ed7ea8f6432b9254606342c5/execroot/tensorflow/bazel-sandbox/19c766ad-27d9-4939-9e4c-b8d2024aac49-94.params -- /usr/bin/gcc -U_FORTIFY_SOURCE '-D_FORTIFY_SOURCE=1' -fstack-protector -Wall -Wl,-z,-relro,-z,now -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 -DNDEBUG -ffunction-sections -fdata-sections -g0 -DHAVE_CONFIG_H -iquote external/gif_archive -iquote bazel-out/host/genfiles/external/gif_archive -iquote external/bazel_tools -iquote bazel-out/host/genfiles/external/bazel_tools -isystem external/gif_archive/giflib-5.1.4/lib -isystem bazel-out/host/genfiles/external/gif_archive/giflib-5.1.4/lib -isystem external/bazel_tools/tools/cpp/gcc3 -fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -MD -MF bazel-out/host/bin/external/gif_archive/_objs/gif/external/gif_archive/giflib-5.1.4/lib/dgif_lib.d -c external/gif_archive/giflib-5.1.4/lib/dgif_lib.c -o bazel-out/host/bin/external/gif_archive/_objs/gif/external/gif_archive/giflib-5.1.4/lib/dgif_lib.o).
external/gif_archive/giflib-5.1.4/lib/dgif_lib.c:24:29: fatal error: gif_lib_private.h: No such file or directory
#include "gif_lib_private.h"

## 分析原因
从出错信息可以发现是.../bazel/.../tensorflow/_bin/namespace-sandbox出现了错误,因此怀疑是没有安装tensorflow。
出错信息:/home/ubuntu1/.cache/bazel/_bazel_ubuntu1/036d6be7ed7ea8f6432b9254606342c5/execroot/tensorflow/_bin/namespace-sandbox

## 在tensorflow根目录执行./configure
得到错误信息:Can't find swig. Ensure swig is in $PATH or set $SWIG_PATH. 解决方法:sudo apt-get -install swig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


第三部分


3 安装tensorflow

参考资料如下: 
极客翻译 
中文社区 
官网资料


3.1 安装 Bazel

略,见本Blog 1.3节


3.2 安装其他依赖


3.2.1 补充知识

参考资料 
http://blog.infocool.net/u011534057/article/details/51615193
修改python版本
方法1:基于用户修改 Python 版本
ls /usr/bin/python* # 查看已安装的python
python --version    # 查看python版本信息

# 设置别名操作
gedit ~/.bashrc
alias python='/usr/bin/python3.4' # 添加到./bashrc
source ~/.bashrc # 使配置生效

方法2:在系统级修改 Python 版本
使用 update-alternatives 来为整个系统更改 Python 版本
sudo update-alternatives --list python # 罗列出所有可用的 python 替代版本信息
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 # 将python2.7更新至替代列表 选项为1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 2 # 将python3.4更新至替代列表 选项为2
update-alternatives --config python # 在列出的 Python 替代版本中任意切换

## 移除替代版本
eg.
update-alternatives --remove python /usr/bin/python2.7 # 将其从 update-alternatives 列表中删除掉

## 移除软连接
eg.
rm -rf /data/logs # 移除软连接
ln -s /temp/logs /data/logs # 创建软连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25


3.2.2 安装pip(或Python3 的 pip3)

以python 2.7为例
sudo apt-get install python-pip python-dev


3.2.3 安装numpy

# For Python 2.7:
$ sudo apt-get install python-numpy swig python-dev python-wheel
# For Python 3.x:
$ sudo apt-get install python3-numpy swig python3-dev python3-wheel
1
2
3
4


3.3 可选: 安装 CUDA (在 Linux 上开启 GPU 支持)

为了编译并运行能够使用 GPU 的 TensorFlow, 需要先安装 NVIDIA 提供的 Cuda Toolkit 7.0 和 CUDNN 6.5 V2.

TensorFlow 的 GPU 特性只支持 NVidia Compute Capability >= 3.5 的显卡. 被支持的显卡 包括但不限于:

NVidia Titan 

NVidia Titan X 

NVidia K20 

NVidia K40

安装的流程 

1. 下载并安装 Cuda Toolkit 7.0 

2. 下载并安装 CUDNN Toolkit 6.5 

3. 配置 TensorFlow 的 Cuda 选项 

4. 编译目标程序, 开启 GPU 支持

中文参考:‘Linux
安装’节的‘可选: 安装 CUDA (在 Linux 上开启 GPU 支持)’小点 
官网参考:‘Installation
for Linux’节的‘Optional: Install CUDA (GPUs on Linux)’小点


3.4 安装tensorflow

官方提供了 Pip, Docker, Virtualenv, Anaconda 或 源码编译的方法安装 TensorFlow,这里选择pip方式安装。


3.4.1 安装 pip

## 同1.6.2.2节

# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev

# Mac OS X
$ sudo easy_install pip
1
2
3
4
5
6
7


3.4.2 安装 TensorFlow

## python 2.7

# Ubuntu/Linux 64-bit, CPU only, Python 2.7:
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl 
# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7. Requires CUDA toolkit 7.5 and CuDNN v4.
# For other versions, see "Install from sources" below.
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl 
# Mac OS X, CPU only:
$ sudo easy_install --upgrade six
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl 
## python 3x

# Ubuntu/Linux 64-bit, CPU only, Python 3.4:
$ sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp34-cp34m-linux_x86_64.whl 
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4. Requires CUDA toolkit 7.5 and CuDNN v4.
# For other versions, see "Install from sources" below.
$ sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0-cp34-cp34m-linux_x86_64.whl 
# Mac OS X, CPU only:
$ sudo easy_install --upgrade six
$ sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py3-none-any.whl[/code]1 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25


3.4.3 测试

测试Tensorflow


第四部分


4 结语

## 完成以上步骤后环境就搭建完毕了,再一次进行编译
bazel build //tensorflow/examples/android:tensorflow_demo --verbose_failures

## 执行结果
Target //tensorflow/examples/android:tensorflow_demo up-to-date:
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
INFO: Elapsed time: 3730.512s, Critical Path: 3464.62s

## 结果截图如下
1
2
3
4
5
6
7
8
9
10
11



## 从结果可以看出深度神经网络模型在编译过程中花费总时间为3730.512s,数据流图的关键路径花费时间为3464.62s,因此这一过程用时很多,造成的原因留作后续深入分析。

## 可以将~/.cache/bazel/_bazel_ubuntu1/036d6be7ed7ea8f6432b9254606342c5/execroot/tensorflow/bazel-out/local-fastbuild/bin/tensorflow/examples/android/_dx/tensorflow_demo/native_symlinks/armeabi-v7a/中把libtensorflow_demo.so抠出来,放到Android studio中用于其他开发。
1
2
3


5 Android Camera Demo 源码及其Apk

获取下载资源点这里 

|——TensorflowCameraDemo 

|—————————————android 

|—————————————libtensorflow_demo.so 

|—————————————tensorflow_demo.apk
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息