TensorFlow2学习十八、安卓进行图像分类示例

一、说明

  • 本示例来源于tensorflow官网。
  • 项目连续使用安卓兵团摄像头对所看到的物体进行分类。
  • 项目使用TF Lite Java API来执行推理。该演示应用程序实时地对图像帧分类,显示最可能的分类结果。它允许用户选择浮点或量化模型,选择线程数,并决定运行在CPU、GPU上,或是通过NNAPI运行。

二、代码来源

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项目结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6RkXhtcs-1575613381150)(/uploads/20191206/850c999b5dec24281e42ce41c4a6468c.png)]

  • 关键代码在org.tensorflow.lite.examples.classification.tflite里
  • 模型文件放在assets下

类说明:

1. 入口Activity

ClassifierActivity,调用模型:

private Classifier classifier;
# 实例化,返回 ClassifierQuantizedMobileNet 或 ClassifierFloatMobileNet
classifier = 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'
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值