APP下载

基于Android的葡萄病虫害图像识别的研究与实现

2020-08-16黄彬苏家仪杨洋

现代经济信息 2020年5期
关键词:图像识别

黄彬 苏家仪 杨洋

摘要:目前葡萄病虫害的传统诊断均为人工目测,而且对农技人员的经验要求较高,如果发现病虫害不能及时解决,将会导致病虫害有进一步扩散的风险。现如今移动智能手机的普及与配置性能的提升,让人们可以便捷地获得更多的技术支持,外加人工智能的兴起,深度学习已广泛应用于很多行业,通过更精准的特征提取,为人们提供决策依据。本文通过介绍Android系统和YOLO的相关技术知识,然后论述病虫害图像识别的流程,最后应用到Android平台的工程项目中,系统稳定运行,并达到预期效果。

关键词:葡萄病虫害;图像识别;Android

病虫害的防治管理是农业生产的重要环节,但传统诊断农作物病虫害的方法是人工目测,这存在两个问题:一方面,大田或温室发生的病虫害种类众多,农民并不能保证根据经验做出的判断完全正确,另一方面,农业技术人员相当匮乏,由于没有专业人士及时到现场诊断,可能会使病情延误或加重。

近年来,人工智能技术已经取得了长足的进步,图像识别、自动推理、数据挖掘、机器学习等都在蓬勃发展。人工智能可以在智能感知的前提下,结合大数据技术自主学习,帮助人们做出决策、代替重复性工作,这意味着人工智能可以代替农业专家自动诊断识别病虫害,并做出防治决策。比如郭文川等[1]利用图像技术根据参照物和被测植物叶片面积得到植物叶片的面积的基于基于Android手机的植物叶片面积快速无损测量系统;邹秋霞等[2]利用OpenCV(Open Source Comput- er Vision Library) 中的图像处理技术在Android手机上实现了对植物叶片进行分类的系统;夏永泉等[3]在Android手机上运用一种最大类间差法和Canny算子对植物叶片图像进行病虫害检查。

本文以葡萄三种常见病害(葡萄白粉病、葡萄灰霉病、葡萄褐斑病)为研究对象,利用Android手机对葡萄表面病虫害图像进行采集、裁剪,并通过Tensorflow加载YOLO[4]模型进行病虫害识别,并基于Android手机客户端研发了葡萄病害图像识别系统,实现了葡萄病虫害图像的及时诊断并给出防治措施。

一、系统总体设计

(一)系统可行性分析

1.条件可行性分析

本系统需要一台传统 PC 用来编写、编译和调试安卓应用程序代码。在该 PC 機器上,需要安装JDK、Android Studio、Android SDK等开发软件,这些软件都能够在各自的官网上免费下载。同时也需要在一台带有摄像头的安卓智能移动手机来运行该应用软件,这也很容易获得。因此,从软件开发条件的可行性上来看,本系统在硬件和软件条件上都是可行的。

2.技术可行性分析

安卓应用程序的主要开发语言是Java,而Java是简单、面向对象、可移植、高性能、多线程和静态的语言。在每一个版本的 Android SDK中,Google 公司官方都提供了若干示例,初学者都可以通过这些示例源码快速掌握安卓应用程序的开发。本文也调用了Tensorflow进行神经网络模型的加载和图像识别,此外Tensorflow可通过Android Studio的Gradle添加依赖,就能调用相关的类库,因此,本研究课题在技术上也是可行的。而YOLO先以开源,可下载源码进行配置训练。

(二)系统的开发环境

本课题主要是在 Android 手机上进行葡萄病虫害图像识别,所以首先需要对 Android 应用程序的开发环境进行搭建。本系统当前的开发环境和软件资源如下:系统环境为 MacOS 10.13.6 ,JDK 为 JDK1.8 ,SDK 为 Android SDK r24,NDK 为 Android NDK,开发软件为 Android Studio 3.6,用到的第三方库有 Tensorflow。

(三)系统设计

1.系统的整体结构

Android手机客户端葡萄病虫害图像识别系统功能共分为三个主要部分:图像采集、病虫害诊断以及病虫害防治措施。

2.系统识别工作流程

启动系统,进入主页面,点击图像采集后可选择“系统相册”或“手机拍照”的方式进行病虫害图像的获取。由于安卓6.0后,系统权限已调整为动态获取,所以这两个功能均需用户允许方能使用。图像采集成功后,用户可以通过“图像裁剪”来去除多余的识别内容,裁剪成功后,会执行Tensorflow加载的神经网络模型识别病虫害。并对四种病虫害的准确率取最高值,最后显示准确率最高的病虫害的名称和防止措施,如果不属于这三种病虫害,则显示识别失败,并提示用户是否继续识别。

二、系统功能实现

(一)YOLO 总体设计

1.YOLO 概述

YOLO是一个端到端的目标检测算法,不需要预先提取region proposal(RCNN目标检测系列),通过一个网络就可以输出:类别,置信度,坐标位置,检测速度很快,虽然定位的精度相对低些,但其检测快速的特点特别适合移动手机。

2.模型设计

整体来看,YOLO算法采用一个单独的CNN模型实现点对点的目标检测。本系统的模型先将输入的图片切割为416x416的尺寸,然后传入CNN网络,CNN网络将输入的图片分割为13x13的网格,最后每个单元格负责去检测那些中心点落在该格子内的目标,并框定最后识别的对象。其中预测框和实际框的准确度可通过IOU(intersection over union,交并比)设定,其范围是0到1之间,预置为0.6。

3.模型训练

配置好模型的训练集和测试集的参数,并将样本放置各个细分文件夹,设定好识别对象的名称为葡萄白粉病、葡萄褐斑病、葡萄灰霉病,和检测对象类型为3后开始训练,训练结果如表1所示。保留YOLO使用均方差处理损失,训练完成后导出模型并转换成pb文件以供Tensorflow加载。

(二)系统实现

本系统新建工程后,通过AndroidManifest.xml配置Android的启动页为主页面MainActivity,并注册识别页面DetectActivity和病虫害防治防治页面DetailActivity,各个Activity都生成一个xml文件,并通过Activity中的setContentView方法加载各自的xml文件,以达到有效的把表现层和逻辑层分开,降低程序的耦合性,方便开发和维护。

在主页面中,需要加载Tensorflow框架,并通过Tensorflow调用训练好的YOLO模型进行识别,具体实现如下:

classifier = TensorFlowImageClassifier.create(

getAssets(),

MODEL_FILE,

LABEL_FILE,

INPUT_SIZE,

IMAGE_MEAN,

IMAGE_STD,

INPUT_NAME,

OUTPUT_NAME);

将系统拍摄或本地相册获取的图像通过getBitmap的方法转换成相应尺寸的Bitmap以供模型识别:

private static Bitmap getBitmap(Context context, String path, int size) throws IOException {

Bitmap bitmap = null;

InputStream inputStream = null;

inputStream = context.getAssets().open(path);

bitmap = BitmapFactory.decodeStream(inputStream);

inputStream.close();

int width = bitmap.getWidth();

int height = bitmap.getHeight();

float scaleWidth = ((float) size) / width;

float scaleHeight = ((float) size) / height;

Matrix matrix = new Matrix();

matrix.postScale(scaleWidth, scaleHeight);

return Bitmap.createBitmap(bitmap,0,0, width, height, matrix, true);

}

最后通過如下方法进行图像的预测,并根据病虫害的准确率跳转识别页面显示识别详情:

Recognition.List=classifier.recognizeImage(croppedBitmap);

Intent intent = new Intent(MainActivity.this,DetectActivity.class);

startActivity(intent);

三、系统测试

(一)测试环境

本系统最终在装有Android系统的移动智能手机上运行,系统选用设备的硬件配置如表2所示。

(二)测试功能模块

1.系统流程测试

主要测试拍照功能和从相册中选取图片的功能。该模块能够成功打开摄像头对病虫害图像进行拍照,并且能够从系统相册中选取已经拍摄好的图片,并且将拍摄或者选取的图片显示在识别界面上。图像获取成功后,需要对进行识别尺寸的裁剪,以符合模型的识别尺寸。

该页面会将最终的病虫害图像传入神经网络模型,并将识别结果显示在页面,其中包含识别的病虫害名称、病虫害的准确率,用户可点击“防治措施”跳转具体的页面。病虫害防治措施页面会显示相应的病状和具体防治措施,具体操作流程如图1所示。

2.其他病虫害

如图2所示,分别展示了葡萄灰霉病、葡萄褐斑病的识别结果和防治措施。

四、结语

本文提出的基于Android的葡萄病虫害图像识别的识别技术具备葡萄病虫害图像采集、病虫害诊断、病虫害防治措施显示三个功能,加以完善后能投入到实际运用,具有一定的实际意义。其具体优势有如下几点:

(一)将人工智能技术应用到农业中会显著地减少产量损失与劳动力成本,帮助用户做出防治决策。

(二)充分利用了Android手机的携带方便,采用基于Tensorflow框架与YOLO技术,将训练好的葡萄病虫害识别模型加载到手机中。

(三)该系统操作简单、快速、识别效果准确。

然而,在Android移动设备上进行葡萄病虫害图像识别的参考文献有限,深度学习技术在农业生产领域中应用也还处于起步阶段,基于深度学习的葡萄病虫害图像识别系统目前国内外均缺乏研究,对于算法的研究都是基于已有文献,本系统不能适应所有的拍摄环境。利用移动设备拍摄图像时产生的干扰因素不可预测,以致拍摄过程中因为光照会产生个别结果的不准确。因此从整体系统角度来看,仍有几个地方仍需完善:

1.支持的病虫害类型仅限文中3种,扩展更多的病虫害类型有待加强,还有病虫害类型扩展后的防止措施的补充。

2.对复杂背景下拍摄的图像准确度还有待提高,比如拍摄对象出现遮挡,或是颤抖拍照时出现的模糊。

3.本系统只研究和实现了针对Android平台,但市场上仍有相当一部分iOS系统的用户,因此从推广角度来看,兼容iOS系统也是必须的。

参考文献:

[1]郭文川,周超超,韩文霆.基于Android手机的植物叶片面积快速无损测量系统[J].农业机械学报,2014(01):281-286.

[2]邹秋霞,郜鲁涛,盛立冲.基于Android手机和图像特征识别技术的植物叶片分类系统的研究[J].安徽农业科学,2015(11):377-379.

[3]夏永泉,王会敏,曾莎.基于Android的植物叶片图像病害检测[J].郑州轻工业学院学报:自然科学版,2014(29):74.

[4] Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi. You Only Look Once: Unified, Real-Time Object Detection.

猜你喜欢

图像识别
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
图像识别在物联网上的应用
图像识别在水质检测中的应用
浅谈模式识别在图像识别中的应用
基于多组合内容的图像识别机制