手写辨识是最基本入门款,利用第22天canvas手势绘图和参照tensorflow 的codelab,来玩手写辨识。
将 TensorFlow Lite 模型添加到assets文件夹
mnist.tflite
build.gradle(app)
dependencies {
implementation 'org.tensorflow:tensorflow-lite:2.5.0'
}
android {
...
aaptOptions {
noCompress "tflite"
}
...
}
建立和初始化 DigitClassifier (TensorFlow Lite interpreter)
class DigitClassifier(private val context: Context) {
….
private fun initializeInterpreter() {
//载入tensorflow lite 模组
val assetManager = context.assets
val model = loadModelFile(assetManager)
// 初始化 TF Lite 解释器 和 开启神经网路
val options = Interpreter.Options()
options.setUseNNAPI(true)
val interpreter = Interpreter(model, options)
// 模型中读取模型输入格式
val inputShape = interpreter.getInputTensor(0).shape()
inputImageWidth = inputShape[1]
inputImageHeight = inputShape[2]
modelInputSize = FLOAT_TYPE_SIZE * inputImageWidth * inputImageHeight * PIXEL_SIZE
// 完成初始化
this.interpreter = interpreter
isInitialized = true
}
….
}
输入资料给模型预测
private fun classify(bitmap: Bitmap): String {
…
// … 先处理输入的图片
val resizedImage = Bitmap.createScaledBitmap(bitmap, inputImageWidth, inputImageHeight, true)
val byteBuffer = convertBitmapToByteBuffer(resizedImage)
…
val result = Array(1) { FloatArray(OUTPUT_CLASSES_COUNT) }
interpreter?.run(byteBuffer, result)
…
//最後输出文字结果
return getOutputString(result[0])
}
触控手势处划完後放开呼叫 classifyDrawing(extraBitmap)
override fun onTouchEvent(event: MotionEvent): Boolean {
motionTouchEventX = event.x
motionTouchEventY = event.y
when (event.action) {
MotionEvent.ACTION_DOWN -> touchStart()
MotionEvent.ACTION_MOVE -> touchMove()
MotionEvent.ACTION_UP -> classifyDrawing(extraBitmap)
}
return true
}
执行结果:
https://developer.android.com/codelabs/digit-classifier-tflite
我都是睡前写铁人文, 每天都是现场产文:) 所以在写铁人时就察觉一天又要过了 很好现在11:03分我...
转眼间到11月网站也准备要上线了,回想当时很佩服研习生们有坚持住将该有的功能开发出来,另外昨日提到的...
本篇大纲:合并图表绘制关键、图表画面与互动效果、本次使用资料、图表绘制 今天的一天一图表,我们要来...
阵列-一些操作阵列好用的方法 这篇整理一些常用的阵列方法 forEach() forEach() 会...
Chap.I Practical drill 实战演练 以下内容来自这里 Prat1. Create...