黃彬 蘇家儀 楊洋
摘要:目前葡萄病蟲害的傳統(tǒng)診斷均為人工目測,而且對農(nóng)技人員的經(jīng)驗要求較高,如果發(fā)現(xiàn)病蟲害不能及時解決,將會導(dǎo)致病蟲害有進(jìn)一步擴散的風(fēng)險。現(xiàn)如今移動智能手機的普及與配置性能的提升,讓人們可以便捷地獲得更多的技術(shù)支持,外加人工智能的興起,深度學(xué)習(xí)已廣泛應(yīng)用于很多行業(yè),通過更精準(zhǔn)的特征提取,為人們提供決策依據(jù)。本文通過介紹Android系統(tǒng)和YOLO的相關(guān)技術(shù)知識,然后論述病蟲害圖像識別的流程,最后應(yīng)用到Android平臺的工程項目中,系統(tǒng)穩(wěn)定運行,并達(dá)到預(yù)期效果。
關(guān)鍵詞:葡萄病蟲害;圖像識別;Android
病蟲害的防治管理是農(nóng)業(yè)生產(chǎn)的重要環(huán)節(jié),但傳統(tǒng)診斷農(nóng)作物病蟲害的方法是人工目測,這存在兩個問題:一方面,大田或溫室發(fā)生的病蟲害種類眾多,農(nóng)民并不能保證根據(jù)經(jīng)驗做出的判斷完全正確,另一方面,農(nóng)業(yè)技術(shù)人員相當(dāng)匱乏,由于沒有專業(yè)人士及時到現(xiàn)場診斷,可能會使病情延誤或加重。
近年來,人工智能技術(shù)已經(jīng)取得了長足的進(jìn)步,圖像識別、自動推理、數(shù)據(jù)挖掘、機器學(xué)習(xí)等都在蓬勃發(fā)展。人工智能可以在智能感知的前提下,結(jié)合大數(shù)據(jù)技術(shù)自主學(xué)習(xí),幫助人們做出決策、代替重復(fù)性工作,這意味著人工智能可以代替農(nóng)業(yè)專家自動診斷識別病蟲害,并做出防治決策。比如郭文川等[1]利用圖像技術(shù)根據(jù)參照物和被測植物葉片面積得到植物葉片的面積的基于基于Android手機的植物葉片面積快速無損測量系統(tǒng);鄒秋霞等[2]利用OpenCV(Open Source Comput- er Vision Library) 中的圖像處理技術(shù)在Android手機上實現(xiàn)了對植物葉片進(jìn)行分類的系統(tǒng);夏永泉等[3]在Android手機上運用一種最大類間差法和Canny算子對植物葉片圖像進(jìn)行病蟲害檢查。
本文以葡萄三種常見病害(葡萄白粉病、葡萄灰霉病、葡萄褐斑病)為研究對象,利用Android手機對葡萄表面病蟲害圖像進(jìn)行采集、裁剪,并通過Tensorflow加載YOLO[4]模型進(jìn)行病蟲害識別,并基于Android手機客戶端研發(fā)了葡萄病害圖像識別系統(tǒng),實現(xiàn)了葡萄病蟲害圖像的及時診斷并給出防治措施。
一、系統(tǒng)總體設(shè)計
(一)系統(tǒng)可行性分析
1.條件可行性分析
本系統(tǒng)需要一臺傳統(tǒng) PC 用來編寫、編譯和調(diào)試安卓應(yīng)用程序代碼。在該 PC 機器上,需要安裝JDK、Android Studio、Android SDK等開發(fā)軟件,這些軟件都能夠在各自的官網(wǎng)上免費下載。同時也需要在一臺帶有攝像頭的安卓智能移動手機來運行該應(yīng)用軟件,這也很容易獲得。因此,從軟件開發(fā)條件的可行性上來看,本系統(tǒng)在硬件和軟件條件上都是可行的。
2.技術(shù)可行性分析
安卓應(yīng)用程序的主要開發(fā)語言是Java,而Java是簡單、面向?qū)ο?、可移植、高性能、多線程和靜態(tài)的語言。在每一個版本的 Android SDK中,Google 公司官方都提供了若干示例,初學(xué)者都可以通過這些示例源碼快速掌握安卓應(yīng)用程序的開發(fā)。本文也調(diào)用了Tensorflow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型的加載和圖像識別,此外Tensorflow可通過Android Studio的Gradle添加依賴,就能調(diào)用相關(guān)的類庫,因此,本研究課題在技術(shù)上也是可行的。而YOLO先以開源,可下載源碼進(jìn)行配置訓(xùn)練。
(二)系統(tǒng)的開發(fā)環(huán)境
本課題主要是在 Android 手機上進(jìn)行葡萄病蟲害圖像識別,所以首先需要對 Android 應(yīng)用程序的開發(fā)環(huán)境進(jìn)行搭建。本系統(tǒng)當(dāng)前的開發(fā)環(huán)境和軟件資源如下:系統(tǒng)環(huán)境為 MacOS 10.13.6 ,JDK 為 JDK1.8 ,SDK 為 Android SDK r24,NDK 為 Android NDK,開發(fā)軟件為 Android Studio 3.6,用到的第三方庫有 Tensorflow。
(三)系統(tǒng)設(shè)計
1.系統(tǒng)的整體結(jié)構(gòu)
Android手機客戶端葡萄病蟲害圖像識別系統(tǒng)功能共分為三個主要部分:圖像采集、病蟲害診斷以及病蟲害防治措施。
2.系統(tǒng)識別工作流程
啟動系統(tǒng),進(jìn)入主頁面,點擊圖像采集后可選擇“系統(tǒng)相冊”或“手機拍照”的方式進(jìn)行病蟲害圖像的獲取。由于安卓6.0后,系統(tǒng)權(quán)限已調(diào)整為動態(tài)獲取,所以這兩個功能均需用戶允許方能使用。圖像采集成功后,用戶可以通過“圖像裁剪”來去除多余的識別內(nèi)容,裁剪成功后,會執(zhí)行Tensorflow加載的神經(jīng)網(wǎng)絡(luò)模型識別病蟲害。并對四種病蟲害的準(zhǔn)確率取最高值,最后顯示準(zhǔn)確率最高的病蟲害的名稱和防止措施,如果不屬于這三種病蟲害,則顯示識別失敗,并提示用戶是否繼續(xù)識別。
二、系統(tǒng)功能實現(xiàn)
(一)YOLO 總體設(shè)計
1.YOLO 概述
YOLO是一個端到端的目標(biāo)檢測算法,不需要預(yù)先提取region proposal(RCNN目標(biāo)檢測系列),通過一個網(wǎng)絡(luò)就可以輸出:類別,置信度,坐標(biāo)位置,檢測速度很快,雖然定位的精度相對低些,但其檢測快速的特點特別適合移動手機。
2.模型設(shè)計
整體來看,YOLO算法采用一個單獨的CNN模型實現(xiàn)點對點的目標(biāo)檢測。本系統(tǒng)的模型先將輸入的圖片切割為416x416的尺寸,然后傳入CNN網(wǎng)絡(luò),CNN網(wǎng)絡(luò)將輸入的圖片分割為13x13的網(wǎng)格,最后每個單元格負(fù)責(zé)去檢測那些中心點落在該格子內(nèi)的目標(biāo),并框定最后識別的對象。其中預(yù)測框和實際框的準(zhǔn)確度可通過IOU(intersection over union,交并比)設(shè)定,其范圍是0到1之間,預(yù)置為0.6。
3.模型訓(xùn)練
配置好模型的訓(xùn)練集和測試集的參數(shù),并將樣本放置各個細(xì)分文件夾,設(shè)定好識別對象的名稱為葡萄白粉病、葡萄褐斑病、葡萄灰霉病,和檢測對象類型為3后開始訓(xùn)練,訓(xùn)練結(jié)果如表1所示。保留YOLO使用均方差處理損失,訓(xùn)練完成后導(dǎo)出模型并轉(zhuǎn)換成pb文件以供Tensorflow加載。
(二)系統(tǒng)實現(xiàn)
本系統(tǒng)新建工程后,通過AndroidManifest.xml配置Android的啟動頁為主頁面MainActivity,并注冊識別頁面DetectActivity和病蟲害防治防治頁面DetailActivity,各個Activity都生成一個xml文件,并通過Activity中的setContentView方法加載各自的xml文件,以達(dá)到有效的把表現(xiàn)層和邏輯層分開,降低程序的耦合性,方便開發(fā)和維護(hù)。
在主頁面中,需要加載Tensorflow框架,并通過Tensorflow調(diào)用訓(xùn)練好的YOLO模型進(jìn)行識別,具體實現(xiàn)如下:
classifier = TensorFlowImageClassifier.create(
getAssets(),
MODEL_FILE,
LABEL_FILE,
INPUT_SIZE,
IMAGE_MEAN,
IMAGE_STD,
INPUT_NAME,
OUTPUT_NAME);
將系統(tǒng)拍攝或本地相冊獲取的圖像通過getBitmap的方法轉(zhuǎn)換成相應(yīng)尺寸的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);
}
最后通過如下方法進(jìn)行圖像的預(yù)測,并根據(jù)病蟲害的準(zhǔn)確率跳轉(zhuǎn)識別頁面顯示識別詳情:
Recognition.List=classifier.recognizeImage(croppedBitmap);
Intent intent = new Intent(MainActivity.this,DetectActivity.class);
startActivity(intent);
三、系統(tǒng)測試
(一)測試環(huán)境
本系統(tǒng)最終在裝有Android系統(tǒng)的移動智能手機上運行,系統(tǒng)選用設(shè)備的硬件配置如表2所示。
(二)測試功能模塊
1.系統(tǒng)流程測試
主要測試拍照功能和從相冊中選取圖片的功能。該模塊能夠成功打開攝像頭對病蟲害圖像進(jìn)行拍照,并且能夠從系統(tǒng)相冊中選取已經(jīng)拍攝好的圖片,并且將拍攝或者選取的圖片顯示在識別界面上。圖像獲取成功后,需要對進(jìn)行識別尺寸的裁剪,以符合模型的識別尺寸。
該頁面會將最終的病蟲害圖像傳入神經(jīng)網(wǎng)絡(luò)模型,并將識別結(jié)果顯示在頁面,其中包含識別的病蟲害名稱、病蟲害的準(zhǔn)確率,用戶可點擊“防治措施”跳轉(zhuǎn)具體的頁面。病蟲害防治措施頁面會顯示相應(yīng)的病狀和具體防治措施,具體操作流程如圖1所示。
2.其他病蟲害
如圖2所示,分別展示了葡萄灰霉病、葡萄褐斑病的識別結(jié)果和防治措施。
四、結(jié)語
本文提出的基于Android的葡萄病蟲害圖像識別的識別技術(shù)具備葡萄病蟲害圖像采集、病蟲害診斷、病蟲害防治措施顯示三個功能,加以完善后能投入到實際運用,具有一定的實際意義。其具體優(yōu)勢有如下幾點:
(一)將人工智能技術(shù)應(yīng)用到農(nóng)業(yè)中會顯著地減少產(chǎn)量損失與勞動力成本,幫助用戶做出防治決策。
(二)充分利用了Android手機的攜帶方便,采用基于Tensorflow框架與YOLO技術(shù),將訓(xùn)練好的葡萄病蟲害識別模型加載到手機中。
(三)該系統(tǒng)操作簡單、快速、識別效果準(zhǔn)確。
然而,在Android移動設(shè)備上進(jìn)行葡萄病蟲害圖像識別的參考文獻(xiàn)有限,深度學(xué)習(xí)技術(shù)在農(nóng)業(yè)生產(chǎn)領(lǐng)域中應(yīng)用也還處于起步階段,基于深度學(xué)習(xí)的葡萄病蟲害圖像識別系統(tǒng)目前國內(nèi)外均缺乏研究,對于算法的研究都是基于已有文獻(xiàn),本系統(tǒng)不能適應(yīng)所有的拍攝環(huán)境。利用移動設(shè)備拍攝圖像時產(chǎn)生的干擾因素不可預(yù)測,以致拍攝過程中因為光照會產(chǎn)生個別結(jié)果的不準(zhǔn)確。因此從整體系統(tǒng)角度來看,仍有幾個地方仍需完善:
1.支持的病蟲害類型僅限文中3種,擴展更多的病蟲害類型有待加強,還有病蟲害類型擴展后的防止措施的補充。
2.對復(fù)雜背景下拍攝的圖像準(zhǔn)確度還有待提高,比如拍攝對象出現(xiàn)遮擋,或是顫抖拍照時出現(xiàn)的模糊。
3.本系統(tǒng)只研究和實現(xiàn)了針對Android平臺,但市場上仍有相當(dāng)一部分iOS系統(tǒng)的用戶,因此從推廣角度來看,兼容iOS系統(tǒng)也是必須的。
參考文獻(xiàn):
[1]郭文川,周超超,韓文霆.基于Android手機的植物葉片面積快速無損測量系統(tǒng)[J].農(nóng)業(yè)機械學(xué)報,2014(01):281-286.
[2]鄒秋霞,郜魯濤,盛立沖.基于Android手機和圖像特征識別技術(shù)的植物葉片分類系統(tǒng)的研究[J].安徽農(nóng)業(yè)科學(xué),2015(11):377-379.
[3]夏永泉,王會敏,曾莎.基于Android的植物葉片圖像病害檢測[J].鄭州輕工業(yè)學(xué)院學(xué)報:自然科學(xué)版,2014(29):74.
[4] Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi. You Only Look Once: Unified, Real-Time Object Detection.