hello,大家好,这个我在简书的第一篇文章,请多多支持。虽然我本行是做app开发的, 但待在人工智能部门,不了解一下人工智能相关的知识,也说不过去(其实是不好装逼,嘿嘿),废话不多说,我们直奔主题;
1. Tensorflow是什么?
借用百度爸爸的话介绍一下,TensorFlow是谷歌开发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
说白了就是机器学习的框架,你可以在其基础上去写算法模型,然后训练,优化得到更好的算法模型,做出更好的产品;
2.使用Tensorflow
要在Android上使用Tensorflow,要准备哪些依赖库呢?下面我来分享下自己的流程
1.TensorFlow 的核心是使用C++写的,所以需要先下载Android ndk;
2. 获取tensorflow的源码:
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git
代码下载后,修改clone 下来的TensorFlow中的WROKSPACE文件:
# 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.1",# # Replace with path to Android SDK on your system# path ="",#)##android_ndk_repository(# name="androidndk",# path="",# api_level=14)
修改结果如下(注意设置正确的SDK和NDK路径):
android_sdk_repository( name ="androidsdk", api_level =23, build_tools_version ="25.0.1", # Replace with path to Android SDK on your system path ="D:\Users\linhh\AppData\Local\Android\Sdk",)android_ndk_repository( name="androidndk", path="D:\Users\linhh\AppData\Local\Android\Sdk\ndk-bundle", api_level=14)
3.下载并安装Bazel:,Bazel是TensorFlow主要的构建系统。为后面编译so和jar包做准备。我是使用choco install bazel去安装的,choco没安装的同胞可以参考下面的文章参考地址;
4.安装好Bazel后,可以开干了
首先编译 so文件:
bazel build -c opt//tensorflow/contrib/android:libtensorflow_inference.so \--crosstool_top=//external:android/crosstool \--host_crosstool_top=[@bazel_tools](http://twitter.com/bazel_tools)//tools/cpp:toolchain \--cpu=armeabi-v7a
编译后文件位置:
bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so
然后编译jar文件:
bazel build//tensorflow/contrib/android:android_tensorflow_inference_java
编译后文件位置:
bazel-bin/tensorflow/contrib/android/libandroid_tensorflow_inference_java.jar
这样Android工程可以使用compile files('libs/libandroid_tensorflow_inference_java.jar')依赖,然后再jniLibs文件夹下创建armeabi-v7a目录把so文件丢进去;
这样就轻松把tensorflow整合到Android工程里面了,下面来看下它如何发挥作用。
3.模型的使用
算法模型可以根据自己兴趣去找,我找的是一个入门级别的模型,这是一个识别图片中数字的经典问题,我们只需要把(mnist_model_graph.pb,graph_label_strings.txt)这两个文件放到工程的assets目录下,然后就可以利用TensorFlowImageClassifier去使用了:
private static final intINPUT_SIZE=28;
private static finalStringINPUT_NAME="input";
private static finalStringOUTPUT_NAME="output";
private static finalStringMODEL_FILE="file:///android_asset/mnist_model_graph.pb";
private static finalStringLABEL_FILE=
"file:///android_asset/graph_label_strings.txt";
classifier= TensorFlowImageClassifier.create(
getAssets(),
MODEL_FILE,
LABEL_FILE,
INPUT_SIZE,
INPUT_NAME,
OUTPUT_NAME);
4.总结
总体来说安卓上的应用还是比较简单,算法模型还是核心,下次还是去了解tensorflow的基本应用再鲁。