梁東 唐偉萍 黃欣



摘 要:為提高對甘蔗病蟲害的防治效率,實現(xiàn)對甘蔗病蟲害的自動識別與監(jiān)測,研究設計基于安卓(Android)的甘蔗病蟲害識別系統(tǒng)。該系統(tǒng)利用智能移動設備收集了大量的甘蔗病蟲害圖像數據集,使用計算機視覺技術提取圖像中的特征,構建深度學習模型,并訓練一個分類模型來識別不同類型的甘蔗病蟲害,進行端側推理并將訓練好的模型集成到Android應用中,實現(xiàn)對甘蔗病蟲害的快速準確識別。該甘蔗病蟲害識別系統(tǒng)在識別準確率和使用性能方面表現(xiàn)良好,可有效地幫助農民識別和處理甘蔗病蟲害問題,提高防治效率。
關鍵詞:Android平臺;甘蔗害蟲;圖像處理;深度學習;特征提取
中圖分類號:S566.1;S126? ? ? ? ? ? ? ? ? ? ? ?文獻標志碼:A 文章編號:2095-820X(2023)04-0013-06
0 引言
甘蔗作為重要的經濟作物之一,同樣面臨著各種病蟲害的侵襲。蟲害已對甘蔗的產量和質量造成了嚴重威脅,可導致嚴重的減產損失,給農民帶來巨大的經濟壓力。傳統(tǒng)的甘蔗病蟲害監(jiān)測和防治主要依賴于人工巡查識別和化學農藥噴灑,不僅效率低下,還會對環(huán)境造成污染。人工對甘蔗進行病蟲害識別是一項費時費力的任務,通常需要專業(yè)知識和豐富經驗。隨著深度學習技術在圖像識別領域取得突破性進展,給解決甘蔗病蟲害識別問題提供了新的可能性。利用深度學習算法,可通過訓練模型來自動識別和分類不同類型的病蟲害,從而提高識別的準確性和效率。在智能移動設備市場快速發(fā)展的背景下,將甘蔗病蟲害識別技術應用于安卓(Android)平臺具有重要意義。通過在Android平臺上建立甘蔗病蟲害識別模型,農民和科技工作者可隨時隨地使用手機或平板電腦對甘蔗病蟲害進行識別,及時采取相應的防治措施,從而提高作物的產量和質量[1]。近年來,圖像處理和機器學習技術在農業(yè)領域得到了廣泛應用,許多研究致力于開發(fā)基于圖像處理和機器學習的農作物病蟲害識別方法。但鮮有研究關注基于Android平臺的甘蔗病蟲害圖像處理方法。基于Android平臺的甘蔗病蟲害識別研究旨在將深度學習技術與移動設備相結合,開發(fā)出具有實時性、便攜性和高準確性的甘蔗病蟲害識別系統(tǒng)[2],為農業(yè)生產提供技術支持,幫助農民更好地管理甘蔗。
1 數據采集及處理
甘蔗的常見病蟲害主要有銹病、輪斑病、黑穗病、鞘腐病、赤腐病、鳳梨病、螟蟲和棉蚜等[3];針對各種病蟲害進行特征分析,如甘蔗黑穗病屬真菌性病害,其明顯特征是蔗莖頂端部生長出一條黑色鞭狀物,短者筆直,長者或卷曲或彎曲,無分枝;使用數碼相機、平板電腦或智能手機在廣西崇左市、南寧市、橫州市等地的甘蔗種植區(qū)進行病蟲害特征圖片數據采集,每種病蟲害的樣本數為500張,采集的部分數據集如圖1所示。為了提高識別精度,后續(xù)會對圖像數據進行預處理,包括圖像增強、降噪和圖像矯正等。
2 模型構建和訓練
2.1 模型構建和訓練原理
為了提高模型的準確性和性能,確保模型能準確地識別甘蔗葉片的病蟲害情況,甘蔗病蟲害識別模型的構建和訓練過程主要步驟有:
(1)數據集準備:收集包含甘蔗葉片病蟲害圖片的數據集,確保圖片標注準確。
(2)數據集分割:將數據集劃分為訓練集、驗證集和測試集。一般采用70%的圖片作為訓練集,10%作為驗證集,剩下的20%平均分給測試集A和測試集B[4]。
(3)預訓練模型:選擇一個合適的預訓練模型作為基礎網絡。在本研究中使用ResNet-152模型。
(4)特征提?。涸跀祿蠈︻A訓練模型進行遷移學習,提取模型學習到的圖像底層特征[5]。
(5)模型訓練:以提取到的特征作為輸入數據源,訓練病蟲害識別模型??刹捎梅诸惼骰蚱渌m合的方法進行訓練。
(6)模型驗證:使用驗證集對訓練好的模型進行驗證,評估模型在未見過的數據上的性能。
(7)識別率評估:使用測試集A和測試集B對訓練好的模型進行評估,計算模型的識別率。
2.2 模型構建和訓練過程
本研究基于ResNet-152預訓練網絡構建一個甘蔗葉片病蟲害識別模型。使用1份包含近3萬張標注甘蔗葉片病蟲害照片的圖像數據集,該數據集被隨機分成4個部分,70%作為訓練集,10%作為驗證集,余下的20%平均分給測試集A和測試集B。在劃分好的數據集上,首先對ResNet-152模型進行預訓練,通過預訓練模型,提取學習到的圖像底層特征,作為后續(xù)正式創(chuàng)建模型的初始化參數。隨后,使用預訓練提取到的參數作為輸入數據,在甘蔗葉片病蟲害識別任務上訓練模型,使用測試集A和測試集B進行驗證,計算識別率,完成對甘蔗葉片病蟲害的識別任務。模型的整體框架如圖2所示。
3 端側推理
Android Studio軟件、JDK(Java development kit)和SDK(Software development kit)是應用系統(tǒng)開發(fā)環(huán)境的主要組成部分。在PyTorch框架中完成模型的訓練過程,之后的優(yōu)化和部署過程主要在推理框架和Android Studio軟件中完成,整個推理流程如圖3所示。首先,需要搭建Android開發(fā)環(huán)境,并在Gradle中添加推理框架接口的依賴庫。這樣可減少Module的重復編譯數量,方便進行調用和訪問。然后將訓練好的CNN網絡模型通過腳本語言轉換為適合Android平臺使用的模型文件格式。在轉換過程中,可能會進行一些操作,如量化和剪枝[6]。最后,在MainActivity.java文件中加載模型,并在CameraActivity.java文件中創(chuàng)建模型的重寫調用鏈接。還需要編寫相關的相機設置,以便使用手機的攝像頭進行圖像識別。同時,在Android開發(fā)軟件中,按照網絡模型訓練過程使用的類別文檔格式配置農作物病蟲害標簽,使軟件在進行圖像識別時能輸出正確的病蟲害類別[7]。最后,在Android Studio軟件上完成Android應用的UI界面設計及其他相關開發(fā)和調試工作。用戶在允許應用軟件調用攝像頭或獲取內存權限的前提下,可使用該軟件調用攝像頭或從本地獲取圖片進行圖像識別操作。
4 Android端應用開發(fā)
4.1 Android端操作系統(tǒng)與推理框架簡介
Android是基于Linux內核的開源移動設備操作系統(tǒng),由美國谷歌公司開發(fā)[8],主要應用于智能手機、平板電腦、智能手表和其他便攜式設備上,為移動設備提供了豐富的功能和應用支持。
推理框架(Inference framework)是用于在移動設備或其他嵌入式系統(tǒng)上進行深度學習模型推理的軟件工具包,提供了對預訓練的深度學習模型進行加載、推理計算和結果輸出的功能,使用戶能便捷地將深度學習模型部署到移動設備上進行實時推理。
在Android端有幾個常見的推理框架可供選擇:
(1)TensorFlow Lite:谷歌公司開發(fā)的專門用于移動設備和嵌入式設備的輕量級機器學習推理引擎。針對移動設備和嵌入式設備資源有限的特點進行優(yōu)化,以便高效運行機器學習模型。
(2) PyTorch Mobile:PyTorch Mobile是基于PyTorch框架的移動端推理工具,在移動設備上進行深度學習模型的推斷,適用于Android設備。提供了加載、運行和部署PyTorch模型的功能,并支持與Java和C++的集成。
(3)ONNX Runtime for Mobile:ONNX(開放神經網絡交換)是一種開放的深度學習模型表示格式,ONNX Runtime是用于在移動設備上進行推理的高性能引擎。支持Android平臺,并提供了C++和Java的API接口[9]。
這些推理框架均提供了豐富的功能和工具,可幫助開發(fā)者在Android端進行深度學習模型的推理任務;同時提供了模型加載、計算、優(yōu)化和結果輸出等一系列功能,使得開發(fā)者能更便捷地使用深度學習模型來構建實際應用。
4.2 模型集成
將訓練好的模型集成到Android應用中,實現(xiàn)實時的甘蔗病蟲害圖像識別功能[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應用中實現(xiàn)圖像處理功能。可使用TensorFlow Lite庫中的工具類`TensorFlow Lite C++來執(zhí)行推理操作,如:
```
try {
// 創(chuàng)建輸入張量
InputTensor input = new InputTensor(INPUT_ NAME,DataType.FLOAT32);
// 創(chuàng)建輸出張量
OutputTensor output = new OutputTensor(OUTPUT_NAME,DataType.FLOAT32);
// 創(chuàng)建輸入數據類型為Float32數組,其中元素值是模型所需的輸入數據
float[] inputData = {1.0f, 2.0f, 3.0f, 4.0f};
// 創(chuàng)建輸入數據的數據類型為Float32數組,其中元素值是模型所需的輸入數據的數據類型
TypeSpec inputType = TypeSpec.of(new TypeParameter(“input”, new Class[] {Float.class, Float.class}, “float”, “float”));
// 創(chuàng)建輸出數據的類型為Float32數組,其中元素值是模型所需的輸出數據的數據類型和大小(根據模型的維度)
TypeSpec outputType = TypeSpec.of(new TypeParameter(“output”, new Class[] {Float.class}, “float”, “float”));
// 創(chuàng)建模型所需的輸入張量和輸出張量類型的信息對象
InputSignature inputSignature=ModelSignatureMap.createSignatureMap()
.set(new InputName(INPUT_NAME),inputType, input)
.build();
OutputSignature outputSignature = ModelSignatureMap.createSignatureMap()
.set(new OutputName(OUTPUT_NAME), outputType, output)
.build();
// 創(chuàng)建模型的輸入張量和輸出張量類型的信息對象,并設置模型的輸入和輸出張量類型信息對象和大小信息對象
ModelSignature modelSignature = ModelSignatureMap.createSignatureMap()
.set(inputSignature)
.set(outputSignature)
.build();
// 創(chuàng)建模型,并設置模型文件、簽名、選項等參數
Interpreter.Options options = new Interpreter.Options();
Interpreter interpreter = new Interpreter(modelBytes, options);
interpreter.resizeInput(0, inputShape);
interpreter.resizeOutput(0, outputShape);
// 創(chuàng)建模型的輸入數據類型為Float32數組,其中元素值是模型所需的輸入數據的數據類型和大?。ǜ鶕P偷木S度)
float[] outputData = new float[outputSize];
// 執(zhí)行推理操作,并將結果存儲在outputData數組中(根據模型的維度)
interpreter.run(inputData, outputData);
} catch (Exception e) {
e.printStackTrace();
}
```
4.3 APP軟件調試
(1)確保環(huán)境配置正確:確保Android開發(fā)環(huán)境和相應的SDK、NDK等工具已正確安裝并配置。確保使用者可成功構建和運行Android應用程序[12]。
(2)導入項目代碼:將甘蔗病蟲害識別系統(tǒng)的源代碼導入到Android開發(fā)環(huán)境中,并確保項目文件結構正確。
(3)安裝依賴庫和模型文件:如果系統(tǒng)使用了特定的深度學習庫或模型文件,需確保這些依賴庫和模型文件已正確導入到項目中,并在代碼中正確引用和調用。
(4)進行單元測試:針對各功能模塊進行單元測試。確保圖像加載、預處理、特征提取和分類等功能模塊可正常工作,且輸出結果符合預期。如果出現(xiàn)問題,可通過調試工具來逐步排查和修復。
(5)設備適配性測試:測試應用程序在不同Android設備上的適配性。確保應用程序在各種屏幕分辨率和設備規(guī)格下均能正常運行,且顯示效果良好。在軟件的調試過程中,使用內置操作系統(tǒng)為Android 10.0,并搭載海思麒麟985處理器,擁有8 GB運行內存的智能手機,該硬件配置使手機在進行軟件調試和測試時可提供較高的性能和穩(wěn)定性。
(6)性能優(yōu)化與調試:對于較大的模型和復雜的計算任務,可能會出現(xiàn)性能問題或內存占用過高的情況??赏ㄟ^優(yōu)化代碼、減少計算量等方式來改善性能,并使用性能分析工具進行調試和優(yōu)化。
(7)進行真實場景測試:將應用程序安裝到Android設備上,并在真實甘蔗病蟲害環(huán)境下進行測試。確保應用程序可準確地識別和分類不同的甘蔗病蟲害,且能在實時性要求下快速響應。
通過將手機調至開發(fā)者模式并賦予權限,用戶可安裝病蟲害檢測軟件。成功部署后,用戶打開移動端應用并進入識別界面(圖4)。該界面展示了對驗證集和真實農業(yè)場景下病蟲害圖像的識別效果。該病蟲害檢測軟件不僅在應用移植方面非常便捷,且識別能力高度準確,還具備較高的檢測效率,每次識別耗時不超過1 s。此外,軟件除了識別甘蔗病蟲害外,還能提供相應的防治建議及措施,基本實現(xiàn)了對甘蔗病蟲害的智能化診斷功能。
5 結語
本研究基于Android設計的甘蔗病蟲害識別系統(tǒng)是通過運用智能移動設備的功能和深度學習技術,實現(xiàn)對甘蔗病蟲害的自動識別與監(jiān)測。該系統(tǒng)具有簡單易用、高效準確的特點,可幫助農民和科技工作者快速識別甘蔗病蟲害并采取應對措施。然而,該系統(tǒng)資源消耗較大、對網絡依賴度較高、用戶交互體驗欠佳等,后續(xù)研究中還需進一步完善該系統(tǒng)的功能和性能,提高識別的準確率和穩(wěn)定性,不斷優(yōu)化升級系統(tǒng),最大化滿足農業(yè)生產實際中的需求。
參考文獻
[1] 邵澤中. 基于Android和深度學習的稻田病蟲害智能診斷系統(tǒng)的研究與實現(xiàn)[D]. 杭州:浙江理工大學,2019.
[2] 韓國鑫,廉琦,許譯丹. Android平臺在農業(yè)物聯(lián)網中的應用研究[J]. 農技服務,2017,34(11):15.
[3] 羅敘昌. 甘蔗病蟲綜合防治技術[J]. 吉林農業(yè),2013(3):71-72.
[4] 陳倩倩,王歡,朱敏. 基于YOLOv5的盲道和斑馬線檢測[J]. 信息技術與信息化,2022(7):10-14.
[5] 強偉,賀昱曜,郭玉錦,等. 基于改進SSD的水下目標檢測算法研究[J]. 西北工業(yè)大學學報,2020,38(4):747-754.
[6] 夏永泉,李耀斌,李晨. 基于圖像處理技術與Android手機的小麥病害診斷系統(tǒng)[J]. 安徽大學學報(自然科學版),2016,40(2):6.
[7] 牛學德,高丙朋,任榮榮,等. 基于輕量級CNN的作物病蟲害識別及安卓端應用[J]. 廣西師范大學學報(自然科學版),2022,40(6):59-68.
[8] 何正方,梁宇. 開源對軟件行業(yè)發(fā)展的影響[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] 徐金,郭釗汝,張?zhí)t,等. 基于Android的人臉表情識別應用[J]. 信息與電腦(理論版),2021,33(24):165-168.
[11] 艾珍珍. 基于輕量化CNN的農作物病害識別研究[D]. 荊州:長江大學,2022.
[12] 崔娜. 基于Android的移動終端應用程序開發(fā)與研究[J]. 電腦知識與技術,2016,12(29):38-39.
(責任編輯 陸杰思)