基于Android的甘蔗病虫害识别系统设计
2023-11-05梁东唐伟萍黄欣
梁东 唐伟萍 黄欣
摘 要:为提高对甘蔗病虫害的防治效率,实现对甘蔗病虫害的自动识别与监测,研究设计基于安卓(Android)的甘蔗病虫害识别系统。该系统利用智能移动设备收集了大量的甘蔗病虫害图像数据集,使用计算机视觉技术提取图像中的特征,构建深度学习模型,并训练一个分类模型来识别不同类型的甘蔗病虫害,进行端侧推理并将训练好的模型集成到Android应用中,实现对甘蔗病虫害的快速准确识别。该甘蔗病虫害识别系统在识别准确率和使用性能方面表现良好,可有效地帮助农民识别和处理甘蔗病虫害问题,提高防治效率。
关键词:Android平台;甘蔗害虫;图像处理;深度学习;特征提取
中图分类號:S566.1;S126 文献标志码:A 文章编号:2095-820X(2023)04-0013-06
0 引言
甘蔗作为重要的经济作物之一,同样面临着各种病虫害的侵袭。虫害已对甘蔗的产量和质量造成了严重威胁,可导致严重的减产损失,给农民带来巨大的经济压力。传统的甘蔗病虫害监测和防治主要依赖于人工巡查识别和化学农药喷洒,不仅效率低下,还会对环境造成污染。人工对甘蔗进行病虫害识别是一项费时费力的任务,通常需要专业知识和丰富经验。随着深度学习技术在图像识别领域取得突破性进展,给解决甘蔗病虫害识别问题提供了新的可能性。利用深度学习算法,可通过训练模型来自动识别和分类不同类型的病虫害,从而提高识别的准确性和效率。在智能移动设备市场快速发展的背景下,将甘蔗病虫害识别技术应用于安卓(Android)平台具有重要意义。通过在Android平台上建立甘蔗病虫害识别模型,农民和科技工作者可随时随地使用手机或平板电脑对甘蔗病虫害进行识别,及时采取相应的防治措施,从而提高作物的产量和质量[1]。近年来,图像处理和机器学习技术在农业领域得到了广泛应用,许多研究致力于开发基于图像处理和机器学习的农作物病虫害识别方法。但鲜有研究关注基于Android平台的甘蔗病虫害图像处理方法。基于Android平台的甘蔗病虫害识别研究旨在将深度学习技术与移动设备相结合,开发出具有实时性、便携性和高准确性的甘蔗病虫害识别系统[2],为农业生产提供技术支持,帮助农民更好地管理甘蔗。
1 数据采集及处理
甘蔗的常见病虫害主要有锈病、轮斑病、黑穗病、鞘腐病、赤腐病、凤梨病、螟虫和棉蚜等[3];针对各种病虫害进行特征分析,如甘蔗黑穗病属真菌性病害,其明显特征是蔗茎顶端部生长出一条黑色鞭状物,短者笔直,长者或卷曲或弯曲,无分枝;使用数码相机、平板电脑或智能手机在广西崇左市、南宁市、横州市等地的甘蔗种植区进行病虫害特征图片数据采集,每种病虫害的样本数为500张,采集的部分数据集如图1所示。为了提高识别精度,后续会对图像数据进行预处理,包括图像增强、降噪和图像矫正等。
2 模型构建和训练
2.1 模型构建和训练原理
为了提高模型的准确性和性能,确保模型能准确地识别甘蔗叶片的病虫害情况,甘蔗病虫害识别模型的构建和训练过程主要步骤有:
(1)数据集准备:收集包含甘蔗叶片病虫害图片的数据集,确保图片标注准确。
(2)数据集分割:将数据集划分为训练集、验证集和测试集。一般采用70%的图片作为训练集,10%作为验证集,剩下的20%平均分给测试集A和测试集B[4]。
(3)预训练模型:选择一个合适的预训练模型作为基础网络。在本研究中使用ResNet-152模型。
(4)特征提取:在数据集上对预训练模型进行迁移学习,提取模型学习到的图像底层特征[5]。
(5)模型训练:以提取到的特征作为输入数据源,训练病虫害识别模型。可采用分类器或其他适合的方法进行训练。
(6)模型验证:使用验证集对训练好的模型进行验证,评估模型在未见过的数据上的性能。
(7)识别率评估:使用测试集A和测试集B对训练好的模型进行评估,计算模型的识别率。
2.2 模型构建和训练过程
本研究基于ResNet-152预训练网络构建一个甘蔗叶片病虫害识别模型。使用1份包含近3万张标注甘蔗叶片病虫害照片的图像数据集,该数据集被随机分成4个部分,70%作为训练集,10%作为验证集,余下的20%平均分给测试集A和测试集B。在划分好的数据集上,首先对ResNet-152模型进行预训练,通过预训练模型,提取学习到的图像底层特征,作为后续正式创建模型的初始化参数。随后,使用预训练提取到的参数作为输入数据,在甘蔗叶片病虫害识别任务上训练模型,使用测试集A和测试集B进行验证,计算识别率,完成对甘蔗叶片病虫害的识别任务。模型的整体框架如图2所示。
3 端侧推理
Android Studio软件、JDK(Java development kit)和SDK(Software development kit)是应用系统开发环境的主要组成部分。在PyTorch框架中完成模型的训练过程,之后的优化和部署过程主要在推理框架和Android Studio软件中完成,整个推理流程如图3所示。首先,需要搭建Android开发环境,并在Gradle中添加推理框架接口的依赖库。这样可减少Module的重复编译数量,方便进行调用和访问。然后将训练好的CNN网络模型通过脚本语言转换为适合Android平台使用的模型文件格式。在转换过程中,可能会进行一些操作,如量化和剪枝[6]。最后,在MainActivity.java文件中加载模型,并在CameraActivity.java文件中创建模型的重写调用链接。还需要编写相关的相机设置,以便使用手机的摄像头进行图像识别。同时,在Android开发软件中,按照网络模型训练过程使用的类别文档格式配置农作物病虫害标签,使软件在进行图像识别时能输出正确的病虫害类别[7]。最后,在Android Studio软件上完成Android应用的UI界面设计及其他相关开发和调试工作。用户在允许应用软件调用摄像头或获取内存权限的前提下,可使用该软件调用摄像头或从本地获取图片进行图像识别操作。
4 Android端应用开发
4.1 Android端操作系统与推理框架简介
Android是基于Linux内核的开源移动设备操作系统,由美国谷歌公司开发[8],主要应用于智能手机、平板电脑、智能手表和其他便携式设备上,为移动设备提供了丰富的功能和应用支持。
推理框架(Inference framework)是用于在移动设备或其他嵌入式系统上进行深度学习模型推理的软件工具包,提供了对预训练的深度学习模型进行加载、推理计算和结果输出的功能,使用户能便捷地将深度学习模型部署到移动设备上进行实时推理。
在Android端有几个常见的推理框架可供选择:
(1)TensorFlow Lite:谷歌公司开发的专门用于移动设备和嵌入式设备的轻量级机器学习推理引擎。针对移动设备和嵌入式设备资源有限的特点进行优化,以便高效运行机器学习模型。
(2) PyTorch Mobile:PyTorch Mobile是基于PyTorch框架的移动端推理工具,在移动设备上进行深度学习模型的推断,适用于Android设备。提供了加载、运行和部署PyTorch模型的功能,并支持与Java和C++的集成。
(3)ONNX Runtime for Mobile:ONNX(开放神经网络交换)是一种开放的深度学习模型表示格式,ONNX Runtime是用于在移动设备上进行推理的高性能引擎。支持Android平台,并提供了C++和Java的API接口[9]。
这些推理框架均提供了丰富的功能和工具,可帮助开发者在Android端进行深度学习模型的推理任务;同时提供了模型加载、计算、优化和结果输出等一系列功能,使得开发者能更便捷地使用深度学习模型来构建实际应用。
4.2 模型集成
将训练好的模型集成到Android应用中,实现实时的甘蔗病虫害图像识别功能[10],主要有以下步骤:
(1)将训练好的模型保存为TensorFlow Lite(TFLite)格式。可使用TensorFlow Lite工具将训练好的模型转换为.tflite格式,或使用Android Studio中的TensorFlow Lite插件进行转换。
(2)在Android应用中添加TFLite库和相关依赖项[11]。在Android Studio的构建文件(build.gradle)中添加以下依赖项:
dependencies {
implementation ‘org.tensorflow:tensorflow-lite:2.3.0
implementation ‘org.tensorflow:tensorflow-lite-support:0.1.0
}
```
(3) 在Android应用中加载.tflite模型。使用TensorFlow Lite库中的工具类`TensorFlow Lite Model画质来加载模型,如:
```
File tfliteModelFile = new File(“/path/to/your/model.tflite”);
byte[] modelBytes = FileUtils.readFileToByteArray(tfliteModelFile);
Model model = ModelLoader.loadModel(mo-delBytes);
```
(4) 在Android应用中实现图像处理功能。可使用TensorFlow Lite库中的工具类`TensorFlow Lite C++来执行推理操作,如:
```
try {
// 创建输入张量
InputTensor input = new InputTensor(INPUT_ NAME,DataType.FLOAT32);
// 创建输出张量
OutputTensor output = new OutputTensor(OUTPUT_NAME,DataType.FLOAT32);
// 创建輸入数据类型为Float32数组,其中元素值是模型所需的输入数据
float[] inputData = {1.0f, 2.0f, 3.0f, 4.0f};
// 创建输入数据的数据类型为Float32数组,其中元素值是模型所需的输入数据的数据类型
TypeSpec inputType = TypeSpec.of(new TypeParameter(“input”, new Class[] {Float.class, Float.class}, “float”, “float”));
// 创建输出数据的类型为Float32数组,其中元素值是模型所需的输出数据的数据类型和大小(根据模型的维度)
TypeSpec outputType = TypeSpec.of(new TypeParameter(“output”, new Class[] {Float.class}, “float”, “float”));
// 创建模型所需的输入张量和输出张量类型的信息对象
InputSignature inputSignature=ModelSignatureMap.createSignatureMap()
.set(new InputName(INPUT_NAME),inputType, input)
.build();
OutputSignature outputSignature = ModelSignatureMap.createSignatureMap()
.set(new OutputName(OUTPUT_NAME), outputType, output)
.build();
// 创建模型的输入张量和输出张量类型的信息对象,并设置模型的输入和输出张量类型信息对象和大小信息对象
ModelSignature modelSignature = ModelSignatureMap.createSignatureMap()
.set(inputSignature)
.set(outputSignature)
.build();
// 创建模型,并设置模型文件、签名、选项等参数
Interpreter.Options options = new Interpreter.Options();
Interpreter interpreter = new Interpreter(modelBytes, options);
interpreter.resizeInput(0, inputShape);
interpreter.resizeOutput(0, outputShape);
// 创建模型的输入数据类型为Float32数组,其中元素值是模型所需的输入数据的数据类型和大小(根据模型的维度)
float[] outputData = new float[outputSize];
// 执行推理操作,并将结果存储在outputData数组中(根据模型的维度)
interpreter.run(inputData, outputData);
} catch (Exception e) {
e.printStackTrace();
}
```
4.3 APP软件调试
(1)确保环境配置正确:确保Android开发环境和相应的SDK、NDK等工具已正确安装并配置。确保使用者可成功构建和运行Android应用程序[12]。
(2)导入项目代码:将甘蔗病虫害识别系统的源代码导入到Android开发环境中,并确保项目文件结构正确。
(3)安装依赖库和模型文件:如果系统使用了特定的深度学习库或模型文件,需确保这些依赖库和模型文件已正确导入到项目中,并在代码中正确引用和调用。
(4)进行单元测试:针对各功能模块进行单元测试。确保图像加载、预处理、特征提取和分类等功能模块可正常工作,且输出结果符合预期。如果出现问题,可通过调试工具来逐步排查和修复。
(5)设备适配性测试:测试应用程序在不同Android设备上的适配性。确保应用程序在各种屏幕分辨率和设备规格下均能正常运行,且显示效果良好。在软件的调试过程中,使用内置操作系统为Android 10.0,并搭载海思麒麟985处理器,拥有8 GB运行内存的智能手机,该硬件配置使手机在进行软件调试和测试时可提供较高的性能和稳定性。
(6)性能优化与调试:对于较大的模型和复杂的计算任务,可能会出现性能问题或内存占用过高的情况。可通过优化代码、减少计算量等方式来改善性能,并使用性能分析工具进行调试和优化。
(7)进行真实场景测试:将应用程序安装到Android设备上,并在真实甘蔗病虫害环境下进行测试。确保应用程序可准确地识别和分类不同的甘蔗病虫害,且能在实时性要求下快速响应。
通过将手机调至开发者模式并赋予权限,用户可安装病虫害检测软件。成功部署后,用户打开移动端应用并进入识别界面(图4)。该界面展示了对验证集和真实农业场景下病虫害图像的识别效果。该病虫害检测软件不仅在应用移植方面非常便捷,且识别能力高度准确,还具备较高的检测效率,每次识别耗时不超过1 s。此外,软件除了识别甘蔗病虫害外,还能提供相应的防治建议及措施,基本实现了对甘蔗病虫害的智能化诊断功能。
5 结语
本研究基于Android设计的甘蔗病虫害识别系统是通过运用智能移动设备的功能和深度学习技术,实现对甘蔗病虫害的自动识别与监测。该系统具有简单易用、高效准确的特点,可帮助农民和科技工作者快速识别甘蔗病虫害并采取应对措施。然而,该系统资源消耗较大、对网络依赖度较高、用户交互体验欠佳等,后续研究中还需进一步完善该系统的功能和性能,提高识别的准确率和稳定性,不断优化升级系统,最大化满足农业生产实际中的需求。
参考文献
[1] 邵泽中. 基于Android和深度学习的稻田病虫害智能诊断系统的研究与实现[D]. 杭州:浙江理工大学,2019.
[2] 韩国鑫,廉琦,许译丹. Android平台在农业物联网中的应用研究[J]. 农技服务,2017,34(11):15.
[3] 罗叙昌. 甘蔗病虫综合防治技术[J]. 吉林农业,2013(3):71-72.
[4] 陈倩倩,王欢,朱敏. 基于YOLOv5的盲道和斑马线检测[J]. 信息技术与信息化,2022(7):10-14.
[5] 强伟,贺昱曜,郭玉锦,等. 基于改进SSD的水下目标检测算法研究[J]. 西北工业大学学报,2020,38(4):747-754.
[6] 夏永泉,李耀斌,李晨. 基于图像处理技术与Android手机的小麦病害诊断系统[J]. 安徽大学学报(自然科学版),2016,40(2):6.
[7] 牛学德,高丙朋,任荣荣,等. 基于轻量级CNN的作物病虫害识别及安卓端应用[J]. 广西师范大学学报(自然科学版),2022,40(6):59-68.
[8] 何正方,梁宇. 开源对软件行业发展的影响[J]. 软件,2019,40(7):123-128.
[9] 深度人工智能学院. NCNN、OpenVino、 TensorRT、MediaPipe、ONNX,各种推理架构比较[EB/OL].(2021-10-22)[2023-06-03]. https://www.163.com/dy/article/GMTE7T8F 0552ATF2.html.
[10] 徐金,郭釗汝,张太红,等. 基于Android的人脸表情识别应用[J]. 信息与电脑(理论版),2021,33(24):165-168.
[11] 艾珍珍. 基于轻量化CNN的农作物病害识别研究[D]. 荆州:长江大学,2022.
[12] 崔娜. 基于Android的移动终端应用程序开发与研究[J]. 电脑知识与技术,2016,12(29):38-39.
(责任编辑 陆杰思)