部署 TensorFlow Lite 图像分类的示例应用在 Android 手机上
本文以 Windows 为例,编译好的 APK 在文末
文档说用 Android Studio 3.2.1,然而该版本太旧了,不支持较新的Gradle版本,本人尝试失败
为了下面的步骤能顺利进行,先创建一个 Android 项目
File
→ New
→ New Project...
Language
选 Java
Minimum SDK
选 API 23: Android 6.0 (Marshmallow)
创建项目后会自动下载 gradle-6.5 等,并自动编译
连接手机并打开USB调试
Run
→ Run 'app'
1. 下载示例应用代码
登录后复制
git clone https://github.com/tensorflow/examples
2. 用 Android Studio 打开项目
examples/lite/examples/image_classification/android
3. 编译项目Build
→ Make Project
build.gradle
文件会让 SDK 自动下载需要的库,可能遇到一些坑,文末有解决方案
这两张图是用 Android Studio 3.2.1 截的,实际上我用 Android Studio 4.1.1 时打开项目便开始自动编译,等它自动装好一堆东西就能 Run 了,不过步骤大致相同的
4. 安装并运行 APP
连接 Android 设备,Run
→ Run 'app'
5. 编译 APK
先在 examples/image_classification/android/app/build/outputs/apk/taskApi/debug
中找找
若没有,Build
→ Build Bundle(s) / APK(s)
→ Build APK(s)
浮点模型:floating point
量化模型:quantized model
1. 报错 Failed to open zip file. Gradle’s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
删除 C:\Users\Administrator\.gradle\wrapper
中的 dists
文件夹,选择正确的 gradle 版本。
注意!Android Studio 版本较低可能不支持高版本的 gradle
2. 报错 Failed to install the following Android SDK packages as some licences have not been accepted.
登录后复制
cd C:\Users\Administrator\AppData\Local\Android\Sdk\tools\bin
sdkmanager.bat --licenses
接着全部填y
3. 无法Run,按钮是灰色的File → Sync Project with Gradle Files
4. 报错 Build model ‘org.jetbrains.plugins.gradle.model.BuildScriptClasspathModel’ for root project ‘TFLite Image Classification Demo App’ 即 java.lang.AbstractMethodError: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier()Lorg/gradle/api/artifacts/ModuleIdentifier;
同1
5. Cause: dl.google.com:443 failed to respond
修改 C:\Users\Administrator\.gradle
的 gradle.properties
为
登录后复制
systemProp.https.nonProxyHosts=localhost
systemProp.http.proxyHost=127.0.0.1
systemProp.http.nonProxyHosts=localhost
systemProp.http.proxyPort=1080
或全部注释掉
5. 无法下载模型,缺少 models/download.gradle 中定义的模型
6. 报错 No version of NDK matched the requested version 21.0.6113669. Versions available locally: 22.1.7171670
点 Install NDK '21.0.6113669' and sync project'
即可
7. 可能有用的信息
登录后复制
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.1"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
gradle-wrapper.properties
登录后复制
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
这个应用编译时间非常久,APK 有 109 MB
需自行训练模型,已上传 百度网盘(0118)
打开 examples/gesture_classification/web/index.html
,拍几张图片,训练 TRAIN
下载模型 DOWNLOAD MODEL,得到 model.json
、model.weights.bin
、labels.txt
三个文件使用 Google Colaboratory → 文件 → 打开笔记本 → GitHub → 填入 https://github.com/tensorflow/examples/blob/master/lite/examples/gesture_classification/ml/tensorflowjs_to_tflite_colab_notebook.ipynb
点搜索图标 → 登陆 Google 账号 → 左侧边栏点文件图标 → 上传三个模型文件 → 在图中两处插入代码并运行 → RESTART RUNTIME(若有)
登录后复制
!pip uninstall keras-nightly
!pip uninstall -y tensorflow
登录后复制
!pip install h5py==2.10.0
逐行运行 → 跳过 !rm -rf *.h5 *.tflite *.json *.bin
和 files.upload()
→ 下载得到 model.tflite
将 labels.txt
和 model.tflite
放进 examples/gesture_classification/android/app/src/main/assets
中
编译并运行
先给 4 个不同分类拍 20 张以上图片,训练,识别
代码
登录后复制
import tensorflow as tf
keras_file = 'model.h5'
model = tf.keras.models.load_model(keras_file)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
命令行
登录后复制
tflite_convert --keras_model_file=model.h5 --output_file=model.tflite
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删