基于TensorFlow Lite实现的Android花卉识别应用

介绍

本教程将在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 Model
  private val flowerModel = FlowerModel.newInstance(ctx)

  ...
}
  1. 在CameraX的analyze方法内部,需要将摄像头的输入ImageProxy转化为Bitmap对象,并进一步转化为TensorImage 对象
override fun analyze(imageProxy: ImageProxy) {
  ...
  // TODO 2: Convert Image to Bitmap then to TensorImage
  val 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 results
  val 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 recognitions
  for (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. 最终运行效果
  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于TensorFlow Lite在移动端实现人声识别是一种利用机器学习和深度学习的技术,通过训练模型来识别和分析人的声音。TensorFlow Lite是一个针对移动和嵌入式设备的轻量级解决方案,可以在资源受限的环境下运行训练好的模型。 实现人声识别的过程可以分为以下步骤: 1. 数据收集和准备:收集需要识别的人声数据,并进行数据预处理,例如降噪、归一化和特征提取等。 2. 模型训练:使用TensorFlow框架进行模型的训练。可以通过卷积神经网络(CNN)和循环神经网络(RNN)等深度学习模型对特征进行学习和分类。 3. 模型转换:使用TensorFlow Lite将训练好的模型转换成适用于移动设备的.tflite格式。 4. 移动端集成:将转换后的模型集成到移动应用程序中,并利用TensorFlow Lite提供的API进行调用。可以使用Java或者Kotlin编写移动应用程序,并通过引入TensorFlow Lite库进行模型的加载和推断。 5. 人声识别:在移动设备上运行应用程序,通过录制人声并输入到模型中进行推断,从而实现人声的识别和分类。 基于TensorFlow Lite的人声识别在移动端具有较小的模型体积和快速的推断速度,适用于嵌入式设备和资源受限的环境。通过移动端的人声识别,可以实现一系列应用场景,例如语音助手、语音命令和声纹识别等,为用户提供更加智能和便捷的交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值