原文地址:<https://blog.mindorks.com/android-tensorflow-machine-learning-example- ff0e9b2654cc>
众所周知,Google已经开放了一个名为TensorFlow的开源软件库,可以在Android中应用于机器学习。
我在网上搜索了很多,但没有找到一个简单的方法或一个简单的例子来构建TensorFlow for Android。自己尝试了很久才构建好。于是我决定写下来,以节省他人时间。
分类器示例来自于Google TensorFlow示例。
本文适用于那些已经熟悉机器学习的人,并且了解如何使用机器学习的构建模型(本例中我将使用 pre-trained 的模型)。很快,我会写一系列关于机器学习的文章,以便每个人都可以学习如何建立机器学习模型。
几个重要的点,我们应该知道:
下图就是我们将要构建的一个物体识别程序。
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,可以直接从下面的项目中使用。
我创建了一个完整的运行示例应用程序在这里。
我们需要预训练的模型和标签文件。
在这个例子中,我们将使用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。
然后,我们可以输入图像来获得检测的结果。
感兴趣的可以直接克隆项目,构建和运行,试试吧。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有