舒 慧,張 融,李 皓,楊世昌
(1.武昌工學院智能制造學院,湖北 武漢 430065;2.綠色風機制造湖北協同創新中心,湖北 武漢 430065)
隨著物流行業的蓬勃發展,條碼被廣泛應用于快遞物流產品的傳輸、識別、記錄等方面,舊的條碼標識依賴人工較多,受舊識別技術、自身速度等因素的限制,識別速度過慢,工作效率過低[1-2]。針對這一問題,可以設計一種基于機器視覺和工業機器人的快速分揀自動控制系統。
機器視覺系統采集條碼信息時,通過高清攝像頭采集快遞物流產品的圖形、尺寸、質量等信息,發送到計算機中進行圖像處理和識別,再將識別結果與產品特征參數和物流信息一起發送到執行單元,以此來實現視覺系統和工業機器人對目標物的有效信息的快速識別,以及對目標物的動態追蹤和抓取分揀,與以往人工稱重、人工復檢相比,可靠性和工作效率大大提高[3]。
本文研究的是基于機器視覺技術的分揀系統設計,針對物流線上出現的不同物品,進行跟蹤拍照、掃碼識別、區塊分揀。
具體工作過程是將輸送帶上的快遞包裹運送至視覺檢測處,激活拍照傳感器,輸送帶停止傳送,智能相機根據外部信號觸發拍照,獲取靜止狀態下當前快遞包裹的圖片信息,視覺系統通過圖像識別,將快遞包裹的位姿進行提取和識別,再將識別結果傳遞給機械臂,從而實現快遞包裹的自動分揀,具體工作流程如圖1 所示。

圖1 快遞分揀視覺系統的工作流程
硬件設備:樹莓派博通BCM2837、工業相機HV3808、筆記本電腦、USB 串口通信線、網線。
軟件環境:Python3.7、VS code 集成開發環境(Windows x64 User Installer 版本)、第三方Python庫(QRcode 庫、Pyzbar 庫和Pillow 庫)、VNC 軟件、File Zilla 軟件。
圖像處理是指利用計算機算法,對圖像進行分析運算的處理技術,包括圖像的存儲、表示、提取、運算、增強、恢復和解譯等[4]。
目前,快遞信息通常采用條形碼或者二維碼的形式進行承載,本文主要對二維碼的圖像處理進行分析研究,具體處理流程如下:①圖像獲取與存儲;②加載圖像數據至內存并存盤;③操作、增強和復原,即圖像轉換(二值化、灰度化)、圖像增強(清晰化處理)、圖像去噪及復原;④圖像分割;⑤信息提取與表示;⑥圖像理解/圖像結束,即圖像分類、對象識別。
本文基于Python 編寫了一套程序來實現對快遞二維碼圖像的識別處理,以樹莓派作為微控制器,使用Python+OpenCV 庫編程[5-6],其中,部分程序如下所示:
加載測試所需要的庫
import cv2
import time
from PIL import Image
from pyzbar import pyzbar
提取二維碼邊框并繪出
def decodeDisplay(image):
barcodes=pyzbar.decode(image)
for barcode in barcodes:
# 提取二維碼的邊界框的位置,畫出圖像中條形碼的邊界框
(x,y,w,h)=barcode.rect
cv2.rectangle(image, (x, y), (x + w, y + h),(225,0,0),2)
提取二維碼數據為字節對象并轉換成字符串
barcodeData=barcode.data.decode("utf-8")
barcodeType=barcode.type
# 繪出圖像上二維碼的數據和條形碼類型
text = "{} ({})".format(barcodeData,barcodeType)
cv2.putText(image, text, (x-200, y - 10),cv2.FONT_HERSHEY_SIMPLEX,1.2,(255,136,0),2)
向終端打印二維碼數據和條形碼類型
value=barcode.data.decode("utf-8")
print("[INFO] Found {} barcode:{}".format(barcodeType,barcodeData))
if value=='Beijing':
print(該快遞包裹需要分發到北京地區.")
elif value=='Shenzhen':
print(該快遞包裹需要分發到深圳地區.")elif value=='Shanghai':
print(該快遞包裹需要分發到上海地區.")
else:
print(未找到該快遞包裹需要分發的區域.")
return image
設置圖像捕獲設備參數和指令
def camera(cap):
print('請把含二維碼圖片放置攝像頭正下方.')
print('開始捕獲圖像,按空格鍵確認拍照,ESC 鍵關閉窗口')
width=640
height=480
cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)
while True:
# 捕獲視頻幀
ret,frame=cap.read()
image=frame.copy()
# 實時顯示二維碼
img=decodeDisplay(frame)
cv2.imshow('camera',img)
# 保持畫面持續
key=cv2.waitKey(1)
# 空格鍵保存
if key==ord(""):
cv2.imwrite(".image/image.png",image)
#Esc 退出
if key==27:
break
# 關閉攝像頭
# 關閉窗口
cap.release()
cv2.destroyAllWindows()
# 主程序入口
圖像捕獲設備的連接
if__name__=="__main__":
#0: 筆記本內置攝像頭1:USB 攝像頭
cap=cv2.VideoCapture(1)
video="http://admin:admin@192.168.31.177:8081/"
# 此處@后的ipv4 地址需要改為app 提供的地址
cap=cv2.VideoCapture(video)
while True:
# 開始捕獲圖像camera(cap)
# 二維碼解碼
time.sleep(1)
本文所設計的視覺分揀系統使用工業相機來獲取快遞二維碼的圖像,經過灰度化、二值化、去噪、增強、分割、提取等一系列圖像處理后,得到快遞二維碼的信息,再使用MODBUS TCP/IP 協議將所獲得的信息發送至工業機器人,由工業機器人進行分類分揀。
仿真測試結果如圖2—圖4 所示。

圖2 深圳快遞

圖3 上海快遞

圖4 北京快遞
通過此次研究與分析,證明了利用機器視覺技術識別二維碼實現快遞分揀是切實可行的,采用工業相機實時獲取快遞二維碼圖像,再對圖像進行識別處理、提取信息,并將獲得的信息傳遞給機器人,從而對快遞進行分類。機器視覺技術具有識別速度快、準確率高、抗干擾性強的優點,且此方案設計結構簡單、便于組裝,極大地提高了快遞分揀效率,降低了人工成本。可以預見,機器視覺技術在傳統物流行業將發揮越來越大的作用。