黃彬 蘇家儀 楊洋



摘要:目前葡萄病蟲害的傳統診斷均為人工目測,而且對農技人員的經驗要求較高,如果發現病蟲害不能及時解決,將會導致病蟲害有進一步擴散的風險。現如今移動智能手機的普及與配置性能的提升,讓人們可以便捷地獲得更多的技術支持,外加人工智能的興起,深度學習已廣泛應用于很多行業,通過更精準的特征提取,為人們提供決策依據。本文通過介紹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.