Android 示例应用
该 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论