陶杰,陳啟源,朱恒通
(蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院,江蘇蘇州,215008)
太湖莼菜是多年生水生植物,為蘇州地方“水八仙”之一。口感鮮美,營養(yǎng)豐富,為珍貴蔬菜。莼菜在高溫期間生長快,進入盛采期。因其長在水中,覆蓋膠質(zhì),柔嫩易滑,需要采摘者技術(shù)熟練,眼明手快,蘇州東山當(dāng)?shù)赜小白捷徊恕钡恼f法[1]。采摘工人要經(jīng)受高溫日曬、雙手終日泡在水中的辛苦。熟練采摘工缺乏,來不及采摘的莼菜只能老去不能食用。目前莼菜種植面積日益萎縮,迫切需要智能化采摘設(shè)備跟進。
本文以蘇州東湖莼菜廠的莼菜種植試驗槽作為載體,以試驗槽內(nèi)5 月~9 月生長的莼菜作為識別對象,采用深度學(xué)習(xí)技術(shù)確定圖像檢測模型,實現(xiàn)莼菜智能化識別,設(shè)計適用的檢測定位裝置,為后期的莼菜采摘設(shè)備研制提供基礎(chǔ)實驗。
測試系統(tǒng)主要包括載有水下攝像頭的橫向行走機構(gòu)、豎向調(diào)整機構(gòu),可以沿種植槽移動,并上下調(diào)整攝像頭位置。如圖1 所示,水下攝像頭通過10m 數(shù)據(jù)線連接到Andriod平板,實時識別檢測到莼菜的位置后,將圖片中最大目標(biāo)的識別框坐標(biāo)及寬、高參數(shù),通過WiFi 發(fā)送到運動控制終端,運動控制終端驅(qū)動縱向、橫向步進電機,帶動縱向絲桿末端的攝像頭在一定行程內(nèi)移動,使得檢測出的識別框位于圖片正中位置。
圖1 檢測系統(tǒng)組成示意圖
運動控制終端采用Arduino,連接串口轉(zhuǎn)WiFi 模ESP8266,步進驅(qū)動FYQM302,其中縱向電機采用型號FY42EC220 絲桿電機,步距角為1.8°,絲桿直徑8mm,導(dǎo)程4mm,保持力矩達到0.65Nm,絲桿行程400mm,并配置上限位開關(guān)KW12,作為絲桿零點位置??刂破鹘泳€如圖2 所示,圖中只標(biāo)注了縱向電機驅(qū)動器的連線,橫向電機驅(qū)動器接線類似。串口TXD、RXD 分別連接ESP8266 的R、T 引腳[2],實現(xiàn)串口連接。D5 作為輸入引腳,連接行程開關(guān)一端,其另一端接地,由軟件初始化設(shè)置其內(nèi)部為上拉電阻;D8、D9、D10 作為輸出引腳,分別接步進驅(qū)動器使能、方向、脈沖控制端。
圖2 運動控制終端控制器接線示意
運動控制終端,主要根據(jù)接收的WiFi 指令,完成兩類運動控制。一是根據(jù)識別框坐標(biāo),自動調(diào)整,使得最大識別對象移動至圖片中央位置;二是根據(jù)平板界面上的手動調(diào)整指令,橫向移動、縱向移動。為保證通信正確,制定較完整的上層協(xié)議。上層數(shù)據(jù)幀格式規(guī)定如圖3 所示。
圖3
其中,起始符、結(jié)束符分別為02H、03H,各占1 字節(jié);控制碼對應(yīng)各任務(wù)類型(如01H 表示自動運行情況、02H 表示手動橫向運行啟動、12H 表示手動橫向運行停止;03H 表示手動縱向運行啟動,13H 表示手動橫向運行停止);數(shù)據(jù)域D 占用兩個字節(jié),在自動運行時,分別表示橫向、縱向移動距離,在手動運行時,數(shù)據(jù)域首字節(jié)以0x00 填充,末字節(jié)表示運動方向,0x00 為正向,0x01 為反向。和校驗CS 占1 字節(jié),取其前3 字節(jié)之和的低字節(jié)值。
控制程序包括一個主控輪詢程序,和一個定時中斷子程序??刂破鞯闹髁鞒虉D如圖4 所示,初始化時,兩個電機均反轉(zhuǎn)至限位開關(guān)觸發(fā),判定零點,依此計算出最大行程,在后續(xù)電機運動子程序中判斷行程是否超限。設(shè)置串口的串口數(shù)據(jù)格式為8 位數(shù)據(jù)位、1 位停止位、1 位偶校驗位,波特率設(shè)為115200。通過串口類庫函數(shù)available(),判斷串口2 緩沖是否有新的接收數(shù)據(jù)。如有對接收數(shù)據(jù),校驗合格后分析上層數(shù)據(jù)幀。根據(jù)指令碼分析電機是自動運行或手動運行,由自動運行子程序根據(jù)執(zhí)行步數(shù)計算電機的當(dāng)前起停狀況,手動運行子程序控制當(dāng)前電機的起停狀況。
圖4 運動控制終端主流程圖
定時中斷子程序控制兩個電機的脈沖輸出狀況,采用第三方庫TimeAlarms 實現(xiàn)定時,由Alarm.timerRepeat()指令設(shè)定定時時間和中斷回調(diào)函數(shù)[3]。中斷子程序根據(jù)主程序中設(shè)定的情況,即時控制PWM和方向引腳上的電平狀態(tài)。
在蘇州東山莼菜基地,采用桑巴達 Y102 水下攝像頭收集種植槽內(nèi)莼菜圖片1000 余張,種植槽水深0.75m,圖片采集位置位于水下0.1m 至0.6m,采集時間為夏季上午9:00 至下午16:00 光線較強時間段。圖片經(jīng)過篩選,標(biāo)注識別對象,選擇形態(tài)較好的、商品標(biāo)準(zhǔn)級別較高的、橫向或縱向尺寸大于圖片一半的莼菜進行標(biāo)注識別對象,同一圖片中若有多個符合要求的識別對象,選擇尺寸最大的三個對象標(biāo)注,多個標(biāo)注可以部分重疊。并經(jīng)過旋轉(zhuǎn)、對稱翻轉(zhuǎn)等方法進行數(shù)據(jù)加強,最后選取1500 張圖片,形成PaddlPaddle標(biāo)準(zhǔn)數(shù)據(jù)集。圖片及識別對象標(biāo)注框如圖5所示。
圖5 莼菜水下圖像標(biāo)注
由飛槳BML 全功能AI 開發(fā)平臺訓(xùn)練,采用Python3.7,開發(fā)框架為paddlepaddle-v2.3.0,采用PPYOLO 算法,圖片尺寸Inputsize 為320×320[4]。在建議閾值0.7 時,訓(xùn)練模型的評估指標(biāo)F1-score 值識別準(zhǔn)確率最大,F(xiàn)1-score=2*(P*R)/(P+R)。如圖6 所示,訓(xùn)練模型的F1-score 值與閾值關(guān)系訓(xùn)練后的mMAP 98.8%,精確率P=99.0%,召回率R=98.5%,滿足種植槽水下環(huán)境的一般檢測需要。
圖6 不同閾值下的F1-score 值
就莼菜采摘任務(wù)而言,莼菜不需要完全采干凈,適當(dāng)保留嫩葉有助于莼菜生長,采摘過程中盡量不要采錯,以減少后期挑揀任務(wù)。所以提高閾值,模型中閾值可設(shè)置為0.9。
通過Paddle Lite 離線轉(zhuǎn)換工具,將Paddle 檢測模型優(yōu)化為適合的Paddle Lite模型,Paddle Lite 是一種輕量級、靈活性強、易于擴展的高性能的深度學(xué)習(xí)預(yù)測框架,支持諸如 ARM 等多種終端,具有圖優(yōu)化及預(yù)測加速能力[5]。本項目在paddle 提供的檢測案例程序更新檢測模型,實現(xiàn)檢測功能。為后續(xù)的案例模型替換方便,使用平臺提供的opt 工具,優(yōu)化后的模型文件名設(shè)置為model.nb,與案例中原模型同名。
在Andriod Studio 中配置最新版本的NDK 和CMake,下 載Paddle Lite 預(yù)測庫 和模型案例,在Andriod Studio 中打開,編譯并安裝案例APP,測試案例的圖片識別和標(biāo)注。成功后,進行檢測案例內(nèi)容替換更改,主要是識別模型和參數(shù)更改;編寫需要新增的操控程序。
從github.com/PaddlePaddle/Paddle-Lite 平臺上下載檢測案例。在Andriod Studio 中打開,參照平 臺教程,根 據(jù)Android demo 示例的代碼結(jié)構(gòu)提示,將優(yōu)化后的檢測模型在原案例路徑下以相同名字替換,以及對應(yīng)的識別模型標(biāo)簽文件。本項目中訓(xùn)練模型中檢測對象只有莼菜這一類,還需要更改輸出案例中的 tensor 個數(shù)、更新輸出 shape。
在識別函數(shù)Detector::Postprocess(std::vector
根據(jù)操控要求,更改主界面設(shè)計,增加手動、自動切換開關(guān),以及手動控制的點動按鈕,包括上、下、左、右方向,編寫對應(yīng)的切換狀態(tài)及點動狀態(tài)設(shè)置程序;另外需要根據(jù)增加檢測控制程序,實現(xiàn)根據(jù)操作狀態(tài)和檢測結(jié)果、發(fā)送對應(yīng)的運動指令的功能,程序流程圖如圖7 所示。
圖7 平板主界面程序主流程圖
初始化加載界面,設(shè)置WiFi連接參數(shù),連接水下攝像頭。自動狀態(tài)下通過攝像頭視頻進行圖像檢測后,如果圖片有超過1 個檢測結(jié)果,實時讀取目標(biāo)框坐標(biāo)的x、y、w、h 參數(shù),通過w*h 計算,可以判斷選取出最大目標(biāo)框作為運動控制目標(biāo),根據(jù)識別框參數(shù),換算出識別框的中心位置坐標(biāo)后,計算出目標(biāo)框中心點坐標(biāo)與圖片中心坐標(biāo)的差值,即可計算距離中心點的橫向、縱向距離;通過WiFi 發(fā)送自動指令,輸出兩個方向的運動行程,運動控制終端調(diào)整。設(shè)計實時誤差值在10 個點像素內(nèi),即為到達目標(biāo)點。如果控制終端上電機絲杠到行程極限,停止運行并發(fā)送報警。在手動狀態(tài)下,根據(jù)主界面上的四個點動按鈕的交互狀態(tài),選擇步進電機的縱向、橫向點動方向,通過WiFi 發(fā)送點動控制指令,由運動控制終端默認點動行程距離運行。如電機絲桿達到行程極限,同樣會停止運行并發(fā)送報警。終端界面在接收到報警顯示自動、手動的報警信息。
經(jīng)過Andriod 編程調(diào)試,先在平板上測試圖片檢測,并校驗電機運轉(zhuǎn),調(diào)整限位開關(guān)位置,確保電機運行可靠,超過最大行程停止并報警。之后在種植槽上進行試驗,每次自動檢測后,手動復(fù)位電機絲桿。轉(zhuǎn)移裝置到新檢測位置后,再次自動測試。自動運行中,可以進行多次檢測目標(biāo),當(dāng)檢測完成檢測框顯示居中后,可以手動巡視,出現(xiàn)新目標(biāo)后,再次切換到自動狀態(tài),由裝置自動進行新的居中運動?,F(xiàn)場測試效果如圖8 所示。左圖是自動檢測定位前識別圖,右圖是攝像頭自動居中移位效果。
圖8 檢測定位對比效果圖
實際試驗過程中,絲桿運動帶來水流擾動,導(dǎo)致圖片采集有干擾,降低電機運轉(zhuǎn)速度,可以減少水流干擾,相對較好地完成預(yù)期目標(biāo),實現(xiàn)行程范圍內(nèi)的攝像頭居中定位,為后續(xù)的采摘方案提供試驗參考基礎(chǔ)。由于系統(tǒng)尚未設(shè)計調(diào)速功能,只可以借助驅(qū)動器的細分開關(guān),設(shè)置細分狀態(tài)手動調(diào)整運動速度。后續(xù)需要在控制界面增加速度調(diào)整交互功能,運動控制終端調(diào)速程序,并進一步深化研究,根據(jù)圖像拍攝及檢測狀況,實現(xiàn)自動調(diào)整速度的功能。