机器学习:如何在安卓上集成TensorFlow
来源:互联网 发布:淘宝客佣金怎么算 编辑:程序博客网 时间:2024/06/06 09:03
原文链接
我们都知道,谷歌有一个开源库叫做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++编译)文件;
我们必须要有一个预训练模型文件和一个用于分类的标签文件。
我们会做以下的目标检测:
编译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)文件。
我们的SDK和NDK路径就跟下面一样:
然后编译生成.so文件:
将armeabi-v7a换成我们所需要的目标架构。
库会被放置在:
编译Java副本:
我们可以在这里找到JAR文件:
现在我们有了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文件夹,单击右键,添加库。
在主目录新建一个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++做预测(机器学习)。
原文链接
我们都知道,谷歌有一个开源库叫做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++编译)文件;
我们必须要有一个预训练模型文件和一个用于分类的标签文件。
我们会做以下的目标检测:
编译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)文件。
我们的SDK和NDK路径就跟下面一样:
然后编译生成.so文件:
将armeabi-v7a换成我们所需要的目标架构。
库会被放置在:
编译Java副本:
我们可以在这里找到JAR文件:
现在我们有了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文件夹,单击右键,添加库。
在主目录新建一个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++做预测(机器学习)。
- 机器学习:如何在安卓上集成TensorFlow
- 机器学习:在Android中集成TensorFlow (深度学习,AI,人工智能,DL,ML,神经网络)
- 机器学习6-tensorflow
- 新手机器学习-tensorflow
- 机器学习-TensorFlow安装
- 【机器学习】TensorFlow 在 iOS 端的用例
- 机器学习:集成学习
- 机器学习-集成学习
- 【机器学习】集成学习
- [机器学习]集成学习
- 机器学习--集成学习
- TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?
- 【机器学习】Tensorflow学习笔记
- 机器学习-集成学习方法
- 机器学习-集成算法
- TensorFlow博客翻译——用TensorFlow在云端进行机器学习
- 【机器学习】Tensorflow基本使用
- tensorflow MNIST机器学习入门
- 快速入门系列--MVC--05行为
- List<Getmsgres.DataBean.ListBean> list如何处理
- 分享系列--面试JAVA架构师--链家网
- subpages 创建后如何关闭或隐藏?
- css Hack是什么
- 机器学习:如何在安卓上集成TensorFlow
- 用Django分页器实现分页跳转
- 用java做一个简单的二维码
- 如何查看exe或dll的依赖库dll
- Nuget命令行快速打包版本与安装简要实用命令
- Nginx+Php-fpm运行原理详解
- Cookie与Session的区别-总结很好的文章
- cas之认证原理
- 快速入门系列--MVC--04模型