□ 沈凡超 □ 李 寧 □ 薛茜藝
臺(tái)州學(xué)院 航空工程學(xué)院 浙江臺(tái)州 318000
在我國(guó),倉(cāng)儲(chǔ)物流逐漸成為電子商務(wù)流的中流砥柱。雙十一等重大購(gòu)物時(shí)間節(jié)點(diǎn)出現(xiàn)嚴(yán)重爆倉(cāng)現(xiàn)象后,我國(guó)物流行業(yè)發(fā)展滯后與電子商務(wù)發(fā)展過快的矛盾凸顯[1-3]。倉(cāng)儲(chǔ)物流的進(jìn)貨、出貨屬于復(fù)雜程度極高的隨機(jī)事件,需要人和機(jī)器的緊密配合[4-5],并充分發(fā)揮人腦和機(jī)器運(yùn)作的特點(diǎn),對(duì)煩瑣重復(fù)的工作進(jìn)行識(shí)別、統(tǒng)計(jì)、處理,直觀地將整個(gè)倉(cāng)庫(kù)的運(yùn)行狀態(tài)有效呈現(xiàn)在管理人員面前。作為管理人員,主要的工作是處理不在預(yù)期之內(nèi)的突發(fā)狀況,以及根據(jù)上位計(jì)算機(jī)儲(chǔ)存的數(shù)據(jù)挖掘有效信息,提出更多的改進(jìn)方案,以不斷提升整個(gè)倉(cāng)儲(chǔ)物流的流暢程度和自動(dòng)化程度[6-10]。
基于圖像識(shí)別的自動(dòng)倉(cāng)儲(chǔ)管理系統(tǒng)通過攝像頭拍照,將圖像信息儲(chǔ)存到樹莓派單板計(jì)算機(jī)的文件中。通過特征對(duì)比,得出物品信息,將數(shù)據(jù)傳送至上位計(jì)算機(jī)進(jìn)行人機(jī)交互,并進(jìn)行判斷。在出現(xiàn)未知狀況及可預(yù)判的錯(cuò)誤時(shí),進(jìn)行報(bào)警。在有可能出錯(cuò)或者出錯(cuò)的第一時(shí)間,通過串口通信將信息發(fā)送至上位計(jì)算機(jī),提醒工作人員進(jìn)行處理,從而實(shí)現(xiàn)人和機(jī)器之間交互工作的無縫連接,確保整個(gè)倉(cāng)庫(kù)的合理運(yùn)作。
基于圖像識(shí)別的自動(dòng)倉(cāng)儲(chǔ)管理系統(tǒng)采用機(jī)器視覺代替人工識(shí)別,管理倉(cāng)庫(kù)進(jìn)出貨物。通過串口通信將識(shí)別的數(shù)據(jù)發(fā)送至上位計(jì)算機(jī),在人機(jī)交互界面上實(shí)時(shí)進(jìn)行顯示。進(jìn)出貨結(jié)束后,將數(shù)據(jù)儲(chǔ)存,根據(jù)數(shù)據(jù)生成相應(yīng)表格,直觀體現(xiàn)倉(cāng)庫(kù)一天的進(jìn)出貨狀態(tài)。
開始工作時(shí),上位計(jì)算機(jī)向樹莓派單板計(jì)算機(jī)發(fā)送拍攝指令,使整個(gè)系統(tǒng)開始運(yùn)行。樹莓派單板計(jì)算機(jī)收到指令后,打開攝像頭拍攝圖片,并將拍攝到的圖片與目標(biāo)目錄下的圖片進(jìn)行對(duì)比。目標(biāo)目錄下的圖片分為兩類,一類是倉(cāng)庫(kù)內(nèi)所有物品的圖片信息,一類是當(dāng)天訂單的物品信息。樹莓派單板計(jì)算機(jī)對(duì)識(shí)別到的圖片信息進(jìn)行對(duì)比后,判斷是否與訂單圖片信息相符。如果不相符,那么向管理人員發(fā)出警報(bào),以便管理人員進(jìn)行處理,避免隨著時(shí)間的積累而引起更大的錯(cuò)誤。上位計(jì)算機(jī)接收到樹莓派單板計(jì)算機(jī)發(fā)送的計(jì)算信息后,將計(jì)算信息實(shí)時(shí)反饋至人機(jī)交互界面,便于工作人員查看。上位計(jì)算機(jī)對(duì)一天內(nèi)接收到的數(shù)據(jù)進(jìn)行儲(chǔ)存,在當(dāng)天結(jié)束時(shí)對(duì)數(shù)據(jù)進(jìn)行匯總,并以圖表的形式對(duì)倉(cāng)庫(kù)一天的進(jìn)出貨量進(jìn)行展示。整體設(shè)計(jì)方案如圖1所示。
▲圖1 整體設(shè)計(jì)方案
樹莓派單板計(jì)算機(jī)在讀取規(guī)定目錄下存放的圖片特征后,對(duì)攝像頭拍攝到的照片進(jìn)行特征對(duì)比,并根據(jù)對(duì)比結(jié)果對(duì)拍攝到的物品進(jìn)行分類。
樹莓派單板計(jì)算機(jī)端連接采用通用串行總線2.0接口,傳輸速率為9 600 bit/s,庫(kù)的包含和通信配置程序如圖2所示。
▲圖2 庫(kù)包含和通信配置程序
配置完串口通信參數(shù)之后,采取樹莓派單板計(jì)算機(jī)等待上位計(jì)算機(jī)串口發(fā)送指令,然后進(jìn)行拍照的方式,而不是一直打開攝像頭,規(guī)避攝像頭一直打開容易誤識(shí)別和功耗加大所帶來的不穩(wěn)定性。用ser.readall()讀取上位計(jì)算機(jī)發(fā)送來的消息,并將讀取到的消息賦給response。在接下來的程序中判斷response的字符串長(zhǎng)度,當(dāng)response的字符串長(zhǎng)度為11時(shí),打開攝像頭,將拍攝到的圖片儲(chǔ)存為test00.png文件,保存至樹莓派單板計(jì)算機(jī)的/home/pi/Pictures文件夾中。拍攝完成后,向上位機(jī)發(fā)送字符串$OK#,并關(guān)閉攝像頭。樹莓派單板計(jì)算機(jī)與上位計(jì)算機(jī)之間的通信協(xié)議程序如圖3所示。
▲圖3 樹莓派單板計(jì)算機(jī)與上位計(jì)算機(jī)通信協(xié)議程序
拍攝圖片與目標(biāo)圖片對(duì)比的流程如圖4所示。
▲圖4 拍攝圖片與目標(biāo)圖片對(duì)比流程
首先提取拍攝的圖片特征,并賦給變量query。然后使用SIFT算法檢查圖像的關(guān)鍵點(diǎn)和描述符,并創(chuàng)建FLANN匹配器,對(duì)變量query與特征數(shù)據(jù)文件的數(shù)據(jù)進(jìn)行匹配。為了清除錯(cuò)誤匹配,舍棄小于0.7的匹配結(jié)果。最后輸出每張圖片與目標(biāo)圖片的匹配數(shù)目,獲取最多匹配數(shù)目的圖片。拍攝圖片與目標(biāo)圖片對(duì)比程序如圖5所示。
▲圖5 拍攝圖片與目標(biāo)圖片對(duì)比程序
完成拍攝圖片與目標(biāo)圖片對(duì)比以后,將識(shí)別結(jié)果發(fā)送至上位計(jì)算機(jī),相應(yīng)的程序如圖6所示。
▲圖6 對(duì)比結(jié)果發(fā)送上位計(jì)算機(jī)程序
上位計(jì)算機(jī)人機(jī)交互界面主要操作流程如圖7所示。填入串口名稱,點(diǎn)擊“確認(rèn)”,并點(diǎn)擊“串口未連接”,上位計(jì)算機(jī)會(huì)對(duì)串口進(jìn)行連接,判斷串口名是否準(zhǔn)確。若不準(zhǔn)確,會(huì)觸發(fā)異常,使程序退出。對(duì)于樹莓派單板計(jì)算機(jī)傳送來的信息,可以按需求保存。保存時(shí)新建文件,文件類型為文本文件,文件由內(nèi)置算法進(jìn)行命名,不需要改動(dòng)。如需保存新的儲(chǔ)存內(nèi)容,則可以保存到新建的文件中。上位計(jì)算機(jī)顯示界面還有一個(gè)窗口,用于自動(dòng)獲取串口數(shù)據(jù),可以對(duì)串口數(shù)據(jù)實(shí)時(shí)更新顯示,便于管理人員或者操作人員查看。除串口傳送數(shù)據(jù)的實(shí)時(shí)顯示外,還可以在特定的時(shí)間和特定的運(yùn)行狀態(tài)下單次獲取串口數(shù)據(jù)。點(diǎn)擊“單次獲取”,選中“單次獲取串口數(shù)據(jù)”單選框后,每次點(diǎn)擊“單次獲取”時(shí),會(huì)發(fā)送串口數(shù)據(jù)/r/n,以獲取串口另一端發(fā)送來的數(shù)據(jù)。
▲圖7 上位計(jì)算機(jī)人機(jī)交互界面操作流程
人機(jī)交互界面程序主要分為串口連接和串口中斷兩部分。串口連接流程如圖8所示,主要邏輯為判斷串口是否打開。若串口未打開,則打開串口,并注冊(cè)串口中斷,串口中斷為一個(gè)中斷事件。
▲圖8 串口連接流程
串口接收的字符采用UTF-8字符集進(jìn)行表示。字符集是將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符的字典,儲(chǔ)存格式為鍵值對(duì)格式,不同的字符集有相對(duì)應(yīng)的編碼規(guī)則,目前使用相對(duì)較多的字符集有ASCII碼字符集、GBK字符集、UTF-8字符集。其中,UTF-8字符集囊括的字符范圍比較廣,涵蓋了英語字符、阿拉伯語字符、漢字、表情字符等。大家較為熟悉的ASCII碼字符集相比UTF-8字符集,雖然編碼規(guī)則較為簡(jiǎn)單,但是囊括的字符很少,標(biāo)準(zhǔn)ASCII碼字符集總共的編碼為128個(gè),包括32個(gè)通用控制符、10個(gè)十進(jìn)制數(shù)碼、52個(gè)英語大小寫字母、34個(gè)專用符號(hào)。
字符集不同,編碼規(guī)則不一樣,每個(gè)字符所代表的二進(jìn)制數(shù)據(jù)也不同。若傳輸數(shù)據(jù)時(shí)所用的是ASCII碼字符集,而接收的是UTF-8字符集,那么將會(huì)出現(xiàn)亂碼的情況,因此在傳輸數(shù)據(jù)時(shí),均采用UTF-8字符集來轉(zhuǎn)換。
上位計(jì)算機(jī)與樹莓派單板計(jì)算機(jī)的通信界面分別如圖9、圖10所示,由虛擬串口實(shí)現(xiàn)。由于樹莓派單板計(jì)算機(jī)串口配置傳輸速率固定為115 200 bit/s,因此在主要的串口信息配置時(shí)只需配置串口名稱即可。系統(tǒng)獲取數(shù)據(jù)分為單次獲取與連續(xù)獲取,默認(rèn)為連續(xù)獲取。進(jìn)行連續(xù)獲取時(shí),每次串口數(shù)據(jù)傳輸時(shí)會(huì)自動(dòng)觸發(fā)串口中斷,繼而進(jìn)行串口中斷操作。單次獲取時(shí),需要選中“單次獲取”單選框,這樣串口中斷操作會(huì)判斷IsSingle字段,當(dāng)其為true時(shí)代表為單次獲取。單次獲取數(shù)據(jù)相應(yīng)的程序如圖11所示。
▲圖9 上位計(jì)算機(jī)通信界面
▲圖10 樹莓派單板計(jì)算機(jī)通信界面
單次獲取也可以創(chuàng)建圖表數(shù)據(jù),主要作用在于設(shè)備出現(xiàn)故障時(shí)協(xié)助進(jìn)行調(diào)試。進(jìn)行單次獲取時(shí),上位計(jì)算機(jī)先發(fā)送數(shù)據(jù)/r/n。樹莓派單板計(jì)算機(jī)獲取該數(shù)據(jù)后進(jìn)行數(shù)據(jù)采集,并反饋采集結(jié)果。
上位計(jì)算機(jī)保存信息的目的是方便后期產(chǎn)品數(shù)據(jù)查看。點(diǎn)擊上位計(jì)算機(jī)界面右上角的“文件”,然后點(diǎn)擊“保存”,便可以將樹莓派單板計(jì)算機(jī)一天發(fā)送的信息以文本文件格式儲(chǔ)存在特定的文件夾中。保存文件相應(yīng)的程序如圖12所示。
▲圖11 單次獲取數(shù)據(jù)程序
上位計(jì)算機(jī)保存文件采用文件流的方法,若點(diǎn)擊“保存”,則會(huì)默認(rèn)保存到程序運(yùn)行的地址,程序運(yùn)行地址由AppDomain.CurrentDomain.BaseDirectory獲取。這在本質(zhì)上是程序集的一種操作,如果系統(tǒng)不是視窗操作系統(tǒng),那么無法實(shí)現(xiàn)這一功能。
文件流選擇鏈表形式,算法采用B+樹算法。文件流傳輸完畢后,會(huì)釋放到相應(yīng)的硬盤中??紤]到數(shù)據(jù)庫(kù)軟件并非每臺(tái)計(jì)算機(jī)都安裝,因此以文本文件格式進(jìn)行保存。
單擊上位計(jì)算機(jī)界面右上角的“視圖”后,選擇餅狀圖,可基于接收到的數(shù)據(jù)自動(dòng)生成餅狀圖,充分展示各類出入庫(kù)物品的數(shù)量、時(shí)間及其比例關(guān)系。上位計(jì)算機(jī)生成圖表界面如圖13所示。
生成圖表的程序分為兩步,第一步是主頁(yè)面跳出圖表頁(yè)面,第二步是圖表頁(yè)面數(shù)據(jù)顯示,相應(yīng)的程序如圖14所示。
圖表分為三類,分別為折線圖、柱狀圖、餅狀圖。每種圖表的調(diào)用方法都是兩步操作,即顯示圖表界面與修改圖表類型,相應(yīng)的程序如圖15所示。
▲圖12 保存文件程序
▲圖13 上位計(jì)算機(jī)生成圖表界面
▲圖14 生成圖表程序
在圖表的配置界面中,由于變量只有數(shù)量,因此在配置時(shí)只配置一個(gè)Serial。在圖表中設(shè)置相應(yīng)的圖表樣式,包括顏色、線段、圖標(biāo)、橫坐標(biāo)、縱坐標(biāo)等,可以適應(yīng)三種不同類型圖表的轉(zhuǎn)換。
▲圖15 調(diào)用圖表程序
筆者基于圖像識(shí)別技術(shù)對(duì)自動(dòng)倉(cāng)儲(chǔ)管理系統(tǒng)進(jìn)行了設(shè)計(jì)開發(fā)。通過上位計(jì)算機(jī)和樹莓派單板計(jì)算機(jī),采用python語言,基于OpenCV實(shí)現(xiàn)用機(jī)器代替人工進(jìn)行煩瑣復(fù)雜的進(jìn)出貨物識(shí)別和統(tǒng)計(jì)工作,降低了出錯(cuò)概率,提高了倉(cāng)儲(chǔ)系統(tǒng)的工作效率?;趫D像識(shí)別開發(fā)自動(dòng)倉(cāng)儲(chǔ)管理系統(tǒng),是倉(cāng)儲(chǔ)物流信息化管理的一次重要探索,對(duì)倉(cāng)儲(chǔ)物流的發(fā)展具有重要意義。