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

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

但其实,植物科普不必这般费力,平时对大自然的了解甚少,也有办法轻松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. “GAN之父”:当初为了深度学习买GPU,现在后悔没多挖点比特币
  2. c++ mysql 取出数据,c++从数据库的表中读取数据
  3. 配置环境将win32项目移植到Android
  4. python大括号用法_Python中各种括号的区别、用途及使用方法
  5. 【每日一题】8月7日题目精讲—双栈排序
  6. Python多个版本指定如何指定
  7. 多线程—— Lock(线程锁)
  8. Axure原型图小字体在浏览器显示变大
  9. WPS Excel表格条件格式在哪如何使用以大于500的数字飘红加粗为例
  10. laravel5.4使用Laravel Sms和阿里云短信服务实现短信验证码功能
  11. Long源码与常见问题
  12. [SWPUCTF 2021 新生赛]PseudoProtocols
  13. 京瓷Kyocera TASKalfa 5500i 一体机驱动
  14. 胡忠想|微博微服务架构的Service Mesh实践之路
  15. 输入输出系统--习题
  16. mtk6735编译总结|MTK芯片/MTK手机攻略指令大全
  17. “后 Hadoop 时代”,大数据从业者如何应对新技术趋势带来的挑战?
  18. 二舅也救不好的是测试人员的精神内耗~
  19. Beckfoff控制器与伟肯变频器通过CANopen通讯
  20. tarjan算法 (割点和桥)

热门文章

  1. python抽荣耀水晶_一次抽到5个荣耀水晶?很多人不信,但是有一种办法可以做到...
  2. ParrotSec 中文社区 QQ群认证 Openssl解密
  3. enumerate的用法
  4. 如何在DAppNode中配置Ropsten节点?
  5. 小鱼易连Android开发岗面试经验2020
  6. postman请求头加密_postman认证使用篇(五)
  7. 北师范《计算机导论》在线作业,计算机导论教学指导与习题解答简介,目录书摘...
  8. 再说长恨歌的爱情主题
  9. 榆熙电商:哪些产品可以用来做预售处理?
  10. 笔记本故障:no bootable device