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

简介: 我们都知道,谷歌有一个开源库叫做TensorFlow,可被用在安卓系统中实现机器学习。换言之,TensorFlow是谷歌为机器智能提供的一个开源软件库。 我在网络上搜寻了很久,都没有找到在安卓上搭建TensorFlow的简单的方法或实例。

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++做预测(机器学习)。


原文发布时间为:2017-04-27

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

相关文章
|
26天前
|
机器学习/深度学习 人工智能 算法
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
36 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
|
1月前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
188 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
24天前
|
机器学习/深度学习 PyTorch TensorFlow
PAI DLC与其他深度学习框架如TensorFlow或PyTorch的异同
PAI DLC与其他深度学习框架如TensorFlow或PyTorch的异同
|
13天前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
|
2月前
|
Java 开发工具 Android开发
Android mk 集成app
Android mk 集成app
33 5
|
1月前
|
文字识别 Android开发 C++
Tesseract OCR集成Android Studio实现OCR识别
Tesseract OCR集成Android Studio实现OCR识别
100 0
|
2月前
|
安全 物联网 Android开发
构建未来:Android与IoT设备的无缝集成
【5月更文挑战第10天】 在数字化时代的浪潮中,智能设备与互联网的结合日益紧密。本文深入探讨了Android系统如何通过其开放性和灵活性成为连接物联网(IoT)设备的关键枢纽。我们将分析Android平台与IoT设备集成的技术途径,探索它们如何共同塑造智能家居、可穿戴技术以及工业自动化等领域的未来。文中不仅阐述了当前的发展状况,还展望了未来的发展趋势,特别是安全性和隐私保护方面的挑战及对策。
33 1
|
2月前
|
机器学习/深度学习 算法 算法框架/工具
Python深度学习基于Tensorflow(5)机器学习基础
Python深度学习基于Tensorflow(5)机器学习基础
35 2
|
2月前
|
机器学习/深度学习 自然语言处理 TensorFlow
构建高效的机器学习模型:基于Python和TensorFlow的实践
构建高效的机器学习模型:基于Python和TensorFlow的实践
49 0
|
2月前
|
安全 Android开发 iOS开发
构建未来:安卓与iOS的无缝集成技术探索
【5月更文挑战第20天】随着智能设备的普及和技术的不断进步,安卓和iOS两大操作系统之间的界限正在逐渐模糊。本文将深入探讨如何通过最新的API、框架和工具实现安卓与iOS应用的无缝集成,以及这一趋势对开发者和用户的潜在影响。我们将从技术可行性、安全性挑战、用户体验优化等角度出发,分析当前的发展状况,并展望未来可能的技术融合路径。