劉奧卓, 曹煜輝, 周岳斌
(湖北文理學院機械工程學院, 湖北 襄陽 441053)
隨著車輛數量日益增加,交通擁堵現象越來越多。目前雖然在部分路段實現了智能監控,但只是利用車流量歷史數據設定該固定路段交通燈固定周期,不能實現路口交通燈隨著某一時段的車流量變化及時變更的功能[1-2]。為應對交通路口車流量的臨時變更,針對交通路口的擁堵問題,設計了一種基于樹莓派的車輛識別與車流監測系統。系統借助嵌入式開發平臺,利用攝像頭采集路口車輛的圖片信息,使用ZigBee技術實現無線數據傳輸,采用樹莓派主控模塊完成圖像數據分析與實時學習。利用神經網絡模型,對攝像頭采集圖像進行處理,精準確識別某一時段的車流量,通過樹莓派對車流數據和本周期各路段交通燈時長進行計算,直接給出下一周期的路段交通燈時長,實現車流量實時監測和交通燈智能控制。
系統硬件設計方案如圖1所示,由工業攝像頭、樹莓派、ZigBee主機、ZigBee從機、數碼管顯示器、交通燈組成。在交通路口固定四個工業攝像頭,分別對四個路口的小車進行圖像采集,再將工業攝像頭與樹莓派連接,在樹莓派中對采集的圖像進行處理,得到一個周期內每個路口的車流量,再根據設定程序來分配下一個周期內四個路口的交通燈時長,將得到的時長傳輸到與樹莓派相連接的ZigBee主機上,由ZigBee主機將信息分別傳輸到四個路口的ZigBee從機。由ZigBee從機來控制路口的交通燈顯示下個周期的本路段時長[3-4]。
每個周期各路段的數據提取和指令傳達只會影響到下一周期的紅綠燈時長,即下一周期紅綠燈時長是根據本周期中四個路段在本路段綠燈的情況下通行的車輛數來進行計算得到。

圖1 系統硬件設計方案
系統軟件環境首先是在嵌入式環境下安裝OpenCV。OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可運行在Linux、Windows、Android和Mac OS操作系統上,提供了Python、Ruby、MATLAB等語言的接口,實現圖像處理和計算機視覺方面的很多通用算法。用opencv_creatsamples樣本生成器與opencv_traincascade級聯分類訓練器,來訓練系統識別小車的分類器。其次是安裝TensorFlow_python庫,TensorFlow是一個開源的機器學習軟件資源庫。它既是一個實現機器學習算法的接口,也是執行機器學習算法的框架。它能夠支持多種開發語言,可在異構系統上進行移植,支持異構分布式系統部署。用它來搭建深度學習網絡,可實現交通信號燈按車流量的變化實時學習優化的功能[5-6]。
用作目標檢測的高斯混合模型(Mixture of Gaussians,MOG2)是一種利用背景減除原理的背景分割器。因為整個圖像識別在得到結果之前會經過很多次的分類模型運算,規定一個閾值,在進行分類模型運算之前對圖像上的檢測框進行檢測,過濾較小的檢測框達到減少分類模型運算次數的目的[7]。經過多次閾值改變的測試,最適合實驗中小車檢測的閾值是2 000。小于這個閾值的檢測框就會被過濾掉,剩下的檢測框就是能夠被作為進一步檢測是否為小車的物體。通過MOG2的處理,閾值小于2000的被檢測物體將會被默認為不是小車,系統將其直接刪除,在接下來的檢測中不予追蹤,能夠縮小接下來的追蹤范圍,圖2為MOG2處理后的圖像,圖中綠框是經過MOG2處理后即將進行下一步檢測處理的物體,可以看出本次處理后已經得到該畫面內的所有小車。

圖2 小車識別圖像
目標追蹤在于實現捕捉動態的小車,核相關濾波算法(Kernel Correlation Filter,KCF)是一種追蹤效果和追蹤速度都十分突出的鑒別式追蹤方法,在檢測過程之中能夠精確到對每一幀圖像進行對比。在小車的識別中,首先是訓練一個目標檢測器,再預測下一幀小車位置,然后用目標檢測器去檢測該位置是否確實符合預測結果,最后使用新的檢測結果來更新現有的訓練集從而達到更新目標檢測器的效果[8]。
在整個跟蹤過程中訓練的目的就是找到樣本訓練集(xi,yi)目標函數:

上述樣本訓練集中xi為行向量,yi為列向量,公式中的w表示列向量權重系數,通過最小二乘法求解w得到:

公式中λ是正規化參數,用來防止過擬合。其矩陣形式為:

公式中X=[x1,x2,...,xn]T的每一行都表示的是一個樣本,y是列向量,每個元素都有一個樣本標簽與之相對應。由此可以得出w的解為:

該式是針對實數域的,后續計算是在復數域進行,所以將該式進行變換得到:

其中XH表示的是共軛轉置矩陣,可理解為XH=(X*)T。
將測試算法簡化到一維可表示成:

那么x的一個循環位移操作可以用置換矩陣Px=[xn,x1,x2,...,xn-1]T表示,這樣Px就會讓x在其豎直方向上移動一個元素,得到相對應的新元素。
對小車跟蹤就是使用這一原理,先根據前一幀圖像中小車信息來預測出下一幀中小車信息,再在下一幀圖像中用實際小車信息與預測小車信息做比對,最終得到追蹤結果。由于這種方法能夠細化到每一幀圖像對比,實現動態跟蹤功能的可靠性較高。
模型訓練是以Keras提供的數據增強功能為基礎實現的。其主要的功能也是為了防止過擬合,在模型訓練過程中使用了ImageDataGenerator,目的是將文件夾里面的一些原始數據轉化成為生成器來提供給模型使用。在模型訓練的過程之中還將EarlyStopping引入,以保證在訓練過程中模型準確度不再上升時能夠自動終止訓練[9]。
圖3為系統測試的硬件平臺,圖4為系統的數據處理與顯示模塊。

圖3 系統測試硬件平臺

圖4 數據處理與顯示模塊
下頁圖5為截取一輛車在通過攝像頭監視路段時連續四幀的追蹤過程,可以看出每一幀的處理都十分明顯,達到了在圖像每一幀中追蹤小車的目的[9-12]。
基于基礎方案訓練參數組,以基礎方案的規則通過numpy庫產生5 000組以各路口車流量為輸入x,各路口紅綠燈時長為標準輸出y的數據。然后輸入前面搭建好的TensorFlow神經網絡中,進行5 000次訓練,得出基于基礎方案的參數組值。然后進行前向傳播,使用TensorFlow進行交通燈時間分配。
將小車識別功能應用到交通路段車流監測,當小車成功被識別之后將其記數,通過對一個周期內的各路段車流量進行計算之后求得下一個周期四個路段綠燈時長,即時緩解交通路段的問題。鑒于交叉路口復雜的實際情況,為便于測試,對時間進行一定比例縮減,主要思路為:通行方向車輛數較少,而另一方向車輛數較多卻在等待時,下次通行時長將主要轉移到車輛數較多方向,緩解該方向交通壓力。在此過程中,如果車輛數較少方向的車輛數增加,則下次需重新分配通行時長,從而實現車輛數較多方向始終優先通行。圖6、圖7分別為系統車輛識別和車流監測時的圖像。

圖5 連續四幀的小車追蹤過程
系統基于樹莓派和嵌入式硬件平臺設計,采用ZigBee通信技術,利用OpenCV和Keras設計了圖像處理算法程序,將車輛識別處理與交通燈時長智能控制相結合,測試與實驗結果表明,系統能夠準確地識別車輛,進行車流監測,可根據路段的車流量實時調節交通信號燈的通行時間,有效地提高了交通運輸效率、緩解了城市的交通運輸壓力,具有較好的推廣意義和實用價值。

圖6 車輛識別圖像

圖7 車流監測圖像