[译]Android TensorFlow机器学习示例

原文地址:<https://blog.mindorks.com/android-tensorflow-machine-learning-example- ff0e9b2654cc>

机器学习:将Tensorflow集成到Android中

众所周知,Google已经开放了一个名为TensorFlow的开源软件库,可以在Android中应用于机器学习。

我在网上搜索了很多,但没有找到一个简单的方法或一个简单的例子来构建TensorFlow for Android。自己尝试了很久才构建好。于是我决定写下来,以节省他人时间。

分类器示例来自于Google TensorFlow示例。

本文适用于那些已经熟悉机器学习的人,并且了解如何使用机器学习的构建模型(本例中我将使用 pre-trained 的模型)。很快,我会写一系列关于机器学习的文章,以便每个人都可以学习如何建立机器学习模型。

1.Android的构建过程

几个重要的点,我们应该知道:

  • TensorFlow的核是用c ++编写的。
  • 为了构建android,我们必须使用JNI(Java Native Interface)来调用像LoadModel,getPredictions等c ++函数。
  • 我们将有一个.so(共享对象)文件,它是一个c ++编译的文件和一个jar文件,由一些调用native c ++的JAVA API组成。然后,我们将调用JAVA API来轻松完成任务。
  • 所以,我们需要jar(Java API)和.so(c ++编译)文件。
  • 我们必须具有pre-trained 的模型文件和分类的标签文件。

下图就是我们将要构建的一个物体识别程序。

2.构建jar和.so文件

git clone --recurse-submodules   <https://github.com/tensorflow/tensorflow.git>

注意:--recurse-submodules拉取submodules

这里下载NDK。

下载Android SDK,或者我们可以提供Android Studio SDK的路径。

这里安装Bazel。Bazel是TensorFlow的主要构建系统。

现在,编辑WORKSPACE文件,我们可以在之前克隆的TensorFlow的根目录中找到WORKSPACE文件。

# 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 = "/Users/amitshekhar/Library/Android/sdk/",  
)


android_ndk_repository(  
    name="androidndk",  
    path="/Users/amitshekhar/Downloads/android-ndk-r13/",  
    api_level=14)

然后构建.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 "@bazel_tools的Twitter个人资料" ) // tools / cpp:toolchain \   
   --cpu = armeabi-v7a

替换我们所需的armeabi-v7a。

构建玩之后Tensorflow的库将位于:

bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so

构建Jar文件:

bazel build // tensorflow / contrib / android:android_tensorflow_inference_java

我们可以在以下位置找到JAR文件:

bazel-bin/tensorflow/contrib/android/libandroid_tensorflow_inference_java.jar

现在我们有jar和.so文件。我已经构建了.so文件和jar,可以直接从下面的项目中使用。

我创建了一个完整的运行示例应用程序在这里

3.训练模型

我们需要预训练的模型和标签文件。

在这个例子中,我们将使用Google预训练的模型,该模型在给定图像上进行对象检测。

我们可以从[这里](

解压缩这个zip文件,我们将获得imagenet_comp_graph_label_strings.txt(对象的标签)和tensorflow_inception_graph.pb(预训练的模型)。

现在,在Android Studio中创建一个Android示例项目。

将imagenet_comp_graph_label_strings.txt和tensorflow_inception_graph.pb放入Assets文件夹。

将libandroid_tensorflow_inference_java.jar放在libs文件夹中,右键单击并添加为库。

compile files('libs/libandroid_tensorflow_inference_java.jar')

在主目录中创建jniLibs文件夹,并将libtensorflow_inference.so放在jniLibs / armeabi-v7a /文件夹中。

现在,我们可以通过一个类TensorFlowInferenceInterface,调用TensorFlow Java API。

然后,我们可以输入图像来获得检测的结果。

感兴趣的可以直接克隆项目,构建和运行,试试吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

Github 项目推荐 | 用 PyTorch 0.4 实现的 YoloV3

该库 fork 自 @github/marvis 的 pytorch-yolo2,不过作者没有直接修改或者更新 marvis 的源文件,因为很多文件已经改了文件...

733
来自专栏机器之心

终于!大家心心念念的PyTorch Windows官方支持来了

机器之心整理 参与:机器之心编辑部 五个小时前,PyTorch 官方 GitHub 发布 0.4.0 版本,大家心心念念的 Windows 支持终于来了。 Gi...

2808
来自专栏灯塔大数据

热点 | 年度重大更新:PyTorch0.4官方支持Windows,完全改变API

昨天,PyTorch 官方 GitHub 发布 0.4.0 版本,大家心心念念的 Windows 支持终于到来!加入到深度学习的行列中来吧!

952
来自专栏机器之心

资源 | AMD 开源高性能机器智能库MIOpen,可加速卷积神经网络

选自GitHub 机器之心编译 参与:蒋思源 AMD 最近宣布新的深度学习加速库 MIOpen 1.0 现已发布,该深度学习库支持加速卷积神经网络,并且构建和运...

3288
来自专栏黑白安全

密码字典?神奇的碰撞操作

这样可以提高密码破译软件的密码破译成功率和命中率,缩短密码破译的时间。 如果一个人密码设置没有规律或很复杂,未包含在密码字典里,这个字典就没有用了,甚至会延长密...

522
来自专栏人工智障

visdom的安装及在pytorch下损失函数的可视化应用

更新:新版visdom0.1.7安装方式为:conda install -c srivasv visdom 

940
来自专栏PaddlePaddle

【使用指南】PaddlePaddle安装编译问题汇总和基本使用概念

编写|PaddlePaddle 排版|wangp Part1 安装编译问题汇总 ? 用户在使用PaddlePaddle GPU的Docker镜像的时候,常常出现...

3759
来自专栏黑白安全

密码字典?神奇的碰撞操作

这样可以提高密码破译软件的密码破译成功率和命中率,缩短密码破译的时间。 如果一个人密码设置没有规律或很复杂,未包含在密码字典里,这个字典就没有用了,甚至会延长密...

753
来自专栏AI研习社

Github 项目推荐 | 用于多元时间序列的 Python 模块 —— Seglearn

Seglearn 是一个通过滑动窗口分割的机器学习多元时间序列的 Python 模块。它为特征提取、特征处理和最终估计提供一个集成的 Pipeline。

812
来自专栏ATYUN订阅号

小白也可以操作的手机TensorFlow教程:Android版和iOS版

TensorFlow通常用于训练海量数据,但新兴的智能手机市场也不可忽略。那些不能等待未来和love Machine Learning的人正在通过制造工具来突破...

3326

扫码关注云+社区