[译]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 条评论
登录 后参与评论

相关文章

来自专栏WOLFRAM

大家都记得去年Wolfram举办的一行代码比赛吗???

1473
来自专栏企鹅号快讯

Bootstrap项目实训干货:设计带修改和删除的图书表格

# 一、实验目标 写一个带修改和删除的表格。页面如下: ? # 二、环境依赖 采用bootstrap框架来实现,依赖的版本为3.3.7。 我们可以直接引用cdn...

1945
来自专栏简书专栏

目标检测第1步-运行tensorflow官方示例

在进行本文操作之前,需要先安装好tensorflow的gpu版本。 本文作者的环境:python3.6、Windows10、tensorflow_gpu1.1...

3182
来自专栏charles的技术博客

MySQL 5.7 关闭validate_password密码策略

validate_password_dictionary_file:密码策略文件,策略为STRONG才需要

2366
来自专栏Python小屋

Python极简代码压缩图像十到百倍

1)Python标准库zlib提供了字节串压缩与解压缩功能,压缩比取决于原始信息中数据重复度。

1384
来自专栏C/C++基础

Linux命令(10)——split命令

将一个大文件分割成较小的文件,默认每1000行分割成一个小文件。有时需要将文件分割成更小的片段,比如为提高可读性、生成日志等。

1092
来自专栏社区的朋友们

对基于 TCP 的网络应用在 socket 非阻塞模式下 send 调用错误原因的深入分析

本文试图从 send 函数以及 TCP 协议两个点进行问题的分析,并复现出错误场景,最后针对导致错误的原因来给出解决方案。

4100
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版3.4节coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

651
来自专栏深度学习思考者

机器学习特征提取 | 自动特征工程featuretools

1、什么是Featuretools? 为了能使框架普适,就像pandas用于数据准备或scikit-learn用于机器学习。 链接:https://www.fe...

3525
来自专栏AI研习社

Github 项目推荐 | TensorFlow 项目模板架构最佳实践

一个简单且设计良好的架构对于任何深度学习项目来讲非常有必要,这里的 Tensorflow 项目模板经过了大量的实践,拥有简单性、良好的文件结构以及 OOP 设计...

4107

扫码关注云+社区