春暖花开,万物复苏,正是踏青好时候。周末,阿珍组织班级里的小朋友去公园踏青,程序员阿强,作为护花使者也一同前往。

阿强本以为,可以肆意在林间草地自由地奔跑,回忆一下逝去的童真时光,没想到却成了小朋友们的“植物识别器”,整个踏青之旅变成大型科普现场。面对大自然,小朋友们满脑子都是“这啥花这啥草”,配以崇拜的小眼神真诚发问,让阿强即使手忙脚乱地偷偷上网搜索,也要给出正确答案。

但其实,植物科普不必这般费力,平时对大自然的了解甚少,也有办法轻松hold住小朋友稀奇古怪的发问。执行力满满的阿强,开发出一款拍照识花App,只需拿起手机拍摄一张完整花朵的照片,即可快速识别花卉种类,在App的协助下,秒变植物专家。

Demo演示

实现原理

拍照识花功能用到了华为机器学习服务的图片分类能力,通过对图片中的实体对象进行分类并添加标注信息帮助定义图片题材和适用场景等。图片分类支持端侧识别和云测识别,端侧识别支持超过400个类别,云测识别支持12000个分类,同时,该服务提供了自定义模型能力,支持用户自定义图片分类模型。

开发准备

1、在华为开发者联盟网站创建应用并配置签名证书

2、配置华为 Maven仓地址,在应用级的“build.gradle”文件中添加编译SDK依赖

dependencies{

// 引入基础SDK

implementation 'com.huawei.hms:ml-computer-vision-classification:2.0.1.300'

// 引入图片分类模型包

implementation 'com.huawei.hms:ml-computer-vision-image-classification-model:2.0.1.300'

}

3、设置自动更新机器学习模型

添加如下语句到AndroidManifest.xml文件中,用户从华为应用市场安装您的应用后,将自动更新机器学习模型到设备:

...

android:name="com.huawei.hms.ml.DEPENDENCY"

android:value= "label"/>

...

4、配置混淆脚本

上述步骤具体可参考开发者网站中的开发准备介绍

5、在AndroidManifest.xml文件里面声明系统权限

为了可以通过相机和相册进行图片的获取,需要在Manifest文件中申请相关的权限:

开发步骤

1.创建并配置云端图片分类分析器

创建图片分类分析器类

public class RemoteImageClassificationTransactor extends BaseTransactor>

之后在该类中,通过图像分类自定义类MLRemoteClassificationAnalyzerSetting创建分析器,并设置对应的参数配置,同时配置Handler

private final MLImageClassificationAnalyzer detector;

private Handler handler;

MLRemoteClassificationAnalyzerSetting options = new MLRemoteClassificationAnalyzerSetting.Factory().setMinAcceptablePossibility(0f).create();

this.detector = MLAnalyzerFactory.getInstance().getRemoteImageClassificationAnalyzer(options);

this.handler = handler;

2.调用asyncAnalyseFrame方法进行图像处理

使用异步处理方式,对传入的MLFrame对象进行分类处理

@Override

protected Task> detectInImage(MLFrame image) {

return this.detector.asyncAnalyseFrame(image);

}

3.获取分类成功后的结果

在RemoteImageClassificationTransactor中重写onSuccess()方法,将识别到的物体名称显示到图片中

@Override

protected void onSuccess(

Bitmap originalCameraImage,

List classifications,

FrameMetadata frameMetadata,

GraphicOverlay graphicOverlay) {

graphicOverlay.clear();

this.handler.sendEmptyMessage(Constant.GET_DATA_SUCCESS);

List classificationList = new ArrayList<>();

for (int i = 0; i < classifications.size(); ++i) {

MLImageClassification classification = classifications.get(i);

if (classification.getName() != null) {

classificationList.add(classification.getName());

}

}

RemoteImageClassificationGraphic remoteImageClassificationGraphic =

new RemoteImageClassificationGraphic(graphicOverlay, this.mContext, classificationList);

graphicOverlay.addGraphic(remoteImageClassificationGraphic);

graphicOverlay.postInvalidate();

}

如果错误的话,进行对应的错误处理和Log显示

@Override

protected void onFailure(Exception e) {

this.handler.sendEmptyMessage(Constant.GET_DATA_FAILED);

Log.e(RemoteImageClassificationTransactor.TAG, "Remote image classification detection failed: " + e.getMessage());

}

4.识别完成释放资源

识别完成后,需要将原有的分析器停止,并释放检测资源,在RemoteImageClassificationTransactor中重写stop()方法

@Override

public void stop() {

super.stop();

try {

this.detector.stop();

} catch (IOException e) {

Log.e(RemoteImageClassificationTransactor.TAG,

"Exception thrown while trying to close remote image classification transactor" + e.getMessage());

}

}

点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~

android手机上图像分类技术的研究,用图片分类技术实现“拍照识花”的原理详解...相关推荐

  1. 用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解

    摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app.其同时解决了开发效率.发版速度以及用户体验三个核心问题.那么WEEX是如何实现的?目前WEE ...

  2. 【胖虎的逆向之路】02——Android整体加壳原理详解实现

    [胖虎的逆向之路](02)--Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录 [胖虎的逆向之路](02)--Android整体加壳原理详解& ...

  3. 【夯实Spring Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  4. 在Android手机上使用腾讯的ncnn实现图像分类

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 前言 在之前笔者有介绍过&l ...

  5. 基于MNN在Android手机上实现图像分类

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:基于MNN在And ...

  6. 在Android手机上使用MACE实现图像分类

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 前言 在之前笔者有介绍过&l ...

  7. android_ android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术)/从酷安市场下载安装包

    android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术-) download app(apk) Releas ...

  8. android recovery分区内刷镜像,Android手机Recovery模式取证方法研究.pdf

    Android手机Recovery模式取证方法研究 2015 年第 9 期 信息通信 2015 (总第 153 期) INFORMATION & COMMUNICATIONS (Sum. No ...

  9. 如何在Android手机上安装两个相同的应用

    想在android手机上安装两个相同的应用,本以为可以安装不同版本的,试了几次,均相互覆盖了,于是,只能设法修改apk所对应的包名(package name). 目的声明:本文只是为了满足DIY的需要 ...

最新文章

  1. 世界不是gameBoy
  2. 2015蓝桥杯省赛---java---A---8(移动距离)
  3. mysql5.5客户端_MySQL 5.5/5.6——概述 MySQL 客户端程序
  4. jQuery .tmpl(), .template()学习
  5. cogs 2620. [HEOI2012]朋友圈
  6. 源码学习-String类
  7. linux yum仓库制作,yum仓库搭建之RPM包制作
  8. vs python opencv配置_OPENCV入门教程二:opencv+VS2015开发环境配置
  9. Kotlin实战【一】Kotlin定义与目的
  10. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
  11. html怎么做出相框的效果,使用html5 svg和css3制作边框运动的动画效果
  12. wireshark:时区
  13. Linux性能分析命令
  14. 概念:蓝筹主板创业板新三板科创板
  15. STM32F4端口复用
  16. 据说大学录取率是90%,我对大米的期许是考上高中
  17. 鸿蒙渊主线任务,《天下3》更新公告(版本2.0.848)
  18. Python3字典合并的几种方法
  19. HTML微博浮动代码,jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
  20. 6个usb口服务器无响应,win7usb接口没反应怎么办_win7usb接口没反应的解决方法

热门文章

  1. 运营怎样做,店铺运营方法介绍
  2. [仿南航app开发日记2]主界面完成
  3. enumerate()使用介绍
  4. oracle数据库表回滚操作
  5. 配置以太坊Ropsten客户端
  6. 产品运营:快手是怎样的的一个快手?
  7. java 积累递归深度_java递归的深度
  8. 学习开发没有捷径,也几乎不存在带路会学的快一些的情况
  9. 这5种动态炫酷图,也是用Python画的
  10. css动画西游记行走