劉奧卓, 曹煜輝, 周岳斌
(湖北文理學(xué)院機(jī)械工程學(xué)院, 湖北 襄陽(yáng) 441053)
隨著車(chē)輛數(shù)量日益增加,交通擁堵現(xiàn)象越來(lái)越多。目前雖然在部分路段實(shí)現(xiàn)了智能監(jiān)控,但只是利用車(chē)流量歷史數(shù)據(jù)設(shè)定該固定路段交通燈固定周期,不能實(shí)現(xiàn)路口交通燈隨著某一時(shí)段的車(chē)流量變化及時(shí)變更的功能[1-2]。為應(yīng)對(duì)交通路口車(chē)流量的臨時(shí)變更,針對(duì)交通路口的擁堵問(wèn)題,設(shè)計(jì)了一種基于樹(shù)莓派的車(chē)輛識(shí)別與車(chē)流監(jiān)測(cè)系統(tǒng)。系統(tǒng)借助嵌入式開(kāi)發(fā)平臺(tái),利用攝像頭采集路口車(chē)輛的圖片信息,使用ZigBee技術(shù)實(shí)現(xiàn)無(wú)線數(shù)據(jù)傳輸,采用樹(shù)莓派主控模塊完成圖像數(shù)據(jù)分析與實(shí)時(shí)學(xué)習(xí)。利用神經(jīng)網(wǎng)絡(luò)模型,對(duì)攝像頭采集圖像進(jìn)行處理,精準(zhǔn)確識(shí)別某一時(shí)段的車(chē)流量,通過(guò)樹(shù)莓派對(duì)車(chē)流數(shù)據(jù)和本周期各路段交通燈時(shí)長(zhǎng)進(jìn)行計(jì)算,直接給出下一周期的路段交通燈時(shí)長(zhǎng),實(shí)現(xiàn)車(chē)流量實(shí)時(shí)監(jiān)測(cè)和交通燈智能控制。
系統(tǒng)硬件設(shè)計(jì)方案如圖1所示,由工業(yè)攝像頭、樹(shù)莓派、ZigBee主機(jī)、ZigBee從機(jī)、數(shù)碼管顯示器、交通燈組成。在交通路口固定四個(gè)工業(yè)攝像頭,分別對(duì)四個(gè)路口的小車(chē)進(jìn)行圖像采集,再將工業(yè)攝像頭與樹(shù)莓派連接,在樹(shù)莓派中對(duì)采集的圖像進(jìn)行處理,得到一個(gè)周期內(nèi)每個(gè)路口的車(chē)流量,再根據(jù)設(shè)定程序來(lái)分配下一個(gè)周期內(nèi)四個(gè)路口的交通燈時(shí)長(zhǎng),將得到的時(shí)長(zhǎng)傳輸?shù)脚c樹(shù)莓派相連接的ZigBee主機(jī)上,由ZigBee主機(jī)將信息分別傳輸?shù)剿膫€(gè)路口的ZigBee從機(jī)。由ZigBee從機(jī)來(lái)控制路口的交通燈顯示下個(gè)周期的本路段時(shí)長(zhǎng)[3-4]。
每個(gè)周期各路段的數(shù)據(jù)提取和指令傳達(dá)只會(huì)影響到下一周期的紅綠燈時(shí)長(zhǎng),即下一周期紅綠燈時(shí)長(zhǎng)是根據(jù)本周期中四個(gè)路段在本路段綠燈的情況下通行的車(chē)輛數(shù)來(lái)進(jìn)行計(jì)算得到。
圖1 系統(tǒng)硬件設(shè)計(jì)方案
系統(tǒng)軟件環(huán)境首先是在嵌入式環(huán)境下安裝OpenCV。OpenCV是一個(gè)基于BSD許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上,提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。用opencv_creatsamples樣本生成器與opencv_traincascade級(jí)聯(lián)分類(lèi)訓(xùn)練器,來(lái)訓(xùn)練系統(tǒng)識(shí)別小車(chē)的分類(lèi)器。其次是安裝TensorFlow_python庫(kù),TensorFlow是一個(gè)開(kāi)源的機(jī)器學(xué)習(xí)軟件資源庫(kù)。它既是一個(gè)實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的接口,也是執(zhí)行機(jī)器學(xué)習(xí)算法的框架。它能夠支持多種開(kāi)發(fā)語(yǔ)言,可在異構(gòu)系統(tǒng)上進(jìn)行移植,支持異構(gòu)分布式系統(tǒng)部署。用它來(lái)搭建深度學(xué)習(xí)網(wǎng)絡(luò),可實(shí)現(xiàn)交通信號(hào)燈按車(chē)流量的變化實(shí)時(shí)學(xué)習(xí)優(yōu)化的功能[5-6]。
用作目標(biāo)檢測(cè)的高斯混合模型(Mixture of Gaussians,MOG2)是一種利用背景減除原理的背景分割器。因?yàn)檎麄€(gè)圖像識(shí)別在得到結(jié)果之前會(huì)經(jīng)過(guò)很多次的分類(lèi)模型運(yùn)算,規(guī)定一個(gè)閾值,在進(jìn)行分類(lèi)模型運(yùn)算之前對(duì)圖像上的檢測(cè)框進(jìn)行檢測(cè),過(guò)濾較小的檢測(cè)框達(dá)到減少分類(lèi)模型運(yùn)算次數(shù)的目的[7]。經(jīng)過(guò)多次閾值改變的測(cè)試,最適合實(shí)驗(yàn)中小車(chē)檢測(cè)的閾值是2 000。小于這個(gè)閾值的檢測(cè)框就會(huì)被過(guò)濾掉,剩下的檢測(cè)框就是能夠被作為進(jìn)一步檢測(cè)是否為小車(chē)的物體。通過(guò)MOG2的處理,閾值小于2000的被檢測(cè)物體將會(huì)被默認(rèn)為不是小車(chē),系統(tǒng)將其直接刪除,在接下來(lái)的檢測(cè)中不予追蹤,能夠縮小接下來(lái)的追蹤范圍,圖2為MOG2處理后的圖像,圖中綠框是經(jīng)過(guò)MOG2處理后即將進(jìn)行下一步檢測(cè)處理的物體,可以看出本次處理后已經(jīng)得到該畫(huà)面內(nèi)的所有小車(chē)。
圖2 小車(chē)識(shí)別圖像
目標(biāo)追蹤在于實(shí)現(xiàn)捕捉動(dòng)態(tài)的小車(chē),核相關(guān)濾波算法(Kernel Correlation Filter,KCF)是一種追蹤效果和追蹤速度都十分突出的鑒別式追蹤方法,在檢測(cè)過(guò)程之中能夠精確到對(duì)每一幀圖像進(jìn)行對(duì)比。在小車(chē)的識(shí)別中,首先是訓(xùn)練一個(gè)目標(biāo)檢測(cè)器,再預(yù)測(cè)下一幀小車(chē)位置,然后用目標(biāo)檢測(cè)器去檢測(cè)該位置是否確實(shí)符合預(yù)測(cè)結(jié)果,最后使用新的檢測(cè)結(jié)果來(lái)更新現(xiàn)有的訓(xùn)練集從而達(dá)到更新目標(biāo)檢測(cè)器的效果[8]。
在整個(gè)跟蹤過(guò)程中訓(xùn)練的目的就是找到樣本訓(xùn)練集(xi,yi)目標(biāo)函數(shù):
上述樣本訓(xùn)練集中xi為行向量,yi為列向量,公式中的w表示列向量權(quán)重系數(shù),通過(guò)最小二乘法求解w得到:
公式中λ是正規(guī)化參數(shù),用來(lái)防止過(guò)擬合。其矩陣形式為:
公式中X=[x1,x2,...,xn]T的每一行都表示的是一個(gè)樣本,y是列向量,每個(gè)元素都有一個(gè)樣本標(biāo)簽與之相對(duì)應(yīng)。由此可以得出w的解為:
該式是針對(duì)實(shí)數(shù)域的,后續(xù)計(jì)算是在復(fù)數(shù)域進(jìn)行,所以將該式進(jìn)行變換得到:
其中XH表示的是共軛轉(zhuǎn)置矩陣,可理解為XH=(X*)T。
將測(cè)試算法簡(jiǎn)化到一維可表示成:
那么x的一個(gè)循環(huán)位移操作可以用置換矩陣Px=[xn,x1,x2,...,xn-1]T表示,這樣Px就會(huì)讓x在其豎直方向上移動(dòng)一個(gè)元素,得到相對(duì)應(yīng)的新元素。
對(duì)小車(chē)跟蹤就是使用這一原理,先根據(jù)前一幀圖像中小車(chē)信息來(lái)預(yù)測(cè)出下一幀中小車(chē)信息,再在下一幀圖像中用實(shí)際小車(chē)信息與預(yù)測(cè)小車(chē)信息做比對(duì),最終得到追蹤結(jié)果。由于這種方法能夠細(xì)化到每一幀圖像對(duì)比,實(shí)現(xiàn)動(dòng)態(tài)跟蹤功能的可靠性較高。
模型訓(xùn)練是以Keras提供的數(shù)據(jù)增強(qiáng)功能為基礎(chǔ)實(shí)現(xiàn)的。其主要的功能也是為了防止過(guò)擬合,在模型訓(xùn)練過(guò)程中使用了ImageDataGenerator,目的是將文件夾里面的一些原始數(shù)據(jù)轉(zhuǎn)化成為生成器來(lái)提供給模型使用。在模型訓(xùn)練的過(guò)程之中還將EarlyStopping引入,以保證在訓(xùn)練過(guò)程中模型準(zhǔn)確度不再上升時(shí)能夠自動(dòng)終止訓(xùn)練[9]。
圖3為系統(tǒng)測(cè)試的硬件平臺(tái),圖4為系統(tǒng)的數(shù)據(jù)處理與顯示模塊。
圖3 系統(tǒng)測(cè)試硬件平臺(tái)
圖4 數(shù)據(jù)處理與顯示模塊
下頁(yè)圖5為截取一輛車(chē)在通過(guò)攝像頭監(jiān)視路段時(shí)連續(xù)四幀的追蹤過(guò)程,可以看出每一幀的處理都十分明顯,達(dá)到了在圖像每一幀中追蹤小車(chē)的目的[9-12]。
基于基礎(chǔ)方案訓(xùn)練參數(shù)組,以基礎(chǔ)方案的規(guī)則通過(guò)numpy庫(kù)產(chǎn)生5 000組以各路口車(chē)流量為輸入x,各路口紅綠燈時(shí)長(zhǎng)為標(biāo)準(zhǔn)輸出y的數(shù)據(jù)。然后輸入前面搭建好的TensorFlow神經(jīng)網(wǎng)絡(luò)中,進(jìn)行5 000次訓(xùn)練,得出基于基礎(chǔ)方案的參數(shù)組值。然后進(jìn)行前向傳播,使用TensorFlow進(jìn)行交通燈時(shí)間分配。
將小車(chē)識(shí)別功能應(yīng)用到交通路段車(chē)流監(jiān)測(cè),當(dāng)小車(chē)成功被識(shí)別之后將其記數(shù),通過(guò)對(duì)一個(gè)周期內(nèi)的各路段車(chē)流量進(jìn)行計(jì)算之后求得下一個(gè)周期四個(gè)路段綠燈時(shí)長(zhǎng),即時(shí)緩解交通路段的問(wèn)題。鑒于交叉路口復(fù)雜的實(shí)際情況,為便于測(cè)試,對(duì)時(shí)間進(jìn)行一定比例縮減,主要思路為:通行方向車(chē)輛數(shù)較少,而另一方向車(chē)輛數(shù)較多卻在等待時(shí),下次通行時(shí)長(zhǎng)將主要轉(zhuǎn)移到車(chē)輛數(shù)較多方向,緩解該方向交通壓力。在此過(guò)程中,如果車(chē)輛數(shù)較少方向的車(chē)輛數(shù)增加,則下次需重新分配通行時(shí)長(zhǎng),從而實(shí)現(xiàn)車(chē)輛數(shù)較多方向始終優(yōu)先通行。圖6、圖7分別為系統(tǒng)車(chē)輛識(shí)別和車(chē)流監(jiān)測(cè)時(shí)的圖像。
圖5 連續(xù)四幀的小車(chē)追蹤過(guò)程
系統(tǒng)基于樹(shù)莓派和嵌入式硬件平臺(tái)設(shè)計(jì),采用ZigBee通信技術(shù),利用OpenCV和Keras設(shè)計(jì)了圖像處理算法程序,將車(chē)輛識(shí)別處理與交通燈時(shí)長(zhǎng)智能控制相結(jié)合,測(cè)試與實(shí)驗(yàn)結(jié)果表明,系統(tǒng)能夠準(zhǔn)確地識(shí)別車(chē)輛,進(jìn)行車(chē)流監(jiān)測(cè),可根據(jù)路段的車(chē)流量實(shí)時(shí)調(diào)節(jié)交通信號(hào)燈的通行時(shí)間,有效地提高了交通運(yùn)輸效率、緩解了城市的交通運(yùn)輸壓力,具有較好的推廣意義和實(shí)用價(jià)值。
圖6 車(chē)輛識(shí)別圖像
圖7 車(chē)流監(jiān)測(cè)圖像