返回介绍

Android 示例应用

发布于 2025-01-22 23:08:16 字数 4692 浏览 0 评论 0 收藏 0

该 TensorFLow Lite 示例可以在 GitHub 上被找到。 这是一个使用量子化的 MobileNet 模型或是浮点 Inception-v3 模型对图片进行持续分类的相机应用。示例的最低运行要求是 Android 5.0(API 21)。

在示例中,应用会使用 TensorFlow Lite Java API 来预测。应用会为每一帧都进行实时分类,并将可能性最高的类别和检测对象的时间一同显示出来。

有三种方式获取示例应用:

  • 下载 预编译 APK
  • 使用 Android Studio 编译应用。
  • 下载 TensorFlow Lite 和这个示例应用的源码,然后用
    bazel 编译。

下载预编译版本

尝试这个示例最简单的方法是下载 预编译 APK

安装完 APK 后,双击应用图标启动程序。当程序第一次运行时,会请求运行时获取设备摄像头的权限。程序会打开设备的后摄像头,并识别视野内的物体。在图像的底部(如果是全景模式则是图像的左边)会展示可能性最高的三个物体和其可能的分类。

在 Android Studio 中用 JCenter 源的 TensorFlow Lite AAR 编译

使用 Android Studio 来尝试修改代码并编译:

  • 安装最新版本的 Android Studio
  • 确保你的 Android SDK 版本高于 26 且 NDK 版本高于 14(在 Android Studio 设置里面)。
  • tensorflow/contrib/lite/java/demo 目录作为一个新的 Android Studio 项目导入。
  • 安装需要的 Gradle 插件。

想要获取一个模型,你可以:

  • 下载量子化的 Mobilenet TensorFlow Lite 模型 ,解压并将 mobilenet_quant_v1_224.tflite 拷贝到资源目录: tensorflow/contrib/lite/java/demo/app/src/main/assets/ 下。
  • 或者,下载浮点 Inception-v3 模型 ,解压并将 inceptionv3_non_slim_2015.tflite 拷贝到资源目录下。修改 Camera2BasicFragment.java 中的分类器:

    把: classifier = new ImageClassifierQuantizedMobileNet(getActivity());

    改成: classifier = new ImageClassifierFloatInception(getActivity());

现在你可以编译并运行程序了。

使用源码编译 TensorFlow Lite 和示例应用

克隆 TensorFlow 仓库

git clone https://github.com/tensorflow/tensorflow

安装 Bazel

如果你的电脑上没有安装 bazel ,查看 安装 Bazel

注意:Bazel 现在并不支持在 Windows 上进行 Android 编译。Windows 用户可以下载 预编译版本

安装 Android NDK 和 SDK

编译 TensorFlow Lite 的原生(C/C++)代码需要用到 Android NDK。当前推荐版本为 14b,可以在 NDK 存档
上找到。

Android SDK 和编译工具可以 单独下载 或者配合 Android Studio 使用。编译 TensorFlow Lite Android 示例应用推荐使用 API >= 23 的编译工具(但是在 API >= 21 的版本上均可运行)。

在 TensorFlow 仓库的根目录下,更新 WORKSPACE 文件中的 api_level 以及 SDK 和 NDK 的位置。如果你是通过 Android Studio 安装的,可以在 SDK 管理器中查看 SDK 路径。默认的 NDK 路径为: {SDK path}/ndk-bundle 。如下所示:

android_sdk_repository (
    name = "androidsdk",
    api_level = 23,
    build_tools_version = "23.0.2",
    path = "/home/xxxx/android-sdk-linux/",
)

android_ndk_repository(
    name = "androidndk",
    path = "/home/xxxx/android-ndk-r10e/",
    api_level = 19,
)

TF Lite Android 应用页面 中可以找到更多信息。

编译源码

运行 bazel 来编译源码:

bazel build --cxxopt=--std=c++11 //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo

警告:因为一个已知的 bazel 的 bug,我们只能在 Python 2 环境下编译 Android 示例应用。

关于示例

示例应用会缩放每一帧相机获取的图像(224 宽 224 高)来匹配量子化的 MobileNets 模型(Inception-v3 是 299 299)。缩放后的图像被逐行放进 缓冲区 。它的大小是 1 224 224 3 字节,其中 1 代表该批次中图像的数量。224 224(299 * 299)是图像的宽和高。3 字节代表一个像素有 3 种颜色。

示例中使用了单进单出的 TensorFlow Lite Java inference API。它输出一个二维数组,第一个维度表示类别索引,第二个维度表示分类的置信度。 两种模型都有 1001 种不同的类别,应用将所有目录的可能性排序,并显示可能性最高的三种。模型文件必须被下载下来并打包到应用的资源目录。

如果您发现本页面存在错误或可以改进,请 点击此处 帮助我们改进。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文