文档章节

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

_夜枫
 _夜枫
发布于 2017/06/14 14:56
字数 1095
阅读 10
收藏 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%
08/01
0
0
机器学习Tensorflow笔记4:iOS通过Core ML使用Tensorflow训练模型

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

ImWiki
05/16
0
0
TensorFlow,从一个 Android Demo 开始

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

孟飞阳
07/17
0
0
业界 | TensorFlow 1.9终于对树莓派张开了怀抱:加入官方支持

  选自TensorFlow博客   作者:Pete Warden   机器之心编译      TensorFlow 1.9 早已发布并在各大平台上运行,如 Linux、苹果、安卓等系统。然而,不论用户们如何努力,在树莓派上...

机器之心
08/03
0
0
第1章 TensorFlow简介

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任...

u013162035
05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
25分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
28分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
32分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
42分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部