文章目录

  • 简介
  • 安装
  • 初试
  • 步骤
  • 相关概念
  • TODO:代码详解
  • 遇到的坑
  • 所有示例应用
  • 智能问答 BERT Question & Answer
  • 数字识别 Digit Classifier
  • 手势识别 Gesture Classification
  • 图像分类 Image Classification
  • 图像分割 Image Segmentation
  • 个性化模型 Model Personalization
  • 目标检测 Object Detection
  • 姿态估计 Pose Estimation
  • 姿态估计 Posenet
  • 推荐系统 Recommendation
  • 智能回复 Smart Reply
  • 声音分类 Sound Classification
  • 语音控制 Speech Commands
  • 风格迁移 Style Transfer
  • 超分辨率 Super Resolution
  • 文本分类 Text Classification
  • Keras 模型转换为 TensorFlow Lite 模型
  • 参考文献


简介

部署 TensorFlow Lite 图像分类的示例应用在 Android 手机上

本文以 Windows 为例,编译好的 APK 在文末


安装

  • Android Studio 4.1.1,已上传百度网盘(0h7c)
  • Android 设备,启用开发者选项并打开USB调试
    选项 → 关于手机 → 连续点击版本号 → 找到开发者选项 → 打开 USB 调试

文档说用 Android Studio 3.2.1,然而该版本太旧了,不支持较新的Gradle版本,本人尝试失败


初试

为了下面的步骤能顺利进行,先创建一个 Android 项目

FileNewNew Project...

LanguageJava

Minimum SDKAPI 23: Android 6.0 (Marshmallow)

tensorflow docker 映像下载 tensorflow lite apk_python


创建项目后会自动下载 gradle-6.5 等,并自动编译

连接手机并打开USB调试

RunRun 'app'

tensorflow docker 映像下载 tensorflow lite apk_python_02


步骤

1. 下载示例应用代码

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

2. 用 Android Studio 打开项目

examples/lite/examples/image_classification/android

tensorflow docker 映像下载 tensorflow lite apk_tensorflow_03


3. 编译项目BuildMake Project

tensorflow docker 映像下载 tensorflow lite apk_tensorflow_04


build.gradle 文件会让 SDK 自动下载需要的库,可能遇到一些坑,文末有解决方案

tensorflow docker 映像下载 tensorflow lite apk_python_05

这两张图是用 Android Studio 3.2.1 截的,实际上我用 Android Studio 4.1.1 时打开项目便开始自动编译,等它自动装好一堆东西就能 Run 了,不过步骤大致相同的

4. 安装并运行 APP

连接 Android 设备,RunRun 'app'

tensorflow docker 映像下载 tensorflow lite apk_Android_06

5. 编译 APK

先在 examples/image_classification/android/app/build/outputs/apk/taskApi/debug 中找找

若没有,BuildBuild Bundle(s) / APK(s)Build APK(s)

tensorflow docker 映像下载 tensorflow lite apk_python_07


相关概念

浮点模型:floating point

量化模型:quantized model


TODO:代码详解


遇到的坑

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

tensorflow docker 映像下载 tensorflow lite apk_tensorflow_08


3. 无法Run,按钮是灰色的File → Sync Project with Gradle Files

tensorflow docker 映像下载 tensorflow lite apk_tensorflow_09


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\.gradlegradle.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. 可能有用的信息

tensorflow docker 映像下载 tensorflow lite apk_Image_10

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
}

tensorflow docker 映像下载 tensorflow lite apk_android_11


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


所有示例应用


tensorflow docker 映像下载 tensorflow lite apk_tensorflow_12


智能问答 BERT Question & Answer

这个应用编译时间非常久,APK 有 109 MB

tensorflow docker 映像下载 tensorflow lite apk_Image_13


数字识别 Digit Classifier

tensorflow docker 映像下载 tensorflow lite apk_Android_14


手势识别 Gesture Classification

需自行训练模型,已上传百度网盘(0118)

打开 examples/gesture_classification/web/index.html ,拍几张图片,训练 TRAIN

tensorflow docker 映像下载 tensorflow lite apk_android_15


下载模型 DOWNLOAD MODEL,得到 model.jsonmodel.weights.binlabels.txt 三个文件使用 Google Colaboratory → 文件 → 打开笔记本 → GitHub → 填入https://github.com/tensorflow/examples/blob/master/lite/examples/gesture_classification/ml/tensorflowjs_to_tflite_colab_notebook.ipynb

tensorflow docker 映像下载 tensorflow lite apk_android_16


点搜索图标 → 登陆 Google 账号 → 左侧边栏点文件图标 → 上传三个模型文件 → 在图中两处插入代码并运行 → RESTART RUNTIME(若有)

!pip uninstall keras-nightly
!pip uninstall -y tensorflow
!pip install h5py==2.10.0

tensorflow docker 映像下载 tensorflow lite apk_android_17

逐行运行 → 跳过 !rm -rf *.h5 *.tflite *.json *.binfiles.upload() → 下载得到 model.tflite

labels.txtmodel.tflite 放进 examples/gesture_classification/android/app/src/main/assets

编译并运行

tensorflow docker 映像下载 tensorflow lite apk_Android_18


图像分类 Image Classification

tensorflow docker 映像下载 tensorflow lite apk_Android_06


图像分割 Image Segmentation

tensorflow docker 映像下载 tensorflow lite apk_Android_20


个性化模型 Model Personalization

先给 4 个不同分类拍 20 张以上图片,训练,识别

tensorflow docker 映像下载 tensorflow lite apk_Image_21


目标检测 Object Detection

tensorflow docker 映像下载 tensorflow lite apk_Android_22


姿态估计 Pose Estimation

tensorflow docker 映像下载 tensorflow lite apk_android_23


姿态估计 Posenet

tensorflow docker 映像下载 tensorflow lite apk_Image_24


推荐系统 Recommendation

tensorflow docker 映像下载 tensorflow lite apk_android_25


智能回复 Smart Reply

tensorflow docker 映像下载 tensorflow lite apk_android_26


声音分类 Sound Classification

tensorflow docker 映像下载 tensorflow lite apk_tensorflow_27


语音控制 Speech Commands

tensorflow docker 映像下载 tensorflow lite apk_Image_28


风格迁移 Style Transfer

tensorflow docker 映像下载 tensorflow lite apk_Android_29


超分辨率 Super Resolution

tensorflow docker 映像下载 tensorflow lite apk_python_30


文本分类 Text Classification

tensorflow docker 映像下载 tensorflow lite apk_Android_31


Keras 模型转换为 TensorFlow Lite 模型

代码

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


参考文献

  1. Image classification | TensorFlow Lite
  2. TensorFlow Lite image classification Android example application
  3. 示例应用代码详解
  4. Android Gradle plugin release notes
  5. TensorFlow Lite 转换器
  6. Uninitialised Classifier or invalid context
  7. 手把手教你Android run起基于TensorFlow Lite的手势识别
  8. python - Tensorflow issue google colab ; tensorflow._api.v1.compat.v2’ has no attribute internal