朱志偉 張淋 毛翔舶 侯群 周俊



摘? 要:智能物料搬運機器人在化工、醫藥、物流等行業中得到了廣泛的應用。智能物料搬運機器人可提供定位、移動避障、路徑規劃、物料識別、二維碼識別、信息接收等重要功能。其中視覺識別是機器人運轉中非常重要的一個環節。文章基于OpenMV模塊對物料顏色識別和二維碼識別進行深入的研究,對識別技術方法進行相應的改進和優化。在相應場景中拍照選取合適顏色閾值,對二維碼圖像進行預處理后完成譯碼,提高機器人識別的速度和準確率。
關鍵詞:視覺識別;OpenMV;物料搬運;圖像處理
中圖分類號:TP391.4;TP242 文獻標識碼:A 文章編號: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? 引? 言
近年來,大學生工程訓練競賽非常熱門,其中便包含智能物流搬運賽項。該賽項目的為設計物料搬運機器人,其通過掃描二維碼或Wi-Fi網絡通信等方式領取搬運任務,在指定的工業場景內行走與避障,并按任務要求將物料搬運至指定地點并精準擺放。物料搬運機器人在生活中是十分常見的項目,運用于各行各業。看似小巧簡單,卻可以提高效率,節省人力成本,適應對于人來說的惡劣環境。可見,物料機器人的研究是具有重大意義的。其中,物料搬運機器人在工作場景中獲取相關信息,抓取運送物料都需要依賴于攝像頭的視覺識別技術。
本文主要基于大學生工程訓練競賽項目,使用低成本、適用性更高的OpenMV模塊,對于機器人工作過程中的物料識別和二維碼識別進行深入研究。在物料的顏色識別中利用閾值色塊比對來識別目標物料。利用OpenMV模塊內置函數庫對二維碼灰度化、中值濾波、二值化、開運算處理后進行識別譯碼,提高視覺識別的準確率。物料搬運機器人系統組成如圖1所示。
1? 顏色識別
顏色識別部分主要是在物料機器人接受任務后,移動至物料區進行物料分辨抓取。該部分使用到OpenMV模塊。OpenMV是一款可編程攝像頭模塊,內置了豐富的數字圖像處理算法庫函數,使用單片機處理器與其接口可以非常容易調用內部庫函數。
在比賽中,用到的物料有紅、綠、藍三種顏色并且它們的形狀大小相同。因此在物料識別的過程中主要考慮區分顏色進行識別物料。在顏色的識別過程中,通過閾值進行二值化處理之后,形成簡潔的二值圖像來分辨確認識別顏色。
第一步要進行的是顏色閾值的選取,需要利用到OpenMV IDE中的閾值編輯器。使用OpenMV攝像頭對物料進行拍照,上傳至閾值編輯器中,得出相對應顏色閾值結構color =(MinL,MaxL,MinA,MaxA,MinB,MaxB),元組里面的數值分別是LAB的最大值和最小值。首先采集紅色物料的閾值范圍,拖動編輯器中LAB值的滑動選擇按鈕,使紅色物料在右側的二進制圖像顯示成白色,得出紅色物料的LAB閾值為(44,75,8,77,-44,21)。使用同樣的方法得出綠色物料的LAB閾值為(50,60,-48,-30,15,38)、藍色物料的LAB閾值為(61,95,-23,-10,-30,-10)。然后利用OpenMV內置函數庫中的image.find_blods()函數對色塊進行查找,比對色塊和相應閾值范圍來確認物料顏色。識別到綠色物料的情況如圖2所示。部分實驗代碼如下:
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為面積閾值,如果被框中面積小于此值,將會被過濾。
2? 二維碼識別
在比賽環節中,物料搬運機器人通過掃描給定的二維碼來獲取搬運任務的信息。二維碼以黑白相間的方格進行存儲信息,可以儲存漢字、數字、照片等信息,信息儲存量大,保密性和可靠性也很高。為了提高二維碼在識別過程中的準確性和快速性,先對二維碼進行圖像預處理后再進行后續譯碼步驟。二維碼圖像處理流程如圖3所示。
2.1? 圖像灰度化
普通圖像使用紅(R)、綠(G)、藍(B)三種基礎色進行混合疊加形成各種顏色。該圖像中的每個像素點均會占到三個字節來表示顏色的RGB,占用的存儲空間更大。二維碼是由0、1編碼組成的黑白圖像,對其進行灰度化處理后,可以大大減少計算機的運算量從而提高運算速度,并且在識別過程中不會產生任何影響。在OpenMV模塊中可以直接調用image.GRAYSCALE()函數拍攝灰度圖像。部分代碼如下:
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)#設置圖像灰度格式
2.2? 中值濾波
由于成像系統、傳輸介質和記錄設備的不完善,圖像往往會受到各種噪聲的污染。一般噪聲通常表現為明顯孤立的像素點或像素塊。中值濾波器將處理像素鄰域中的像素使用中值來代替,使像素的灰度值與周圍鄰域像素比更加接近,從而消除孤立的噪聲點,達到很好的濾波效果。具體方法是使用某種結構的二維滑動模板,將模板內像素按照像素值的大小進行排序,生成單調的二維數據序列。二維中值濾波輸出公式為:
g (x,y) = med{ f (x - i,y - i)},(i,j) ∈ S
其中,f (x,y)、g (x,y)分別表示原始圖像和處理后圖像。S表示模板窗口,通常為3×3,5×5區域,也可以是不容的形狀,如線狀、圓形、十字形、圓環形等。
在OpenMV中,通常調用img.median()函數運行中值濾波。部分代碼如下:
while(True):
clock.tick()
img = sensor.snapshot()
img.median(1, percentile=0.5)
#第一個參數“1”為內核大小。N對應于((N×2) + 1)2的內核大小。
#percentile控制內核使用值的百分位數,從N×N鄰域中選擇。
#默認情況下使用各像素相鄰的中心替換,即0.5。
2.3? 二值化
二值化處理是指把原本彩色圖像矩陣中的像素點RGB值變成黑色或白色。二值化處理后使原本的顏色范圍從256種精簡到2種,提高計算速度。在二值化處理過程用,使用到大律法,其處理速度更快,能夠較好地保留目標物體的形狀,輪廓清晰、容易辨認。
在OpenMV的代碼編寫中用到img.binary(thresholds, invert=False)函數,它通過遍歷灰度圖像中的像素點,判斷像素是否位于閾值列表thresholds的范圍內,將圖像中的所有像素設置為黑色或白色。thresholds必須為元組列表。對于灰度圖像,每個元組中需要設置最小灰度值、最大灰度值,只考慮落在這些閾值范圍內的像素區域。處理完成后的二值化圖像如圖4所示。
2.4? 形態學處理
形態學圖像處理的基本操作包括膨脹、腐蝕、開閉操作、TOP-HAT變換、黑帽變換等。主要應用于噪聲消除、邊界提取、區域填充、細化、粗化等。最常用到的是膨脹和腐蝕。而膨脹和腐蝕的組合便形成了開運算和閉運算。
本文使用到開運算(先腐蝕后膨脹)處理,用于消除圖像中的小物體,在細長的點上分離物體,并平滑較大物體的邊界,而不會顯著改變它們的面積和形狀。
本文實驗代碼利用img.erode(size, threshold=Auto)函數對圖像邊緣進行侵蝕,從分割區域的邊緣刪除像素,去除邊緣相鄰處多余的點。其通過卷積圖像上((size×2) + 1)2像素核來實現,如相鄰的像素集的總和小于threshold,則對內核中心像素進行歸零。size為內核的大小。threshold用來設置去除相鄰點的個數,threshold數值越大,被侵蝕掉的邊緣點越多,邊緣旁邊白色雜點少;數值越小,被侵蝕掉的邊緣點越少,邊緣旁邊的白色雜點越多。腐蝕處理完后圖像如圖5所示。
利用img.dilate(size, threshold=Auto)函數對圖像邊緣進行膨脹。threshold用來設置去除相鄰點的個數,threshold數值越大,邊緣越膨脹;數值越小,邊緣膨脹的小。通過開運算處理后,圖像更加清晰,更容易識別。膨脹處理完后圖像如圖6所示。
2.5? 譯碼
在二維碼的譯碼工作中,首先尋找二維碼三個角的正方形開始定位,定位后獲取符號圖像。深色于淺色分別為“0”和“1”。然后讀取格式版本信息,根據模塊的排列規則讀取符號字符,恢復信息的數據和糾錯碼字。利用糾錯碼字檢測對應的信息,發現并更改錯誤。最后按照模式指示符和字符計數指示符劃分數據碼字,按照模式譯碼翻譯出數據字符并輸出結果。最終二維碼識別輸出結果如圖7所示。
在OpenMV中可以直接調用img.find_qrcodes()函數進行譯碼。部分實驗代碼如下:
while(True):
img=sensor.snapshot()
img.lens_corr(1.8)
for code in img.find_qrcodes():
output_str="%s" % code.payload()
#output_str為二維碼內容
3? 結? 論
本文針對大學生工程訓練大賽中物料搬運項目視覺識別部分問題,對物料的顏色識別、二維碼識別進行優化改進。在顏色識別的部分,通過對圖像處理、拍攝對應環境下的物料圖像,選取合適的顏色閾值,使識別更加精準。在二維碼識別部分,探討圖像處理過程和二維碼譯碼步驟,優化圖像處理方法完成二維碼快速識別。提高視覺識別的準確率和識別速度,有利于完成比賽任務,提高比賽成績。
參考文獻:
[1] 夏勝杰,楊昊,艾偉清.基于Arduino單片機和OpenMV的顏色目標定位與跟蹤小車的設計與實現 [J].常熟理工學院學報,2021,35(5):59-64.
[2] 耿浩楠,周磊,劉新成,等.基于OpenMV的二維碼檢測技術在自動分揀系統中的應用 [J].工業控制計算機,2022,35(12):11-13.
[3] 彭洋洋,周苗,陳航.二維碼識別技術在快遞簽收中的應用 [J].軟件,2019,40(8):49-51.
[4] 胡鈴樟.基于手機二維碼的倉庫管理系統研究 [J].網絡安全技術與應用,2014(3):13+16.
[5] 曾一凡,楊振南,王亞勇.基于STM32的智能物料搬運機器人的設計 [J].儀器儀表用戶,2023,30(1):9-12.
[6] 張佳路,任彬,趙增旭.基于顏色識別的智能物料搬運機器人 [J].自動化應用,2020(1):59-61.
作者簡介:朱志偉(2001—),男,漢族,湖北孝感人,本科在讀,研究方向:人工智能。
收稿日期:2023-04-07
基金項目:湖北省大學生創新創業計劃項目(S202211072068)