一、说明
https://github.com/tensorflow/examples/tree/master/lite/examples/image_classification/android
1. 编译环境
Android Studio3.2+
2. 构建说明
直接编译有可能会 异常,在项目的build.gralde->dependencies里添加:
implementation group: 'org.tensorflow', name: 'tensorflow-lite', version: '2.0.0'
我同时把其它几个库版本改了一下,供参考:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'com.google.android.material:material:1.0.0' implementation 'org.tensorflow:tensorflow-lite:2.0.0' implementation 'org.tensorflow:tensorflow-lite-gpu:2.0.0' implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly' implementation group: 'org.tensorflow', name: 'tensorflow-lite', version: '2.0.0'}
3. 连接手机,打开USB调试模式,编译安装后即可运行。
运行效果:
风扇识别成功:
风扇识别
鼠标
一个鼠标的识别
2个鼠标:
识别错误
三、demo项目结构
类说明:
1. 入口Activity
ClassifierActivity,调用模型:
private Classifier classifier;# 实例化,返回 ClassifierQuantizedMobileNet 或 ClassifierFloatMobileNetclassifier = Classifier.create(this, model, device, numThreads); final List<Classifier.Recognition> results = classifier.recognizeImage(rgbFrameBitmap, sensorOrientation);
2. Classifier类
虚类,封装TF模型的调用,其中识别的主要程序代码段:
inputImageBuffer = loadImage(bitmap, sensorOrientation);tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());Map<String, Float> labeledProbability = new TensorLabel(labels, probabilityProcessor.process(outputProbabilityBuffer)) .getMapWithFloatValue();return getTopKProbability(labeledProbability);
getTopKProbability用来返回最有可能分类值。
3. ClassifierFloatMobileNet和ClassifierQuantizedMobileNet
用来定义模型位置、标签位置等
四、自己的项目里使用TF2.0讲解
1. dependencies 引用
即上面贴出的代码
2. ABIs设置
谷歌建议大部分开发者删减x86,x86_64,arm32的ABIs:
android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a' } }}
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!