TensorFlow入门 - Android机器学习Demo

相关介绍

Google开源项目TensorFlow-Android Example 中实现了Android 应用中使用TF模型 进行机器学习的功能。

阅读 TensorFlow-Android REDDME 自己尝试基于TensorFlow示例中已有的模型来构建Android的应用。

获取已有的数据模型

可以在我的项目示例的 asstes 中复制,也可以去下载 Google 提供的一个数据模型 inception5h.zip

其中 .pb 后缀的文件是已经训练好的模型,而 .txt 对应的是训练数据包含的所有标签。

这个模型可对 1008 种物品识别分类,具体有哪些类可以查看标签信息,至于每个类别到底训练了多少张图片就不得而知了。

在Android项目中引入TensorFlow

如果你使用的是AndroidStudio,那么恭喜你可以像集成其他第三方库一样,通过Jcenter就可以完成库的依赖;

allprojects{
   repositories{
       jcenter()
  }
}
​
dependencies{
   //使用+号 可以保持最新的版本
   implementation'org.tensorflow:tensorflow-android:+'
}

如果有兴趣可以阅读TensorFlow的JavaAPI TensorFlow Java API

这里我们直接使用了 Google 为我们编译好的 TensorFlow 现成库了,如果你想自行对 TensorFlow 进行 NDK 交叉编译得到库文件也可以。具体交叉编译,看教程 TensorFlow-Android REDDME

图片识别功能的实现

将获取到的数据模型,复制到项目的assets 文件下;

---asstes
---model
---imagenet_comp_graph_label_strings.txt//  对应的是训练数据包含的所有标签
---tensorflow_inception_graph.pb//已经训练好的模型
---LICENSE//开源协议

代码构建

   //权限是必须的
   <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permissionandroid:name="android.permission.CAMERA"/>

直接使用 Google demo 项目中提供的 Classifier.java 和 TensorFlowImageClassifier.java 这两个类来实现;

其中重点的注意的方法是如下两个:

TensorFlowImageClassifier的静态create方法;

/**
    * Initializes a native TensorFlow session for classifying images.
    *
    * @param assetManager The asset manager to be used to load assets.
    * @param modelFilename The filepath of the model GraphDef protocol buffer.
    * @param labelFilename The filepath of label file for classes.
    * @param inputSize The input size. A square image of inputSize x inputSize is assumed.
    * @param imageMean The assumed mean of the image values.
    * @param imageStd The assumed std of the image values.
    * @param inputName The label of the image input node.
    * @param outputName The label of the output node.
    * @throws IOException
    */
publicstaticClassifiercreate(AssetManagerassetManagerStringmodelFilenameStringlabelFilename,intinputSizeintimageMeanfloatimageStdStringinputNameStringoutputName)

该方法需要传入模型相关的参数进行初始化,完成后返回一个 Classifier 实例。

通过 Classifier 对象,我们可以调用其 recognizeImage 方法来识别我们传入的 bitmap 图像数据,该方法会返回图像类别后对物品类别进行推断的标签结果:

/**
* 进行图片识别
*/
publicList<Recognition>recognizeImage(finalBitmapbitmap)

代码下载地址

效果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值