TensorFlow Lite开发之——Android图像分类识别(4)

一 概述

  • 图像模型介绍
  • Android开发流程
  • 数据识别结果

二 图像模型介绍

2.1 模型位置

2.2 模型描述

  • 本示例使用了4个tensor-flow模型
  • Model:介绍了模型相关信息,及该模型可以识别多少分类+识别物种
  • Tensors:Inputs(识别图像)和Outputs(图像描述)

三 Android开发流程

3.1 将模型放到assets目录下

3.2 添加TensorFlow Lite 依赖

1
2
3
4
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.0'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.9.0'

3.3 定义ImageClassfierHelper识别帮助类

1- 根据模型返回对应名称

1
2
3
4
5
6
7
8
val modelName =
when (currentModel) {
MODEL_MOBILENETV1 -> "mobilenetv1.tflite"
MODEL_EFFICIENTNETV0 -> "efficientnet-lite0.tflite"
MODEL_EFFICIENTNETV1 -> "efficientnet-lite1.tflite"
MODEL_EFFICIENTNETV2 -> "efficientnet-lite2.tflite"
else -> "mobilenetv1.tflite"
}

2-根据modelName创建imageClassifier

1
imageClassifier =ImageClassifier.createFromFileAndOptions(context, modelName, optionsBuilder.build())     

3-解析图像

1
val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))

4-调用ImageClassifier的classify方法

1
val results = imageClassifier?.classify(tensorImage, imageProcessingOptions)

5-ImageClassfierHelper结果回调

1
2
3
4
5
inferenceTime = SystemClock.uptimeMillis() - inferenceTime
imageClassifierListener?.onResults(
results,
inferenceTime
)

3.4 CameraFragment识别界面

1-实现ImageClassfierHelper类(实现类中方法)

1
class CameraFragment : Fragment(), ImageClassifierHelper.ClassifierListener {}

2-识别结果并显示

1
2
3
4
5
6
7
8
9
10
11
12
13
@SuppressLint("NotifyDataSetChanged")
override fun onResults(
results: List<Classifications>?,
inferenceTime: Long
) {
activity?.runOnUiThread {
// Show result on bottom sheet
classificationResultsAdapter.updateResults(results)
classificationResultsAdapter.notifyDataSetChanged()
fragmentCameraBinding.bottomSheetLayout.inferenceTimeVal.text =
String.format("%d ms", inferenceTime)
}
}

四 数据识别结果

识别结果-开关 识别结果-键盘 识别结果-鼠标

五 参考

  • TensorFlow-Android 快速上手