手把手教你Android run起基于TensorFlow Lite的手势识别

KeyWord

Android , TensorFlow Lite , TF Lite , gesture_classification , 手势识别 , 图像识别 , 机器学习 , TF js Model 转 TF lite Model

背景

这是一篇迟到了两年的文章,真的是拖延症啊,有拖无欠哈哈.最近看了大佬的视频,又激起三分钟热度的中二之情.同时也看到某些教育机构88块售卖TensorFlowLite Android部署教程,还卖了900+份,要坏一下他们的生意才行哈哈哈.闲话到此,入正题.

由于5G尚未普及(相信这个"普及"任重道远),网络延迟严重,虽然现在已经有很多重型的机器框架可以使用,但是在端设备性能还是不能跟云相比,所以有了这个TensorFlow Lite给端设备使用. TensorFlow Lite 是一个精简库,用于在移动设备和嵌入式设备上部署模型, 跟TensorFlow 还是不太一样的(一个核心开源库,可以帮助您开发和训练机器学习模型)

这篇文章也主要是旨在降低国内小伙伴对于TF Lite的学习门槛,Google的文档写得很详细了,同时也重点说一下如何将TF js Model转成 TF lite Model. 所以这次是使用TensorFlow Lite 官方gesture_classification sample 来展示如何使用Android 来run 起TensorFlow Lite. 为什么不使用image_classification?因为那个project 一build 就起来,不需要写教程哈. 想直接快速感受TF lite的话,建议直接build image_classification 来尝试.

效果

效果.gif

教程

1. 从Github下载gesture_classification project

2. 生成TF Lite Model

因为这个sample是缺少TF Lite Model的,对!官方sample也缺少Model,不过官方也写了一份guide说怎么由gesture_classification TF js project build一个TF js Model出来,然后再转成TF lite 可用的Model.接下来也是基于这份guide step by step 去展示怎么转化.

2.1 下载gesture_classification的web project

2.2 运行gesture_classification的web project

记得使用支持webCamera的设备去运行,例如MacBookPro

如果run起来有遇到困难的话,可以参考我两年前写的这篇手把手教你在windows跑起TensorFlow Js的posenet demo,哈哈所以说是拖延了两年的文章.

2.3 训练gesture_classification TF Js Model

使用Chrome打开../gesture_classification/web/index.html后,添加对应数据集(即拍几张对应的照片),再点击TRAIN按钮.如示例1
最后点击DOWNLOAD MODEL按钮即可得到labels.txt,Model.jsonmodel.weights.bin 三个文件.

示例1

示例2

2.4 TensorFlow.js to TensorFlow Lite Model Conversion

接下来我们要把Model.jsonmodel.weights.bin 两个文件转成Model.tflite, 我们会使用Google出品的colab 网站进行处理. Colab(需翻墙) 是一个Google推出的可以跑 Python脚本和已经搭建Tensorflow环境的服务.

2.4.1 打开Colab(需翻墙)

打开Colab后,打开笔记本,之后选择Github tab后添加这条link https://github.com/tensorflow/examples/blob/master/lite/examples/gesture_classification/ml/tensorflowjs_to_tflite_colab_notebook.ipynb 之后点击??按钮即可.

新建Colab笔记本

新建笔记本成功后界面

2.4.2 配置configuration文件

输入"abc" , 记得包含双引号

配置weights_path_perfix

2.4.3 运行代码脚本

运行代码脚本

2.4.4 上传Tensorflow.js Artifacts

Model.jsonmodel.weights.bin 两个文件上传上去.

上传Tensorflow.js Artifacts

如果遇到 Maximum call stack size exceeded error的话,在左侧打开文件-> 刷新 ->鼠标右键 新建文件夹 ,并命名为abc->将文件model.weights.bin 拖入abc 文件夹内->就可以查看文件上传状态
文件没有上传失败,也需要将将文件model.weights.bin 拖入abc 文件夹内

Maximum call stack size exceeded.

手动上传文件

2.4.5 运行剩余的代码脚本,并下载TF lite Model

当看到如下图一样,出现Downloading "model.tflite"后,即可点击左侧的刷新按钮,即可看到model.tflite , 将文件拖到自己电脑即可.

生成Model.tflite

3. Android Studio build project

3.1 导入model.tflitelabels.txt 导入项目

将2.4.5生成的model.tflite 和 2.3 生成的labels.txt 放到../android/app/src/main/assets" 文件夹内

导入文件

3.2 build project

插入手机,点击Run 按钮即可.

引用/参考

  1. https://colab.research.google.com
  2. https://github.com/tensorflow/examples
  3. Google Colaboratory : Import Data, stack size exceeded?