朱志偉 張淋 毛翔舶 侯群 周俊
摘? 要:智能物料搬運(yùn)機(jī)器人在化工、醫(yī)藥、物流等行業(yè)中得到了廣泛的應(yīng)用。智能物料搬運(yùn)機(jī)器人可提供定位、移動(dòng)避障、路徑規(guī)劃、物料識(shí)別、二維碼識(shí)別、信息接收等重要功能。其中視覺識(shí)別是機(jī)器人運(yùn)轉(zhuǎn)中非常重要的一個(gè)環(huán)節(jié)。文章基于OpenMV模塊對(duì)物料顏色識(shí)別和二維碼識(shí)別進(jìn)行深入的研究,對(duì)識(shí)別技術(shù)方法進(jìn)行相應(yīng)的改進(jìn)和優(yōu)化。在相應(yīng)場(chǎng)景中拍照選取合適顏色閾值,對(duì)二維碼圖像進(jìn)行預(yù)處理后完成譯碼,提高機(jī)器人識(shí)別的速度和準(zhǔn)確率。
關(guān)鍵詞:視覺識(shí)別;OpenMV;物料搬運(yùn);圖像處理
中圖分類號(hào):TP391.4;TP242 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2023)19-0099-04
Research on Fast Visual Recognition Technology for Material Handling Robot
ZHU Zhiwei, ZHANG Lin, MAO Xiangbo, HOU Qun, ZHOU Jun
(School of Artificial Intelligence, Jianghan University, Wuhan? 430056, China)
Abstract: Intelligent material handling robots have been widely used in industries such as chemical industry, pharmaceutical industry, and logistics industry. Intelligent material handling robots can provide important functions such as positioning, mobile obstacle avoidance, path planning, material identification, QR code identification, and information reception. Visual recognition is a very important part of robot operation. This paper conducts in-depth research on material color identification and QR code identification based on the OpenMV module, and correspondingly improves and optimizes the recognition technology and methods. Select the appropriate color threshold for taking photos in the corresponding scene, preprocess the QR code image, and complete decoding to improve the speed and accuracy of robot recognition.
Keywords: visual recognition; OpenMV; material handling; image processing
0? 引? 言
近年來(lái),大學(xué)生工程訓(xùn)練競(jìng)賽非常熱門,其中便包含智能物流搬運(yùn)賽項(xiàng)。該賽項(xiàng)目的為設(shè)計(jì)物料搬運(yùn)機(jī)器人,其通過(guò)掃描二維碼或Wi-Fi網(wǎng)絡(luò)通信等方式領(lǐng)取搬運(yùn)任務(wù),在指定的工業(yè)場(chǎng)景內(nèi)行走與避障,并按任務(wù)要求將物料搬運(yùn)至指定地點(diǎn)并精準(zhǔn)擺放。物料搬運(yùn)機(jī)器人在生活中是十分常見的項(xiàng)目,運(yùn)用于各行各業(yè)。看似小巧簡(jiǎn)單,卻可以提高效率,節(jié)省人力成本,適應(yīng)對(duì)于人來(lái)說(shuō)的惡劣環(huán)境??梢姡锪蠙C(jī)器人的研究是具有重大意義的。其中,物料搬運(yùn)機(jī)器人在工作場(chǎng)景中獲取相關(guān)信息,抓取運(yùn)送物料都需要依賴于攝像頭的視覺識(shí)別技術(shù)。
本文主要基于大學(xué)生工程訓(xùn)練競(jìng)賽項(xiàng)目,使用低成本、適用性更高的OpenMV模塊,對(duì)于機(jī)器人工作過(guò)程中的物料識(shí)別和二維碼識(shí)別進(jìn)行深入研究。在物料的顏色識(shí)別中利用閾值色塊比對(duì)來(lái)識(shí)別目標(biāo)物料。利用OpenMV模塊內(nèi)置函數(shù)庫(kù)對(duì)二維碼灰度化、中值濾波、二值化、開運(yùn)算處理后進(jìn)行識(shí)別譯碼,提高視覺識(shí)別的準(zhǔn)確率。物料搬運(yùn)機(jī)器人系統(tǒng)組成如圖1所示。
1? 顏色識(shí)別
顏色識(shí)別部分主要是在物料機(jī)器人接受任務(wù)后,移動(dòng)至物料區(qū)進(jìn)行物料分辨抓取。該部分使用到OpenMV模塊。OpenMV是一款可編程攝像頭模塊,內(nèi)置了豐富的數(shù)字圖像處理算法庫(kù)函數(shù),使用單片機(jī)處理器與其接口可以非常容易調(diào)用內(nèi)部庫(kù)函數(shù)。
在比賽中,用到的物料有紅、綠、藍(lán)三種顏色并且它們的形狀大小相同。因此在物料識(shí)別的過(guò)程中主要考慮區(qū)分顏色進(jìn)行識(shí)別物料。在顏色的識(shí)別過(guò)程中,通過(guò)閾值進(jìn)行二值化處理之后,形成簡(jiǎn)潔的二值圖像來(lái)分辨確認(rèn)識(shí)別顏色。
第一步要進(jìn)行的是顏色閾值的選取,需要利用到OpenMV IDE中的閾值編輯器。使用OpenMV攝像頭對(duì)物料進(jìn)行拍照,上傳至閾值編輯器中,得出相對(duì)應(yīng)顏色閾值結(jié)構(gòu)color =(MinL,MaxL,MinA,MaxA,MinB,MaxB),元組里面的數(shù)值分別是LAB的最大值和最小值。首先采集紅色物料的閾值范圍,拖動(dòng)編輯器中LAB值的滑動(dòng)選擇按鈕,使紅色物料在右側(cè)的二進(jìn)制圖像顯示成白色,得出紅色物料的LAB閾值為(44,75,8,77,-44,21)。使用同樣的方法得出綠色物料的LAB閾值為(50,60,-48,-30,15,38)、藍(lán)色物料的LAB閾值為(61,95,-23,-10,-30,-10)。然后利用OpenMV內(nèi)置函數(shù)庫(kù)中的image.find_blods()函數(shù)對(duì)色塊進(jìn)行查找,比對(duì)色塊和相應(yīng)閾值范圍來(lái)確認(rèn)物料顏色。識(shí)別到綠色物料的情況如圖2所示。部分實(shí)驗(yàn)代碼如下:
red_thredshold = (44, 75, 8, 77, -44, 21)
blue_thredshold = (61, 95, -23, -10, -30, -10)
green_thredshold =(50, 60, -48, -30, 15, 38)
img = sensor.snapshot()
color_blobs=img.find_blobs([red_thredshold,blue_thredshold,green_thredshold], x_stride=25, y_stride=50, area_threshold=1000)
#x_stride為查找色塊x方向上最小寬度像素。
#y_stride為查找色塊y方向上最小寬度像素。
#area_threshold為面積閾值,如果被框中面積小于此值,將會(huì)被過(guò)濾。
2? 二維碼識(shí)別
在比賽環(huán)節(jié)中,物料搬運(yùn)機(jī)器人通過(guò)掃描給定的二維碼來(lái)獲取搬運(yùn)任務(wù)的信息。二維碼以黑白相間的方格進(jìn)行存儲(chǔ)信息,可以儲(chǔ)存漢字、數(shù)字、照片等信息,信息儲(chǔ)存量大,保密性和可靠性也很高。為了提高二維碼在識(shí)別過(guò)程中的準(zhǔn)確性和快速性,先對(duì)二維碼進(jìn)行圖像預(yù)處理后再進(jìn)行后續(xù)譯碼步驟。二維碼圖像處理流程如圖3所示。
2.1? 圖像灰度化
普通圖像使用紅(R)、綠(G)、藍(lán)(B)三種基礎(chǔ)色進(jìn)行混合疊加形成各種顏色。該圖像中的每個(gè)像素點(diǎn)均會(huì)占到三個(gè)字節(jié)來(lái)表示顏色的RGB,占用的存儲(chǔ)空間更大。二維碼是由0、1編碼組成的黑白圖像,對(duì)其進(jìn)行灰度化處理后,可以大大減少計(jì)算機(jī)的運(yùn)算量從而提高運(yùn)算速度,并且在識(shí)別過(guò)程中不會(huì)產(chǎn)生任何影響。在OpenMV模塊中可以直接調(diào)用image.GRAYSCALE()函數(shù)拍攝灰度圖像。部分代碼如下:
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)#設(shè)置圖像灰度格式
2.2? 中值濾波
由于成像系統(tǒng)、傳輸介質(zhì)和記錄設(shè)備的不完善,圖像往往會(huì)受到各種噪聲的污染。一般噪聲通常表現(xiàn)為明顯孤立的像素點(diǎn)或像素塊。中值濾波器將處理像素鄰域中的像素使用中值來(lái)代替,使像素的灰度值與周圍鄰域像素比更加接近,從而消除孤立的噪聲點(diǎn),達(dá)到很好的濾波效果。具體方法是使用某種結(jié)構(gòu)的二維滑動(dòng)模板,將模板內(nèi)像素按照像素值的大小進(jìn)行排序,生成單調(diào)的二維數(shù)據(jù)序列。二維中值濾波輸出公式為:
g (x,y) = med{ f (x - i,y - i)},(i,j) ∈ S
其中,f (x,y)、g (x,y)分別表示原始圖像和處理后圖像。S表示模板窗口,通常為3×3,5×5區(qū)域,也可以是不容的形狀,如線狀、圓形、十字形、圓環(huán)形等。
在OpenMV中,通常調(diào)用img.median()函數(shù)運(yùn)行中值濾波。部分代碼如下:
while(True):
clock.tick()
img = sensor.snapshot()
img.median(1, percentile=0.5)
#第一個(gè)參數(shù)“1”為內(nèi)核大小。N對(duì)應(yīng)于((N×2) + 1)2的內(nèi)核大小。
#percentile控制內(nèi)核使用值的百分位數(shù),從N×N鄰域中選擇。
#默認(rèn)情況下使用各像素相鄰的中心替換,即0.5。
2.3? 二值化
二值化處理是指把原本彩色圖像矩陣中的像素點(diǎn)RGB值變成黑色或白色。二值化處理后使原本的顏色范圍從256種精簡(jiǎn)到2種,提高計(jì)算速度。在二值化處理過(guò)程用,使用到大律法,其處理速度更快,能夠較好地保留目標(biāo)物體的形狀,輪廓清晰、容易辨認(rèn)。
在OpenMV的代碼編寫中用到img.binary(thresholds, invert=False)函數(shù),它通過(guò)遍歷灰度圖像中的像素點(diǎn),判斷像素是否位于閾值列表thresholds的范圍內(nèi),將圖像中的所有像素設(shè)置為黑色或白色。thresholds必須為元組列表。對(duì)于灰度圖像,每個(gè)元組中需要設(shè)置最小灰度值、最大灰度值,只考慮落在這些閾值范圍內(nèi)的像素區(qū)域。處理完成后的二值化圖像如圖4所示。
2.4? 形態(tài)學(xué)處理
形態(tài)學(xué)圖像處理的基本操作包括膨脹、腐蝕、開閉操作、TOP-HAT變換、黑帽變換等。主要應(yīng)用于噪聲消除、邊界提取、區(qū)域填充、細(xì)化、粗化等。最常用到的是膨脹和腐蝕。而膨脹和腐蝕的組合便形成了開運(yùn)算和閉運(yùn)算。
本文使用到開運(yùn)算(先腐蝕后膨脹)處理,用于消除圖像中的小物體,在細(xì)長(zhǎng)的點(diǎn)上分離物體,并平滑較大物體的邊界,而不會(huì)顯著改變它們的面積和形狀。
本文實(shí)驗(yàn)代碼利用img.erode(size, threshold=Auto)函數(shù)對(duì)圖像邊緣進(jìn)行侵蝕,從分割區(qū)域的邊緣刪除像素,去除邊緣相鄰處多余的點(diǎn)。其通過(guò)卷積圖像上((size×2) + 1)2像素核來(lái)實(shí)現(xiàn),如相鄰的像素集的總和小于threshold,則對(duì)內(nèi)核中心像素進(jìn)行歸零。size為內(nèi)核的大小。threshold用來(lái)設(shè)置去除相鄰點(diǎn)的個(gè)數(shù),threshold數(shù)值越大,被侵蝕掉的邊緣點(diǎn)越多,邊緣旁邊白色雜點(diǎn)少;數(shù)值越小,被侵蝕掉的邊緣點(diǎn)越少,邊緣旁邊的白色雜點(diǎn)越多。腐蝕處理完后圖像如圖5所示。
利用img.dilate(size, threshold=Auto)函數(shù)對(duì)圖像邊緣進(jìn)行膨脹。threshold用來(lái)設(shè)置去除相鄰點(diǎn)的個(gè)數(shù),threshold數(shù)值越大,邊緣越膨脹;數(shù)值越小,邊緣膨脹的小。通過(guò)開運(yùn)算處理后,圖像更加清晰,更容易識(shí)別。膨脹處理完后圖像如圖6所示。
2.5? 譯碼
在二維碼的譯碼工作中,首先尋找二維碼三個(gè)角的正方形開始定位,定位后獲取符號(hào)圖像。深色于淺色分別為“0”和“1”。然后讀取格式版本信息,根據(jù)模塊的排列規(guī)則讀取符號(hào)字符,恢復(fù)信息的數(shù)據(jù)和糾錯(cuò)碼字。利用糾錯(cuò)碼字檢測(cè)對(duì)應(yīng)的信息,發(fā)現(xiàn)并更改錯(cuò)誤。最后按照模式指示符和字符計(jì)數(shù)指示符劃分?jǐn)?shù)據(jù)碼字,按照模式譯碼翻譯出數(shù)據(jù)字符并輸出結(jié)果。最終二維碼識(shí)別輸出結(jié)果如圖7所示。
在OpenMV中可以直接調(diào)用img.find_qrcodes()函數(shù)進(jìn)行譯碼。部分實(shí)驗(yàn)代碼如下:
while(True):
img=sensor.snapshot()
img.lens_corr(1.8)
for code in img.find_qrcodes():
output_str="%s" % code.payload()
#output_str為二維碼內(nèi)容
3? 結(jié)? 論
本文針對(duì)大學(xué)生工程訓(xùn)練大賽中物料搬運(yùn)項(xiàng)目視覺識(shí)別部分問(wèn)題,對(duì)物料的顏色識(shí)別、二維碼識(shí)別進(jìn)行優(yōu)化改進(jìn)。在顏色識(shí)別的部分,通過(guò)對(duì)圖像處理、拍攝對(duì)應(yīng)環(huán)境下的物料圖像,選取合適的顏色閾值,使識(shí)別更加精準(zhǔn)。在二維碼識(shí)別部分,探討圖像處理過(guò)程和二維碼譯碼步驟,優(yōu)化圖像處理方法完成二維碼快速識(shí)別。提高視覺識(shí)別的準(zhǔn)確率和識(shí)別速度,有利于完成比賽任務(wù),提高比賽成績(jī)。
參考文獻(xiàn):
[1] 夏勝杰,楊昊,艾偉清.基于Arduino單片機(jī)和OpenMV的顏色目標(biāo)定位與跟蹤小車的設(shè)計(jì)與實(shí)現(xiàn) [J].常熟理工學(xué)院學(xué)報(bào),2021,35(5):59-64.
[2] 耿浩楠,周磊,劉新成,等.基于OpenMV的二維碼檢測(cè)技術(shù)在自動(dòng)分揀系統(tǒng)中的應(yīng)用 [J].工業(yè)控制計(jì)算機(jī),2022,35(12):11-13.
[3] 彭洋洋,周苗,陳航.二維碼識(shí)別技術(shù)在快遞簽收中的應(yīng)用 [J].軟件,2019,40(8):49-51.
[4] 胡鈴樟.基于手機(jī)二維碼的倉(cāng)庫(kù)管理系統(tǒng)研究 [J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(3):13+16.
[5] 曾一凡,楊振南,王亞勇.基于STM32的智能物料搬運(yùn)機(jī)器人的設(shè)計(jì) [J].儀器儀表用戶,2023,30(1):9-12.
[6] 張佳路,任彬,趙增旭.基于顏色識(shí)別的智能物料搬運(yùn)機(jī)器人 [J].自動(dòng)化應(yīng)用,2020(1):59-61.
作者簡(jiǎn)介:朱志偉(2001—),男,漢族,湖北孝感人,本科在讀,研究方向:人工智能。
收稿日期:2023-04-07
基金項(xiàng)目:湖北省大學(xué)生創(chuàng)新創(chuàng)業(yè)計(jì)劃項(xiàng)目(S202211072068)