TensorFlow安装及安卓开发环境配置
一、安装tensorflow
mac自带了python2.7 直接输入python可以查看本机python版本
1、安装pip
sudo easy_install pip
sudo easy_install –upgrade six
2、安装tensorflow
pip install tensorflow
如果报错如:error: could not create '/Library/Python/2.7/site-packages/html5lib': Permission denied
使用:pip install tensorflow –user (系统用户提供权限)
3、测试tensorflow
在桌面保存python文件hello.py,例子如下:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
终端执行命令:python /Users/XXX/Desktop/hello.py
正确输出:Hello, TensorFlow!,即为安装成功
二、编译使用tensorflow c版本动态链接库
1、下载tensorflow源码
git clone https://github.com/tensorflow/tensorflow
2、安装bazel
首先要安装jdk1.8+,使用java –version 查看本机jdk版本,下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
安装bazel方法很多,参见https://docs.bazel.build/versions/master/install-os-x.html
我采用homebrew安装:
/usr/bin/ruby -e "$(curl -fsSL \
https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install bazel
bazel version
brew upgrade bazel
3、配置tensorflow
安装成功后会有bazel和tensorflow两个文件夹
进入tensorflow下:cd tensorflow
输入:./configure 在配置过程中会出现一系列问题,基本都填n,若是在GPU下,则CUDA选择y
4、编译源码,生成so库文件和jar文件(可选)
进入tensorflow/tensorflow文件夹,执行:
bazel build :libtensorflow.so
当然可以直接在网上下载libtensorflow_inference.so和 android_tensorflow_inference_java_jar
三、设置android studio
打开项目时出现上图情况,是由于gradle下载过慢,需要手动去下载离线包,推荐网址:http://services.gradle.org/distributions/
将下载的zip文件放在/Users/用户名/.gradle/wrapper/dists/gradle-4.1-all/随机文件名/
安装所需ndk等工具:
四、将so文件,pb文件等导入android工程
新建文件夹:/app/jniLibs/ 将编译好的so库文件和jar文件放入其中,在build.gradle(Module.app)中添加代码:
将训练好的pb模型放入/app/assets/文件夹
五、TensorFlow分类器简单例子
从demo中提取出
在页面中写:
private static final int INPUT_SIZE = 224; private static final int IMAGE_MEAN = 224; private static final float IMAGE_STD = (float) 1/IMAGE_MEAN; private static final String INPUT_NAME = "input"; private static final String OUTPUT_NAME = "InceptionV4/Logits/Predictions"; private static final String MODEL_FILE = "file:///android_asset/graph_quantized.pb"; private static final String LABEL_FILE = file:///android_asset/kunchong.txt;
初始化:
classifier = TensorFlowImageClassifier.create( getAssets(), MODEL_FILE, LABEL_FILE, INPUT_SIZE, IMAGE_MEAN, IMAGE_STD, INPUT_NAME, OUTPUT_NAME); } catch (final Exception e) { throw new RuntimeException("Error initializing TensorFlow!", e); }
执行分类器,返回结果
final List<Classifier.Recognition> results; results = classifier.recognizeImage(bitmap);