前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[译]Android TensorFlow机器学习示例

[译]Android TensorFlow机器学习示例

作者头像
MelonTeam
发布2018-01-04 11:56:29
8440
发布2018-01-04 11:56:29
举报
文章被收录于专栏:MelonTeam专栏MelonTeam专栏

原文地址:<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文件
代码语言:javascript
复制
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文件。

代码语言:javascript
复制
# 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路径:

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
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的库将位于:

代码语言:javascript
复制
bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so

构建Jar文件:

代码语言:javascript
复制
bazel build // tensorflow / contrib / android:android_tensorflow_inference_java

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

代码语言:javascript
复制
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文件夹中,右键单击并添加为库。

代码语言:javascript
复制
compile files('libs/libandroid_tensorflow_inference_java.jar')

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 机器学习:将Tensorflow集成到Android中
  • 1.Android的构建过程
    • 2.构建jar和.so文件
      • 3.训练模型
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档