楊廣峰
垃圾分類搬運(yùn)是垃圾分類中的一項重要的工作,其中不同垃圾桶的分類識別是一個重要內(nèi)容,它屬于物體檢測,是計算機(jī)視覺中的經(jīng)典問題之一。其任務(wù)是用方框去標(biāo)出圖像中物體的位置,并給出物體的類別。
本文中借助物體檢測,打造出一個基于樹莓派的智能垃圾識別搬運(yùn)機(jī)器人,智能識別垃圾筒,自動計算機(jī)器人與垃圾筒的距離,從而實(shí)現(xiàn)智能搬運(yùn)的功能。
樹莓派六足機(jī)器人一套(六足機(jī)器人一個,樹莓派4B一塊,古德微擴(kuò)展板一塊,電機(jī)驅(qū)動板一個,USB攝像頭一個),目標(biāo)物體兩個(紅色、藍(lán)色海綿正方體各一個,邊長為10厘米)(如圖1)。
登錄網(wǎng)站,開始“物體檢測”。首先,訪問古德微機(jī)器人網(wǎng)站(http://www.gdwrobot.cn),登錄進(jìn)入自己的賬號后點(diǎn)擊“設(shè)備控制”進(jìn)入“積木”界面;接著,點(diǎn)擊“更多功能”按鈕,再點(diǎn)擊左下角的“機(jī)器學(xué)習(xí)”項,頁面顯示有“圖片分類”“物體檢測”和“聲音檢測”三類功能應(yīng)用,點(diǎn)擊“物體分類”中的“遠(yuǎn)程使用樹莓派攝像頭進(jìn)行物體分類”按鈕(如圖2)。
通過拍照采集并標(biāo)注目標(biāo)訓(xùn)練機(jī)器人。我們進(jìn)入“機(jī)器學(xué)習(xí)—物體檢測訓(xùn)練(遠(yuǎn)程采集樹莓派圖片)”頁面,點(diǎn)擊頁面左側(cè)的“拍照”按鈕即可進(jìn)行數(shù)據(jù)的采集。不斷變換機(jī)器人的位置與角度,分別點(diǎn)擊“拍照”按鈕進(jìn)行目標(biāo)圖片的添加(如圖3)。
接下來,對采樣的圖片進(jìn)行物體的標(biāo)注。選擇第一張圖片,拖動光標(biāo)對紅色物體進(jìn)行框選,輸入物體的分類名稱“紅色”,再拖動光標(biāo)對藍(lán)色物體進(jìn)行框選,輸入物體的分類名稱“藍(lán)色”,點(diǎn)擊“保存并切換下一張圖片”,完成第一張圖片的標(biāo)注,并開啟第二張圖片的標(biāo)注(如圖4)。
全部標(biāo)注完成后,點(diǎn)擊“開始訓(xùn)練”按鈕對采集的圖片進(jìn)行訓(xùn)練。
訓(xùn)練結(jié)束后即可再將機(jī)器放置在任意位置,對其預(yù)覽圖片中的物體進(jìn)行分類驗(yàn)證,預(yù)覽圖像中顯示目標(biāo)物體檢測框,同時還顯示目標(biāo)物體的分類與置信度百分比:“紅色:87.79%、藍(lán)色:79.09%”(如圖5)。
拍照采集與訓(xùn)練驗(yàn)證均完成之后,點(diǎn)擊右下角的“下載樹莓派上使用的模型”按鈕,很快就會有“模型轉(zhuǎn)換下載完成”的提示,這時,相關(guān)文件已被下載到樹莓派的/home/pi/model/object_detection目錄下,模型文件為model.tflite,對應(yīng)標(biāo)簽文件為labels.txt。通過Windows的遠(yuǎn)程桌面連接進(jìn)入樹莓派進(jìn)行查看,labels.txt的文件內(nèi)容包含兩行內(nèi)容,依次對應(yīng)訓(xùn)練模型的分類名稱:“紅色、藍(lán)色”(如圖6)。
本例中,指定將地圖前方的目標(biāo)物體(不可回收垃圾,用紅色物體代替)智能搬運(yùn)到地圖左方的目標(biāo)物體(不可回收垃圾,用紅色物體代替)存放區(qū)。編程可分為兩步,第一步是機(jī)器人獲取當(dāng)前距離(機(jī)器人與物體之間的距離),第二步是根據(jù)當(dāng)前距離計算步數(shù),前進(jìn)并夾取物體。其中第一步獲取當(dāng)前距離用到了攝像頭拍照、物體檢測、讀取檢測結(jié)果、計算距離與步數(shù)。
使用機(jī)器人攝像頭對前方拍照,調(diào)用物體檢測模型對照片進(jìn)行檢測,返回檢測結(jié)果列表(如圖7)。
這個函數(shù)是從檢測結(jié)果列表中找到我們的目標(biāo)(紅色物體)的名稱和置信度。
通過判斷檢測結(jié)果列表的長度是否大于0來區(qū)分有沒有檢測結(jié)果,沒有檢測結(jié)果則需要跳出判斷重新檢測;如果有檢測結(jié)果,則對檢測結(jié)果進(jìn)行下一步的處理。首先,循環(huán)讀取檢測結(jié)果列表中的每一個檢測結(jié)果字典,分別讀出這個檢測結(jié)果字典中的置信度和物體名稱。然后判斷物體名稱為否是紅色物體,如果符合條件,則找到了我們的目標(biāo)名稱和置信度,中斷循環(huán),準(zhǔn)備下一個環(huán)節(jié)(如圖8)。
本函數(shù)根據(jù)物體檢測中所獲取的矩形檢測框的長度來推算機(jī)器人與目標(biāo)物體的當(dāng)前距離,其中使用的公式為:140×300÷檢測框長度,這里的140是機(jī)器人的最佳夾取距離,300是機(jī)器人在最佳夾取距離時所拍攝的照片中檢測框的橫向長度。
首先,從檢測結(jié)果字典中獲取檢測框的位置列表,這個位置列表中記錄了檢測框的左上和右下兩個點(diǎn)的橫、縱坐標(biāo)值。然后,分別獲取兩個點(diǎn)的橫坐標(biāo)值,計算出檢測框的物體橫向像素大?。M向長度),根據(jù)計算公式得到機(jī)器人與目標(biāo)物體的當(dāng)前距離。接著計算出機(jī)器人到達(dá)物體所需要的前進(jìn)步數(shù),計算公式為[(當(dāng)前距離-140)÷50 ]+1。這里的140仍然是機(jī)器人的最佳夾取距離,50為步幅,計算步數(shù)的基本公式為:步數(shù)=(當(dāng)前距離-夾取距離)÷步幅,最后的1是為配合取整而使用的修正值(如圖9)。
首先,控制機(jī)器人向前運(yùn)動至最佳夾取位置,并夾取物體。然后,控制機(jī)器人先向后移動,再左轉(zhuǎn)90度,再向前,到達(dá)指定的投放位置。最后,控制機(jī)器人放下物體完成垃圾的智能搬運(yùn)工作(如圖10)。
為了調(diào)整攝像頭的最佳拍攝姿態(tài),我們分別對控制攝像頭的兩個舵機(jī)做了下面的設(shè)置,完成對機(jī)器人的初始化。然后,將上面的分步函數(shù)組合,完成主程序(如圖11)。
經(jīng)過多次測試,機(jī)器人均成功夾取了目標(biāo)物體,實(shí)現(xiàn)了垃圾的智能搬運(yùn)。本次我們通過物體檢測識別目標(biāo)物體,并借助程序返回的物體檢測方框數(shù)據(jù)進(jìn)行距離的測算,實(shí)現(xiàn)了機(jī)器人的智能搬運(yùn)。大家也可以結(jié)合其他場景,給物體檢測賦予更多的實(shí)際意義。