當(dāng)前,絕大多數(shù)第三方快遞公司為縮減成本,取消提供送貨上門(mén)服務(wù),而是將快件暫存在社區(qū)便利店、菜鳥(niǎo)驛站、郵局報(bào)刊亭等第三方平臺(tái),之后由收件人自行到點(diǎn)取件。它以犧牲用戶(hù)的一點(diǎn)小便利性為代價(jià),來(lái)?yè)Q取物流公司的更低配送成本,追求快遞投遞的效率和效益。這為驛站帶來(lái)持續(xù)增長(zhǎng)的業(yè)務(wù)流量,確保了這種商業(yè)模式的可持續(xù)發(fā)展。根據(jù)阿里巴巴公司2019年的財(cái)報(bào)披露,菜鳥(niǎo)驛站的日均服務(wù)包裹量已經(jīng)占阿里巴巴中國(guó)零售平臺(tái)的10%以上。同時(shí),菜鳥(niǎo)驛站還服務(wù)了超過(guò)75%的全球速賣(mài)通訂單和超過(guò)90%的天貓國(guó)際訂單。足可見(jiàn)菜鳥(niǎo)驛站在我們這個(gè)物流大國(guó)的配送環(huán)節(jié)中正在扮演著越來(lái)越重要的角色[1]。
但是,隨著業(yè)務(wù)量的不斷增長(zhǎng),菜鳥(niǎo)驛站所面臨的問(wèn)題也日益明顯:
(1) 用戶(hù)排隊(duì)時(shí)間長(zhǎng):工作日,由于用戶(hù)取件時(shí)間集中在下班后,此時(shí)取件業(yè)務(wù)達(dá)到高峰,用戶(hù)取件的等待時(shí)間過(guò)長(zhǎng),影響用戶(hù)體驗(yàn)。更有快遞包裹量大的驛站,經(jīng)常出現(xiàn)一時(shí)找不到包裹,讓客戶(hù)在旁干等著的情況,影響了用戶(hù)的滿(mǎn)意度。
(2) 人力成本高企:驛站的單件利潤(rùn)較低,主要靠規(guī)模效益盈利。用戶(hù)取件時(shí)間扎堆導(dǎo)致驛站“忙短閑長(zhǎng)”,人力資源配置不均,成本居高不下。
(3) 快件容易被多領(lǐng)誤領(lǐng):目前由于菜鳥(niǎo)驛站的取件業(yè)務(wù)多是人工處理,導(dǎo)致誤領(lǐng)多領(lǐng)、少領(lǐng)錯(cuò)領(lǐng)的情況時(shí)有發(fā)生。然而,更麻煩的是出錯(cuò)之后,難以查證,導(dǎo)致互相推諉指責(zé)。
為解決上述問(wèn)題,本文設(shè)計(jì)了一種基于機(jī)器視覺(jué)的智能快件自提系統(tǒng),用以提高驛站的自動(dòng)化程度,節(jié)省人力,提高效率,減少失誤。
本文所設(shè)計(jì)的智能快遞自取系統(tǒng)主要由快遞貨物呈列架、機(jī)器視覺(jué)矩陣模塊、位置投影提示模塊、語(yǔ)音播報(bào)模塊、掃碼取件二維碼及電腦軟件管理系統(tǒng)組成。其中機(jī)器視覺(jué)矩陣模塊主要由若干個(gè)可以覆蓋不同位置的高清攝像頭協(xié)同組網(wǎng),使之可以擴(kuò)大視野并提高清晰度,讓攝像頭之間相互取長(zhǎng)補(bǔ)短。而位置投影提示模塊主要由投影儀組成,其主要作用就是可以將指示光線(xiàn)投影到對(duì)應(yīng)的快件身上,以幫助取件者快速定位到快件所在位置,使其可以快速取件,省掉尋找快件的耗時(shí)步驟。
系統(tǒng)的工作流程如圖1 所示:
圖1 系統(tǒng)流程框架示意圖
(1) 登記入庫(kù):快遞到達(dá)驛站后,先逐個(gè)掃碼登記入庫(kù)。
(2) 快件上架:紙盒型快件在呈列架上的放置位置可以隨意,但要求帶條形碼的快遞面單需朝外放置。非紙盒的快件(如快遞袋等) 則要求先放入自帶條形碼的隔盒中,然后連同隔盒一起上架,同樣要求條形碼朝外放置。
(3) 快件識(shí)別:當(dāng)快件上架之后,電腦將定期自動(dòng)識(shí)別哪些地方新放置了快件,并能識(shí)別出該快件的條碼、編號(hào)等系列信息。
(4) 用戶(hù)掃碼:當(dāng)用戶(hù)過(guò)來(lái)取件時(shí),只需用手機(jī)掃碼二維碼,系統(tǒng)可以根據(jù)其電話(huà)號(hào)碼等信息關(guān)聯(lián)出該用戶(hù)要取哪些快件,以及這些快件的存放位置坐標(biāo)信息。
(5) 指示取件:電腦控制投影儀將待取快件所在的位置用鮮艷顏色的光線(xiàn)進(jìn)行投影定位,并同步發(fā)出語(yǔ)音提示,通知用戶(hù)去指定的位置取件。如果快件按照指示被正常取走,則系統(tǒng)將該快件的狀態(tài)標(biāo)記為配送完成,并從臨時(shí)庫(kù)中刪除。但如果該快件超時(shí)未取或者錯(cuò)取,系統(tǒng)也將發(fā)出警報(bào),提示用戶(hù)進(jìn)行糾錯(cuò)。
2.1.1 快遞面單的條形碼特點(diǎn)
目前,EMS、中通、圓通等諸多公司的快遞面單上印刷的是Code128 條形碼,它可以表達(dá)ASCII0 到ASCII127 的128個(gè)字符。每個(gè)Code128 條碼由指定的相互間隔的3 個(gè)條形和3個(gè)空白(共六個(gè)單元) 代表一個(gè)字符,每個(gè)字符以一個(gè)條開(kāi)始,到一個(gè)空結(jié)束。即包含:左空白區(qū)、起始符、數(shù)據(jù)符、校驗(yàn)符、終止符、右空白區(qū)。其結(jié)構(gòu)如圖2 所示。
圖2 Code128 條形碼組成實(shí)例
Code128 條形碼的顯著特征是其具備數(shù)量眾多的黑、白相間且平行的條碼,即有多條直線(xiàn),且相互平行。圍繞這兩個(gè)特征,本文提出了改進(jìn)的Hough 變換檢測(cè)算法,配合機(jī)器視覺(jué)圖像處理,可以實(shí)現(xiàn)對(duì)條形碼進(jìn)行快速解碼的功能。
2.1.2 Hough 變換的直線(xiàn)檢測(cè)算法
在本設(shè)計(jì)中,如何低成本的同時(shí)對(duì)多個(gè)一維條形碼進(jìn)行快速識(shí)別是其核心。雖然市面上早已有很成熟的條形碼商業(yè)解碼方案。但它們還大都是要依靠人工來(lái)定位條形碼區(qū)域,然后再由機(jī)器識(shí)別。并不能自主定位,更不能同時(shí)對(duì)多個(gè)條形碼目標(biāo)進(jìn)行識(shí)別。所以對(duì)這種缺少定位且一圖多碼的場(chǎng)景,目前這些成熟的識(shí)別算法和工具還是難以直接移植應(yīng)用的。因而本文就提出了一種基于機(jī)器視覺(jué)的一維條形碼快速識(shí)別算法。
在算法流程上,需分別將原始圖像經(jīng)過(guò):灰度化、二值化、邊緣檢測(cè)、圖像分塊、平行直線(xiàn)簇檢測(cè)、條形碼定位、條形碼解碼等步驟,最終才可以得到解碼后的各個(gè)條形碼。
其中,上述流程中的灰度化、二值化和圖像分塊3 個(gè)步驟均為圖像預(yù)處理部分,其技術(shù)算法都較為成熟,這里不做展開(kāi)贅述。
當(dāng)圖像預(yù)處理和分塊之后,就要檢測(cè)塊內(nèi)是否存在平行直線(xiàn)簇,而在那之前,需先檢查圖片中是否包含直線(xiàn),直線(xiàn)檢測(cè)有很多不同的算法,Hough 變換就是檢測(cè)直線(xiàn)較為經(jīng)典的算法之一。它是一種從直角坐標(biāo)系到極坐標(biāo)系的變換,在表達(dá)式上,一般直線(xiàn)在極坐標(biāo)下可以表示為:
圖3 Hough 變換的對(duì)應(yīng)關(guān)系
θ
表1 Sobel 濾波模板
同時(shí)考慮到對(duì)擁有復(fù)雜背景的圖片用Hough 變換進(jìn)行直線(xiàn)檢測(cè)時(shí),有可能出現(xiàn)直線(xiàn)信息被復(fù)雜背景信息“淹沒(méi)”的情況。因而在本設(shè)計(jì)中改進(jìn)了Hough 變換的算法,增加了背景抑制功能。即引入連通獎(jiǎng)勵(lì)因子來(lái)突出直線(xiàn)特性,區(qū)分背景噪聲。即在進(jìn)行Hough 變換時(shí),根據(jù)其直線(xiàn)的連通性質(zhì)疊加獎(jiǎng)勵(lì)因子。該獎(jiǎng)勵(lì)因子可以隨著連通長(zhǎng)度的增加而不斷累加,即單個(gè)連通鏈條越長(zhǎng),獎(jiǎng)勵(lì)因子的增長(zhǎng)就越快。而一旦遇到連通中斷,則獎(jiǎng)勵(lì)因子歸0,需等待下一個(gè)連通區(qū)域再?gòu)牧阍鲩L(zhǎng)。從圖4 的仿真結(jié)果可以看出,增加獎(jiǎng)勵(lì)因子后的Hough 變換抑制背景噪聲的能力明顯改善,直線(xiàn)信息更加突出和明確。
圖4 改進(jìn)Hough 變換的效果仿真
2.1.3 基于雙重Hough 變換的直線(xiàn)簇檢測(cè)算法
若檢測(cè)區(qū)域中含有Code128 條形碼,那么經(jīng)上述改進(jìn)后的Hough 變換就能檢測(cè)出多條直線(xiàn),對(duì)應(yīng)ρ,( )θ 變換域里面的多個(gè)峰值,且這些峰值在ρ 和θ 的坐標(biāo)下應(yīng)該呈現(xiàn)近似直線(xiàn)的排列方式。此時(shí)對(duì)ρ,( )θ 變換域再進(jìn)行一次Hough 變換,則必定可以出現(xiàn)1 個(gè)極高的峰值。若該檢測(cè)區(qū)域中有N 個(gè)條形碼,則雙重Hough 變換之后也將看到N 個(gè)峰值。峰值的數(shù)量與條形碼的個(gè)數(shù)之間,是存在一一對(duì)應(yīng)關(guān)系的。因而只需簡(jiǎn)單地經(jīng)過(guò)兩次Hough 變換,就可以直接檢測(cè)出該圖像是否有條形碼,有幾個(gè)條形碼了。
2.1.4 條形碼解碼
經(jīng)過(guò)上述步驟檢測(cè)出條形碼之后,再利用公式(1) 的對(duì)應(yīng)關(guān)系很容易就能定位到條形碼的位置,隨后就可以利用現(xiàn)有的成熟識(shí)別算法,解碼出條形碼的信息了。
考慮到菜鳥(niǎo)驛站的規(guī)??纱罂尚?,對(duì)于那些面積比較大的驛站,單攝像頭的拍攝廣度和深度都很難滿(mǎn)足要求,從而必然影響到輸入圖片的角度和精度,不利于條形碼的定位和識(shí)別。因而在本設(shè)計(jì)中的機(jī)器視覺(jué)輸入部分,可以由一個(gè)可旋轉(zhuǎn)可移動(dòng)的超高清攝像頭組成,也可以由多個(gè)次高清攝像頭來(lái)聯(lián)合組網(wǎng),這兩者在本質(zhì)上是一樣的,都能擴(kuò)大系統(tǒng)視野的覆蓋范圍。但這也帶來(lái)了視野重疊和視野缺失的問(wèn)題。對(duì)于該問(wèn)題,本文接下來(lái)就以多攝像頭組網(wǎng)的方式為例,來(lái)給出對(duì)應(yīng)的解決方案。
2.2.1 視野過(guò)覆蓋
當(dāng)各個(gè)攝像頭的覆蓋視野比較充分、互相重疊時(shí),圖像涉及拼接算法。本設(shè)計(jì)針對(duì)此問(wèn)題做了簡(jiǎn)化處理,在過(guò)覆蓋情況下,系統(tǒng)只需分別解碼各個(gè)攝像頭里面的條形碼后進(jìn)行匯總。由于存在視野重疊的情況,則有可能會(huì)有同一個(gè)條形碼在不同的攝像頭想都被解碼的情況。此時(shí)系統(tǒng)匯總后就將發(fā)現(xiàn)有多個(gè)相同編碼的快件等待被登記,但其實(shí)它們都是同一個(gè)條形碼,只不過(guò)被一碼多解了。所以這種情況下,多攝像頭之間的協(xié)作重點(diǎn)是劃分重復(fù)覆蓋區(qū)的條形碼的歸屬問(wèn)題。當(dāng)不止一個(gè)攝像頭能解碼出了同一個(gè)條形碼,為了防止重復(fù)管理,應(yīng)將該條形碼劃歸到它們之中最適合的那個(gè)攝像頭名下進(jìn)行管理。而歸屬的劃分依據(jù),得看誰(shuí)看得更清晰,就歸誰(shuí)名下。本文是根據(jù)該條形碼在各個(gè)攝像頭下所占用區(qū)域的像素?cái)?shù)量大小來(lái)確定,具體的算法為:
假設(shè)各個(gè)攝像頭編號(hào)1~M,攝像頭水平的像素點(diǎn)對(duì)應(yīng)坐標(biāo)軸X 軸,垂直像素點(diǎn)對(duì)應(yīng)坐標(biāo)軸Y 軸。如圖5 所定位到的條形碼的四個(gè)區(qū)域端點(diǎn)分別標(biāo)號(hào)為1~4,其在攝像頭m 中的坐標(biāo)位置表示為(x,y)~(x,y),則該條形碼區(qū)域占用在攝像頭m的像素區(qū)域大小S可以表示為:
其中:
對(duì)于每個(gè)被一碼多解的條形碼,只要分別算出S~S的值,然后劃分到得數(shù)最大的那個(gè)攝像頭名下即可,而其它攝像頭的解碼結(jié)果將被丟棄,防止重復(fù)管理。
圖5 攝像頭重疊覆蓋區(qū)域處理方式
圖6 攝像頭矩陣的拓?fù)潢P(guān)系圖
2.2.2 視野欠覆蓋
在所有攝像頭安裝完畢后,應(yīng)該在系統(tǒng)軟件中給它們配置鄰區(qū)關(guān)系表,以便系統(tǒng)知曉各個(gè)攝像頭之間的拓?fù)潢P(guān)系,誰(shuí)與誰(shuí)互鄰。如示意圖6 所示,其中每個(gè)帶數(shù)字的圓圈代表一個(gè)攝像頭及編號(hào),且實(shí)際也按圖6 中所示拓?fù)溥M(jìn)行布局。則應(yīng)配置8 號(hào)攝像頭的鄰區(qū)為:2、3、4、7、9、12、13、14。
當(dāng)系統(tǒng)在初始配置完成之后,應(yīng)該按照鄰區(qū)關(guān)系配置表,生成鄰區(qū)對(duì)。并對(duì)每個(gè)鄰區(qū)對(duì)累積內(nèi)的重復(fù)條形碼數(shù)目,經(jīng)過(guò)足夠長(zhǎng)的時(shí)間后,若發(fā)現(xiàn)有某些鄰區(qū)對(duì)的累積數(shù)值始終為0,則說(shuō)明這兩個(gè)攝像頭鄰區(qū)對(duì)從未解碼出過(guò)相同的條形碼,那么這兩個(gè)攝像頭之間很可能存在視野盲區(qū)或者解碼盲區(qū),需要重新調(diào)整攝像頭位置以增加它們之間的重疊區(qū)域。
投影提示模塊的作用是幫助取件者(用戶(hù)) 快速定位到待取快件的位置,而不用一個(gè)個(gè)去翻找快件在哪。當(dāng)用戶(hù)到達(dá)驛站進(jìn)行掃碼取件并被系統(tǒng)關(guān)聯(lián)到對(duì)應(yīng)的電話(huà)號(hào)碼后,其名下待取的快件編號(hào)及位置就全部都被調(diào)了出來(lái)。然后系統(tǒng)會(huì)自動(dòng)生成一張帶有可以指示快件所在位置的圖片,由投影儀投射出來(lái)。這張圖片是由大部分的背景色(黑色) 和小部分的鮮艷顏色(紅色、藍(lán)色、綠色等) 組成的。當(dāng)系統(tǒng)正常工作時(shí),鮮艷顏色的光線(xiàn)會(huì)剛好投射在待取包裹身上,用戶(hù)簡(jiǎn)單地根據(jù)光線(xiàn)指示就可以很快地完成取件動(dòng)作。
由于投影儀和攝像頭是兩個(gè)不同的模塊,在初始化之時(shí),需要將攝像頭的空間位置與投影儀的空間位置進(jìn)行映射,以確保攝像頭讀入的條形碼位置和投影儀投射的光線(xiàn)位置沒(méi)有偏差。如有偏差則需校正,某個(gè)條形碼歸入到哪個(gè)攝像頭名下,則它的投影位置信息就由該攝像頭負(fù)責(zé)校正。
最后,投影模塊支持一次性定位多個(gè)快件(同一用戶(hù)可能有多個(gè)待取包裹),也支持同時(shí)定位多個(gè)用戶(hù)的快件(不同用戶(hù)可以同時(shí)并行取件),只需將不同用戶(hù)的快件位置用不同顏色的投影加以區(qū)分即可。當(dāng)然,在投影的同時(shí),系統(tǒng)也會(huì)通過(guò)語(yǔ)音播報(bào)提示用戶(hù),告知顏色信息,快件數(shù)量等情況。
本文測(cè)試環(huán)境為Matlab 2016a,測(cè)試樣本來(lái)源于muenster Barcode DB 數(shù)據(jù)集,隨機(jī)選取數(shù)量100 張3 072*2 048 像素圖片的測(cè)試平均值。單個(gè)條形碼的平均耗時(shí)的對(duì)比結(jié)果如表2 所示,條形碼定位的仿真測(cè)試結(jié)果如圖7 所示:根據(jù)菜鳥(niǎo)驛站門(mén)店的實(shí)測(cè)數(shù)據(jù),該抽樣站點(diǎn)熟練工的平均單個(gè)快遞的尋找時(shí)間為10 秒以上。所以可以看出,本文所用解碼方法的耗時(shí)相比于一般算法是有優(yōu)勢(shì)的,而相比于人工定位的方式,其定位耗時(shí)更是可以忽略不計(jì),優(yōu)勢(shì)明顯。
表2 解碼耗時(shí)仿真結(jié)果
圖7 條形碼定位的仿真測(cè)試結(jié)果
(1) 目前菜鳥(niǎo)驛站等快件第三方暫存平臺(tái)的自動(dòng)化程度還比較低,存在成本高,效率低下,容易出錯(cuò)等問(wèn)題。
(2) 本文所設(shè)計(jì)的系統(tǒng)通過(guò)成本較低的攝像頭+電腦+投影儀的設(shè)備,配合一定的算法就可以提高效率降低成本,并且有助于減少錯(cuò)誤,一舉多得。