开发拍照识花App,程序员秒变“植物专家”
春暖花开,万物复苏,正是踏青好时候。周末,阿珍组织班级里的小朋友去公园踏青,程序员阿强,作为护花使者也一同前往。
阿强本以为,可以肆意在林间草地自由地奔跑,回忆一下逝去的童真时光,没想到却成了小朋友们的“植物识别器”,整个踏青之旅变成大型科普现场。面对大自然,小朋友们满脑子都是“这啥花这啥草”,配以崇拜的小眼神真诚发问,让阿强即使手忙脚乱地偷偷上网搜索,也要给出正确答案。
但其实,植物科普不必这般费力,平时对大自然的了解甚少,也有办法轻松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文件中,用户从华为应用市场安装您的应用后,将自动更新机器学习模型到设备:
<manifest ... <meta-data android:name="com.huawei.hms.ml.DEPENDENCY" android:value= "label"/> ... </manifest>
4、配置混淆脚本
上述步骤具体可参考开发者网站中的开发准备介绍:
5、在AndroidManifest.xml文件里面声明系统权限
为了可以通过相机和相册进行图片的获取,需要在Manifest文件中申请相关的权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
开发步骤
1.创建并配置云端图片分类分析器
创建图片分类分析器类
public class RemoteImageClassificationTransactor extends BaseTransactor<List<MLImageClassification>>
之后在该类中,通过图像分类自定义类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<List<MLImageClassification>> detectInImage(MLFrame image) { return this.detector.asyncAnalyseFrame(image); }
3.获取分类成功后的结果
在RemoteImageClassificationTransactor中重写onSuccess()方法,将识别到的物体名称显示到图片中
@Override protected void onSuccess( Bitmap originalCameraImage, List<MLImageClassification> classifications, FrameMetadata frameMetadata, GraphicOverlay graphicOverlay) { graphicOverlay.clear(); this.handler.sendEmptyMessage(Constant.GET_DATA_SUCCESS); List<String> 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()); } }
>>访问华为开发者联盟官网,了解更多相关内容
>>获取开发指导文档
关注我们,第一时间了解华为移动服务最新技术资讯~
- Web程序员开发App系列 - 申请苹果开发者账号
- Hbuilder开发app实战-识岁02-拍照和选取照片
- 从程序员通宵帮产品开发求婚APP说起,聊聊技术管理的那些事儿
- 带孩子看牙后,程序员爸爸开发儿童看牙辅助APP
- Android Java / Kotlin 程序员开发调试工具。Debug Bottle 的所有功能均建立在 App 的 debug 版本中,不会对 release 版本产生任何影响。Debug Bo
- 程序员开发设计PUTTY软件搭建数据库并运行澳洲幸运5APP公众号环境机器人
- Web程序员开发App系列 - 认识HBuilder
- 女程序员开发软件挂专家号转手获利被捕 | 每日安全资讯
- Android开发之App拍照系统相册展示
- Web程序员开发App系列 - 认识HBuilder
- 女程序员开发软件挂专家号转手获利被捕
- 从设计到开发,硅谷技术专家教你做“声控”APP
- 对于想创业,想开发APP的程序员来说,这是一篇价值百万的文章!
- Web程序员开发App系列 - 调试Android和IOS手机代码(补图)
- 程序员必看:如何降低APP软件开发的成本?
- 24岁程序员, 一个人撑起App开发项目
- iOS开发:从新手到专家的一些建议,思考你是否想要成为程序员
- Ionic开发App系列--手机拍照功能
- 写在这个app开发的后时代--程序员该怎么增值
- 【史上最全App开发知识分享】如何从零开始成为app开发专家?