文档章节

机器学习:如何在安卓上集成TensorFlow

_夜枫
 _夜枫
发布于 2017/06/14 14:56
字数 1095
阅读 12
收藏 0

原文链接

0?wx_fmt=jpeg

我们都知道,谷歌有一个开源库叫做TensorFlow,可被用在安卓系统中实现机器学习。换言之,TensorFlow是谷歌为机器智能提供的一个开源软件库。

我在网络上搜寻了很久,都没有找到在安卓上搭建TensorFlow的简单的方法或实例。仔细查阅许多资料以后,我终于可以搭建它了。于是,我决定把我搭建的过程写出来,这样其他人就不必再浪费时间了。

这篇文章是写给那些熟悉机器学习并且知道怎样为机器学习搭建模型的人的(在这个示例中我会使用一个预训练模型)。近期,我会写一系列关于机器学习的文章,这样每个人都能够学到如何为机器学习搭建模型。

 

从搭建安卓上的机器学习模型过程讲起

我们需要知道的几个要点:

  • TensorFlow的核心是用C++编写的;

  • 为了在安卓上搭建TensorFlow,我们需要用JNI(Java本地接口)来调用C++函数,比如说loadModel,getPredictions,等等;

  • 我们会用到.so(shared object,即共享对象)文件,它是C++编译文件;还会用到jar文件,它由能够调用本地C++的Java API组成。之后,我们就可以调用Java API轻松地把事情做好;

  • 所以我们需要jar(Java API)和一个.so(C++编译)文件;

  • 我们必须要有一个预训练模型文件和一个用于分类的标签文件。

我们会做以下的目标检测:

0?wx_fmt=jpeg

编译jar和.so文件

注意:--recurse-submodules对于提取子模块(pull submodules)很重要。

在这里(https://developer.android.com/ndk/downloads/older_releases.html#ndk-12b-downloads)下载NDK。

下载安卓SDK,或者,我们也可以从Android Studio SDK提供路径。

安装Bazel(https://bazel.build/versions/master/docs/install.html)。Bazel是TensorFlow的主要编译系统。

现在,编辑工作空间(WORKSPACE),我们可以在早先克隆的TesnsorFlow根路径中找到工作空间(WORKSPACE)文件。

 

0?wx_fmt=jpeg

我们的SDK和NDK路径就跟下面一样:

0?wx_fmt=jpeg

然后编译生成.so文件:

将armeabi-v7a换成我们所需要的目标架构。

库会被放置在:

0?wx_fmt=png

编译Java副本:

0?wx_fmt=jpeg

我们可以在这里找到JAR文件:

0?wx_fmt=jpeg

现在我们有了jar和.so文件。你也可以从下面的工程中直接提取使用我已经建立好的.so文件和jar。

我已经在这里(https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample)创建了一个完整可运行的示例应用。

但是,我们需要预训练模型和标签文件。

在这个例子中,我们会使用Google预训练模型,它实现了在一张给定的照片上做目标检测。

解压缩zip文件,我们就会得到imagenet_comp_graph_label.strings.txt(目标标签)以及tensorflow_inception_graph.pb(预训练模型)。

现在,在Android Studio上创建安卓示例工程吧。

将imagenet_comp_graph_label.strings.txt(目标标签)以及tensorflow_inception_graph.pb放进assets文件夹。

将libandroid_tensorflow_inference_java.jar放进lib文件夹,单击右键,添加库。

0?wx_fmt=png

在主目录新建一个jniLibs文件夹并且将libtensorflow_inference.so放到jniLibs/armeabi-v7a文件夹中。

现在,我们就可以调用TensorFlow Java API了。

TensorFlow Java API通过TensorFlowInferenceInterface类开放了所有需要的方法。

现在,我们可以用模型路径调用TensorFlow Java API并且加载它了。

然后,我们可以输入一张图片来获取预测结果。

如果想要体会完整的流程,克隆这个项目(https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample),搭建并运行它吧。

如果你在搭建这个项目的过程中有任何问题的话,联系我,我会非常乐意帮助你。

Happy Coding:)

 

读者问答

 

Q:我很疑惑要怎么连接到‘so’库?也没有任何一行像’System.loadLibray’的代码?

A:System.loadLibrary已经写在TensorFlow jar中了。

Q:所以这是一个C++应用还是Java应用啊?你用的是什么语言?

A:这是一个用Java语言编写的安卓应用,它通过Java本地接口(JNI: Java Native Interface)调用C++做预测(机器学习)。

 

原文链接

本文转载自:http://click.aliyun.com/m/23225/

共有 人打赏支持
_夜枫
粉丝 10
博文 506
码字总数 0
作品 0
朝阳
后端工程师
私信 提问
如何使用 Android Things 和 TensorFlow 在物联网上应用机器学习

探索如何将 Android Things 与 Tensorflow 集成起来,以及如何应用机器学习到物联网系统上。学习如何在装有 Android Things 的树莓派上使用 Tensorflow 进行图片分类。 这个项目探索了如何将...

24%
2018/08/01
0
0
TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
2018/07/17
0
0
机器学习Tensorflow笔记3:Python训练MNIST模型,在Android上实现评估

通常而言我们会通过Python编写代码训练Tensorflow,但是我们训练的数据需要实际应用起来,本文会介绍如何通过Python训练Tensorflow,训练的结果在Android上应用,当前也可以通过传输数据给服...

ImWiki
2018/05/16
0
0
机器学习Tensorflow笔记4:iOS通过Core ML使用Tensorflow训练模型

Tensorflow是Google推出的人工智能框架,而Core ML是苹果推出的人工智能框架,两者是有很大的区别,其中Tensorflow是包含了训练模型和评估模型,Core ML只支持在设备上评估模型,不能训练模型...

ImWiki
2018/05/16
0
0
TensorFlow Lite 正式发布,谷歌移动端深度学习框架

今年 5 月,谷歌曾在 I/O 大会上宣布即将推出 TensorFlow Lite,现在,谷歌终于发布了新工具的开发者预览版本,这是一款 TensorFlow 用于移动设备和嵌入式设备的轻量级解决方案。 TensorFlow...

达尔文
2017/11/15
3.4K
5

没有更多内容

加载失败,请刷新页面

加载更多

eclipse中项目svn转gitLab全过程

在工作中,我们可能会遇到项目从svn迁移到gitLab;此过程我们需要变化版本管理工具,上传代码。本篇博客记录了使用spring tool suit(sts/eclipse)进行项目迁移的全过程。 步骤: (1)端口之...

em_aaron
33分钟前
0
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
46分钟前
1
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0
看了一下Maven的内容

了解了Maven其实是一个跨IDE的标准构建工具,能推广的原因估计是借了仓库的便利。 另一个作用是可以通过Maven的功能在社区版的IDEA去创建Web项目,下次实践看看

max佩恩
昨天
5
0
day27:expect批量杀进程|

1、linux下当前目录有一个文件ip-pwd.ini,内容如下: [root@localhost_002 shell100]# cat ip-pwd.ini 10.111.11.1,root,xyxyxy10.111.11.2,root,xzxzxz10.111.11.3,root,12345610.......

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部