介绍

本教程将在Android设备上使用TensorFlow Lite运行图像识别模型,具体包括:

  • 使用TensorFlow Lite Model Maker训练自定义的图像分类器
  • 利用Android Studio导入训练后的模型,并结合CameraX使用
  • 利用手机GPU加速模型运行

最终的应用将呈现如下的界面:

预备工作

安装Android Studio 4.1以上版本

下载初始代码

创建工作目录,使用

git clone https://github.com/hoitab/TFLClassify.git

拷贝代码;或者直接访问github链接下载代码的ZIP包,并解压缩到工作目录。

运行初始代码

  1. 打开Android Studio,选择“Open an Existing Project”
  2. 选择TFLClassify/build.gradle生成整个项目。项目包含两个module:finish 和 start,finish模块是已经完成的项目,start则是本项目实践的模块。
  3. 第一次编译项目时,弹出“Gradle Sync”,将下载相应的gradle wrapper 。
  4. 手机通过USB接口连接开发平台,并设置手机开发者选项允许调试。
  5. 选择真实物理机(而不是模拟器)运行start模块
  6. 允许应用获取手机摄像头的权限,得到下述效果图,界面利用随机数表示虚拟的识别结果。

向应用中添加TensorFlow Lite

  1. 选择"start"模块
  2. 右键“start”模块,或者选择File,然后New>Other>TensorFlow Lite Model
  3. 选择已经下载的自定义的训练模型。本教程模型训练任务以后完成,这里选择finish模块中ml文件下的FlowerModel.tflite。

    点击“Finish”完成模型导入,系统将自动下载模型的依赖包并将依赖项添加至模块的build.gradle文件。
  4. 最终TensorFlow Lite模型被成功导入,并生成摘要信息

检查代码中的TODO项

本项目初始代码中包括了若干的TODO项,以导航项目中未完成之处。为了方便起见,首先查看TODO列表视图,View>Tool Windows>TODO

默认情况下了列出项目所有的TODO项,进一步按照模块分组(Group By)

添加代码重新运行APP

  1. 定位“start”模块MainActivity.kt文件的TODO 1,添加初始化训练模型的代码
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :ImageAnalysis.Analyzer {...// TODO 1: Add class variable TensorFlow Lite Modelprivate val flowerModel = FlowerModel.newInstance(ctx)...
}
  1. 在CameraX的analyze方法内部,需要将摄像头的输入ImageProxy转化为Bitmap对象,并进一步转化为TensorImage 对象
override fun analyze(imageProxy: ImageProxy) {...// TODO 2: Convert Image to Bitmap then to TensorImageval tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))...
}
  1. 对图像进行处理并生成结果,主要包含下述操作:
  • 按照属性score对识别结果按照概率从高到低排序
  • 列出最高k种可能的结果,k的结果由常量MAX_RESULT_DISPLAY定义
override fun analyze(imageProxy: ImageProxy) {...// TODO 3: Process the image using the trained model, sort and pick out the top resultsval outputs = flowerModel.process(tfImage).probabilityAsCategoryList.apply {sortByDescending { it.score } // Sort with highest confidence first}.take(MAX_RESULT_DISPLAY) // take the top results...
}
  1. 将识别的结果加入数据对象Recognition 中,包含labelscore两个元素。后续将用于RecyclerView的数据显示
override fun analyze(imageProxy: ImageProxy) {...// TODO 4: Converting the top probability items into a list of recognitionsfor (output in outputs) {items.add(Recognition(output.label, output.score))}...
}
  1. 将原先用于虚拟显示识别结果的代码注释掉或者删除
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
  1. 以物理设备重新运行start模块
  2. 最终运行效果

基于TensorFlow Lite实现的Android花卉识别应用相关推荐

  1. 基于TensorFlow实现的CNN神经网络 花卉识别系统Demo

    基于TensorFlow实现的CNN神经网络 花卉识别系统Demo Demo展示 登录与注册 主页面 模型训练 识别 神经网络 训练 Demo下载 Demo展示 登录与注册 主页面 模型训练 识别 神 ...

  2. 毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

    文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...

  3. 基于TensorFlow的CNN卷积网络模型花卉分类GUI版(2)

    一.项目描述 10类花的图片1100张,按{牡丹,月季,百合,菊花,荷花,紫荆花,梅花,-}标注,其中1000张作为训练样本,100张作为测试样本,设计一个CNN卷积神经网络花卉分类器进行花卉的分类, ...

  4. TF之LiR:基于tensorflow实现手写数字图片识别准确率

    TF之LiR:基于tensorflow实现手写数字图片识别准确率 目录 输出结果 代码设计 输出结果 Extracting MNIST_data\train-images-idx3-ubyte.gz ...

  5. 基于TensorFlow Lite的人声识别在端上的实现

    通过TensorFlow Lite,移动终端.IoT设备可以在端上实现声音识别,这可以应用在安防.医疗监护等领域.来自阿里巴巴闲鱼技术互动组仝辉和上叶通过TensorFlow Lite实现了一套完整的 ...

  6. 面向Android的开发基于Tensorflow Lite框架深度学习的应用(一)

    Android配置tensorflow lite 按照官方网站的指导在项目的模块的构建文件build.gradle中配置中增加如下配置: implementation 'org.tensorflow: ...

  7. 使用Tensorflow Lite创建一个Android AI应用

    目录 下一步 在这里,我们使用TensorFlow Lite解释器检查图像并产生其输出. 这是将神经网络与Android上的TensorFlow Lite结合使用的系列文章中的第三篇.在本系列的第2部 ...

  8. 基于TensorFlow的CNN卷积网络模型花卉分类(1)

    一.项目描述 使用TensorFlow进行卷积神经网络实现花卉分类的项目,加载十种花分类,建立模型后进行预测分类图片 环境:win10 +TensorFlow gpu 1.12.0+pycharm 训 ...

  9. mnist手写数字识别python_基于tensorflow的MNIST手写数字识别(二)--入门篇

    一.本文的意义 因为谷歌官方其实已经写了MNIST入门和深入两篇教程了,那我写这些文章又是为什么呢,只是抄袭?那倒并不是,更准确的说应该是笔记吧,然后用更通俗的语言来解释,并且补充更多,官方文章中没有 ...

最新文章

  1. Xamarin XAML语言教程构建ControlTemplate控件模板 (三)
  2. pyhton3 适配器模式编写
  3. 项目管理的五个核心风险区
  4. JavaScript 进阶(二)变量作用域
  5. linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数
  6. linux core 永久生效,【调试】Core Dump是什么?Linux下如何正确永久开启?
  7. 解读革命性容器集群CCE Turbo:计算、网络、调度全方位加速
  8. 计算机软件服务板块,信息技术板块
  9. 小程序文本框为空自动填写_微信免费转码机器人!小程序自动转码!
  10. Python——匿名函数lambda
  11. 博士应该采取什么策略读文献?
  12. Write a program that gives count of common characters presented in an array of strings..(or array of
  13. 传感器连接mysql_获取传感器数据并传入数据库-HTTP/POST/ASP.NET
  14. Hadoop HA集群部署 - A - 详解
  15. Flink(1.12版本)
  16. c++实现二分查找法和求平方根
  17. bing搜索抓取错误警报列表
  18. [ 多智能体网络中的图论方法汉化 ] (一)前言第一章
  19. 1658_MIT 6.828 JOS memmap以及一些存储划分定义的解读-第二部分
  20. 论文阅读:EfficientDet: Scalable and Efficient Object Detection

热门文章

  1. fdtd中时间监视器怎么放_lumerical FDTD的脚本
  2. 智能硬件“双雄”:先跑的VR何故被智能音箱反超?
  3. mysql安装问题:由于找不到msvcp120.dll
  4. 国外破解组织宣布《星际2》破解失败
  5. Java3D安装(idea版)
  6. 《毛毛虫团队》第五次作业:团队项目需求改进与系统设计
  7. Qt实现读Html文件并替换里面的标签内容
  8. MySQL基础语法(详细版)
  9. JASS代码加翻译(第八篇)
  10. windows 10 家庭版打不开gpedit.msc组策略的解决办法