行人识别之安卓开发(一)

ubuntu 14.04中安装Java,结合tensorflow进行安卓开发第一个小程序可能是利用YOLOv2对行人的识别

先基于tensorflow做一个安卓版本的mnist识别

一、回顾tensorflow的mnist的练习,见《tensorflow学习笔记五:mnist实例—卷积神经网络(CNN)》

import tensorflow.examples.tutorials.mnist.input_data as input_data:

/home/echo/anaconda2/envs/python34/lib/python3.4/site-packages/tensorflow/examples/tutorials/mnist/input_data.py确实存在,

首先/home/echo/anaconda2/envs/python34是我的额环境路径,环境下有可以使用的lib包,其中 python3.4就是安装在下面的Python,然后我用是利用python的pip安装的tensorflow,所以它的所有包会在 site-packages下面,可以直接import tensorflow,至于另外想import tensorflow的其他函数等等,就是全部的文件路径了,甚至.函数名。

基于tensorflow,做android

github.com/miyosuda/TensorFlowAndroidMNIST
github.com/miyosuda/TensorFlowAndroidMNIST/tree/master/trainer-script

见:/home/echo/EXERCISEs/mnistAndroid,注意用他的input_data。

expert.py就是训练好模型,把模型的所有求出来的权重和偏置等都设为常量,放到图中,把图打包成.pb文件

NDK(Native Development Kit):Android应用运行在Dalvik虚拟机中。NDK允许开发人员使用本地代码语言(例如C和C++)实现应用的部分功能。这样以代码重用的形式能够给某类应用提供方便,而且在某些情况下能提高运行速度

下载解压 NDK(www.jianshu.com/p/e38679c9b2c5

$cd /home/echo/anaconda2/envs/python34/lib/python3.4/site-packages/tensorflow

$https://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip

$ unzip android-ndk-r12b-linux-x86_64.zip -d /home/echo/anaconda2/envs/python34/lib/python3.4/site-packages/tensorflow #

unzip -d:将文件解压到指定文件夹

And then update your PATH environment variable. For example,

export NDK_HOME="/home/echo/vision/tensorflow/android-ndk-r12b"
export PATH=$PATH:$NDK_HOME

见:/home/echo/vision/TensorFlowAndroidMNIST-master,但是我不知道生成的.os文件是做什么用的,失败!!



%----------------------------上面有点中途断掉了------------------------------

接下来按照网址: www.jianshu.com/p/e38679c9b2c5
环境:Ubuntu 14.04;

%----------------------------------------以下真是无用功---------------------------------------

安装Java1.8(即JDK1.8),按照网址:jingyan.baidu.com/article/eb9f7b6d8f82a6869364e8a7.html

但是,我发现,Ubuntu本身就有JDK1.7,换成另一个路径,因为防止JDK1.7不适用,还是继续安装,换成jvm1.8路径下。

注意:此处解压不要提取,写命令:

echo@echo-PC:~$ sudo tar zxvf /home/echo/personalfiles/files_tostall/jdk-8u131-linux-x64.gz -C /usr/lib/jvm1.8
export JAVA_HOME=/usr/lib/jvm1.8/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib#注意前面有一点
export PATH=${JAVA_HOME}/bin:$PATH

java -version,输出:

java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

注意:原文中通过apt-get安装Java 1.8,就是在安装JDK1.8。但是后面安装 bazel还是说需要安装Oracle JDK 8,可是又是总是出现“正在设定...”的东西,让我确定,鼠标按不好,我是蠢了,Ubuntu系统确定不是鼠标点击,而是“Enter”键盘,箭头左右选择,妈蛋!!!

END



如果环境是Ubuntu15.10,跳过此步骤。但在Ubuntu14.04,执行此步骤,安装Oracle JDK 8

安装 bazel:类似make,对于为什么要重新发明一个构建工具而不直接使用Make,Google认为Make控制得太细,最终的结果完全依靠开发人员能正确编写规则。很久以前,Google使用自动生成的臃肿的Makefile来构建他们的软件,速度太慢,结果不可靠,最终影响了研发人员的效率和公司的敏捷性。所以他们做了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.io/bazel-release.pub.gpg | sudo apt-key add -
$ sudo apt-get update && sudo apt-get install bazel #又出现之前的那个要死的问题啦~~断掉!!!夭折了~~~
$ sudo apt-get upgrade bazel #升级 bazel,升级好久,把我吓死了,还好最后caffe等不影响
git clone https://github.com/tensorflow/tensorflow.git 下载在~/vision中

一句句执行麻烦

SDK目录下的各个文件:

|----add-ons : Google API
|----platforms : 用于存放android Level API .可以查看《最新Android系统版本与API等级对应关系表》,API 21对应的是Android 5.0,www.cnblogs.com/rencm/p/5315353.html
|----platform-tools: 各版本SDK。根据API Level划分的SDK版本
|----tools : 各版本SDK通用工具。比如adb、和aapt、aidl、dx等文件
|----temp : 临时夹,一般在SDK更新安装时用到.

另外关于SDK说的不一定适合ubuntu系统需不需下载,普及概念(Android sdk manager中package都要安装么?):

不需要全部安装,根据自己的需要来选择安装。

1. 首先Tools选项里的需要全部安装,不同版本的安装其中任意一个就行。
2. Extras栏目中必需安装的是 Google USB driver。其它可选。
3. 剩下的各个安卓版本的包中,SDK platform,如果需要该版本的编译环境需要下载,Doucmention开头的是文档,编程时的文档提示需要。Source开头的是源码,需要查看android源码,需要下载。image结尾的是系统镜像,如果需要该版本的模拟器 需要下载该项。

把上面NDK的文件夹,转移到目前的vision/tensorflow下面

一直继续往下运行,直至“下载 tensorflow 的 model”

下载 tensorflow 的 model:

实际上model就是由上面三个部分组成:

(1)imagenet_comp_graph_label_strings.txt:存的是对应的类别真实名字
(2)
(3)graph...

修改 WORKSPACE

你可以用高版本的build-tool去构建一个低版本的sdk工程,例如build-tool的版本为20,去构建一个sdk版本为18的,我这边分别改成21,24.0.3

echo@echo-PC:~/vision/tensorflow$ bazel build //tensorflow/examples/android:tensorflow_demo

出错:说是缺少C++ 的什么编译工具,我就重新把www.jianshu.com/p/e38679c9b2c5博客中的再运行一遍,NDK之前下载的也是一样的呀!!

NDK的api_level=14

最后改成了这样:24,24.0.3

但是就是会出错!!!!why????先弃掉www.jianshu.com/p/e38679c9b2c5

死不放弃啊~~,后面我还是从下面的restart回到这边,选择运行:

tools/android update sdk

这样我后面build tools原来是默认只下了最高的26.0.0,后面我自己又各个版本的API都下载了一个,比如说有几个24.0.0,24.0.1之类。然后用24,24.0.3,14的配置运行两遍bazel build //tensorflow/examples/android:tensorflow_demo 即可生成.apk(一开始可能出现conflict)

%—————————-------------restart----------------------------------------------------www.92to.com/bangong/2017/03-14/18725034.html

大多数参考文章说,Tensorflow在Android上的应用只能在Linux系统编译,事实上不是,构建工具bazel 现在支持Windows、Mac、Linux三个平台,windows上没有尝试过,但应该也可以,跟着本文步骤,可以在各个平台实现。

1、搭建环境

(1)由于后面安装

JNI:JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)

%————————————------END--------------------------------------------

分析:

     看博客

继续:

www.oreilly.com/learning/tensorflow-on-android,貌似可以试着如何去改代码,生成自己的apk

ADB的全称为Android Debug Bridge,通过ADB我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具

上面都是按照人家的教程来的,如何去生成自己的APK。得继续做几个:

github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android/(对应的中文博客:blog.csdn.net/masa_fish/article/details/54097796)重新按照这个再做一遍

见:/home/echo/vision/tensorflow

A device running Android 5.0 (API 21) or higher is required to run the demo due to the use of the camera2 API, although the native libraries themselves can run on API >= 14 devices:就是说NDK本地库的实现,只需要Android 14及以上即可,SDK的API-level是说需要21及以上。

TF Classify:用的是GoogleNet
TF Detect:用的是 DeepMultiBox

好像目前全部支持bazel(tensorflow的基础系统构建工具),但是部分支持gradle(Android Studio使用Gradle构建项目), cmake, make, and Android Studio.

上面说是目前windows上面还不支持bazel,但是也不知道他说的当时是什么时候
NDK建议是12b;
SDK: Build tools API >= 23 is required to build the TF Android demo (though it will run on API >= 21 devices).

Edit WORKSPACE,且只改这边,其他两个部分貌似使用bazel编译的时候用不到的,无所谓

Install Model Files (optional)

The TensorFlow GraphDefs that contain the model definitions and weights are not packaged in the repo because of their size. They are downloaded automatically and packaged with the APK by Bazel via a new_http_archive defined in WORKSPACE during the build process, and by Gradle via download-models.gradle.

Optional: If you wish to place the models in your assets manually, remove all of the model_files entries from the assets list in tensorflow_demo found in the [BUILD](BUILD) file. Then download and extract the archives yourself to the assets directory in the source tree:

全部按照上面网址来一遍,还是会经常报错什么build-tools里面缺点什么。应该是build-tools的问题!,目前还只是设置为24,24.0.3,14比较好,24和25.0.3也行,23和24.0.3也行,我估计还是自动的更新SDK不行,卸载,重新下26.0.0,还是会出错,估计就是26是新的,没有完整

也可以使用android studio与bazel结合起来来做,不过得注意改build.gradle中的bazel路径blog.csdn.net/masa_fish/article/details/54585537

接下来是用IDE(android)去结合tensorflow去做实验
安装android atudio,2.3.1 ,2.4的Preview都是预览版本,blog.csdn.net/q1302182594/article/details/52980143

只是下载的版本不一样,安装...

ubuntu的PATH的作用就是查找文件,以及命令,比如我设置了studio.sh文件的路径在PATH ,之后可以无论在哪个路径下直接输入“studio.sh”即可运行,之前MATLAB也是。

新建项目的时候,老是在下载gradle,后面观察我需要的版本,下载移至下面这个文件夹即可

services.gradle.org/distributions/gradle-3.3-all.zip

mv ~/gradle-3.3-all.zip .gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9

SDK,NDK配置

完成!!!

接下来继续:

关于模拟器镜像的问题补充:

Intel x86 Atom System Image是支持X86的Android模拟器,ARM EABI v7aSystem Image是模拟ARM体系,创建模拟器时模拟的CPU不同,ARM运行速度较慢,所以Intel推出了支持x86的Android模拟器,这将大大提高启动速度和程序的运行速度,允许Android模拟器以原始速度(真机运行速度)运行在使用Intel x86处理器的电脑中。

我下载的是 Intel x86 Atom_64

创建模拟器:

推荐阅读更多精彩内容