陸超,柯永斌
(淮陰工學(xué)院 電子信息工程學(xué)院,江蘇 淮安 223001)
在當(dāng)前的社會(huì)中,限高桿的是為了限制車輛通行的高度,用來保護(hù)橋梁、隧道等交通設(shè)施,但是現(xiàn)實(shí)生活中所使用的限高桿技術(shù)往往都是剛性的,大多數(shù)的制成材料是用金屬,因?yàn)槠囋谛旭倳r(shí)具有很大的慣性,如果當(dāng)一個(gè)駕駛員駕駛著汽車,而沒有看到這個(gè)限高桿。很容易就會(huì)撞上去,這樣會(huì)造成很嚴(yán)重的交通事故,若只設(shè)置有檢測超高裝置的話,兩輛汽車同時(shí)經(jīng)過,不能確定是哪個(gè)車輛。所以要加上車牌識(shí)別用于提醒具體的車輛[1]。為了解決限高桿的這一不足,本課題目的就是完成一個(gè)智能限高桿提醒系統(tǒng)設(shè)計(jì)。
本課題的研究目標(biāo)是設(shè)計(jì)一款基于樹莓派車牌識(shí)別的智能限高桿。它可以判斷過來的車輛是否超過限定的高度,抓拍超過限定高度的車輛圖片,并且從中提取車牌信息,然后給予警示。樹莓派利用激光對準(zhǔn)模塊來進(jìn)行對車輛是否超出限定高度,輔以攝像頭來作為抓取車輛信息,通過python3.5和OpenCV,來對含有車牌信息的圖片在本地進(jìn)行車牌識(shí)別,通過串口發(fā)送給單片機(jī)。單片機(jī)在接收到發(fā)過來的車牌信息之后,將車牌信息顯示在點(diǎn)陣屏上面,不斷閃爍以警示超高司機(jī)注意安全[2]。
圖1 硬件總體設(shè)計(jì)流程圖Fig1 Hardware overall design flow chart
利用激光對射傳感器經(jīng)向檢測,若車輛超過設(shè)定的高度,則樹莓派利用攝像頭進(jìn)行抓拍,對抓拍到的照片進(jìn)行提取載入,使用OpenCV這個(gè)開源的計(jì)算機(jī)視覺庫來處理。得到車牌的相關(guān)信息,利用串口發(fā)給單片機(jī),單片機(jī)接收到信息后通過無線模塊發(fā)送給另一個(gè)節(jié)點(diǎn)單片機(jī),然后在LCD屏顯示該車輛的車牌信息。
圖2 軟件總體設(shè)計(jì)流程圖Fig 2 Overall software design flow chart
所要求設(shè)計(jì)的系統(tǒng)能夠利用樹莓派拍攝的照片,進(jìn)行數(shù)字圖像處理和使用一些相關(guān)算法,快速地、準(zhǔn)確地識(shí)別出車牌信息[3]。車牌識(shí)別的設(shè)計(jì)流程圖如下:
圖3 車牌識(shí)別設(shè)計(jì)Fig 3 License plate recognition design
對于圖像的邊緣檢測,我采用了 Canny算子進(jìn)行邊緣檢測。
Canny算子是一種檢測性能較好,應(yīng)用也比較廣泛的一種邊緣檢測算子。它通過圖像信號(hào)的函數(shù)的極大值來判定圖像的邊緣監(jiān)測點(diǎn)。
對于Canny算子的邊緣檢測的步驟如下:
消除噪聲。在Canny算子邊緣檢測之前,先要對原始數(shù)據(jù)和高斯模板進(jìn)行卷積,將得到的圖像與最初的圖像比較又模糊,一般來說采用高斯平滑濾波器來鏡像卷積降噪,下面是一個(gè)size = 5的高斯內(nèi)核[4]:
計(jì)算圖像的梯度幅度和它的方向??梢圆捎靡浑A差分來對圖像灰度的梯度值求取近似。求得圖像在x和y方向的頻道書,用一堆卷積陣列分布作用于相應(yīng)的水平核垂直方向。Canny算子使用的Sobel模板如下[5]:
從上面的式子可以求出卷積后的結(jié)果求出的近似梯度幅度為G:
圖4 邊緣檢測變換圖Fig 4 Transformation diagram of edge detection
本系統(tǒng)是整個(gè)系統(tǒng)設(shè)計(jì)的核心部分,主要的控制環(huán)節(jié),分析環(huán)節(jié),處理環(huán)節(jié)都在本部分完成。下位機(jī)僅僅起到一個(gè)顯示的作用。
本系統(tǒng)主要分為4個(gè)部分,分別是車輛高度判斷部分、圖像采集部分,車牌識(shí)別部分、通信部分。
系統(tǒng)主要分為圖像采集,預(yù)處理,車牌定位,字符分割以及最后的車牌識(shí)別部分[6]。首先利用攝像頭進(jìn)行圖像的采集,然后對采集的圖像進(jìn)行一系列的處理,如灰度變換等等。接著進(jìn)行車牌定位,確定車牌所在的圖像區(qū)域。最后對含有車牌的矩形區(qū)域進(jìn)行字符分割。將每個(gè)分割出來的字符進(jìn)行模板匹配最后得到車牌信息,完成車牌識(shí)別這個(gè)流程。
圖5 識(shí)別流程圖Fig 5 Identification flowchart
為了能確保樹莓派能夠正常的運(yùn)行程序,應(yīng)該配置樹莓派的GPIO引腳,串口,以及載入已經(jīng)訓(xùn)練好的SVM模板。初始化流程如圖6所示:
圖6 統(tǒng)初始化流程圖Fig 6 Series initialization flow chart
車輛高度判斷是基于激光對射模塊的,激光對射模塊安裝在固定的高度,若有超過高度的物體通過,則電平會(huì)發(fā)生變化,此時(shí)樹莓派不斷讀取相應(yīng)的GPIO管腳的電平值來判斷。
當(dāng)確定有車輛超過限定高度的時(shí)候,才執(zhí)行攝像頭,車牌識(shí)別等步驟。
第一種的方法是基于圖像的邊緣來進(jìn)行檢測,也就是如上面所提到的例如Canny邊緣處理算子,拉普拉斯算子等。第二種是基于車牌的顏色來進(jìn)行判斷的,車牌的長寬比是固定的所以可以確定車牌所在的區(qū)域。車牌定位的流程如圖7所示:
圖7 車牌定位流程圖Fig 7 License plate location flow chart
因?yàn)楹熊嚺频膱D像如果傾斜的話,不利于圖像的分割。所以它的角度必須被調(diào)整到能夠分割出比較完整地字符為止,調(diào)整車牌的傾斜度可以令所有的字符基本上處于水平狀態(tài)。這有利于對字符之間的分割,間接的提升了車牌識(shí)別的準(zhǔn)確程度。經(jīng)過對算法方面的不斷調(diào)整,在于查找水平直方圖波峰的分布,峰圖越密,認(rèn)為是水平方向,最大的波峰為車牌區(qū)域。那塊區(qū)域的是字符的可能性越大。查找查找垂直直方圖波峰,圖像在水平像素位置附近,若字符兩側(cè)的像素的平均值有相當(dāng)大的起伏,則它顯示的圖像存在傾斜,需要進(jìn)行修正[7]。找到含有車牌的區(qū)域之后,要判斷是否傾斜,如果傾斜的角度過大的話對接下來的字符分割以及字符識(shí)別會(huì)進(jìn)行干擾,所以此時(shí)要進(jìn)行角度校正。角度矯正的部分代碼如下:
下面需要計(jì)算每個(gè)像素點(diǎn)的平均高度,圖像的左半邊的像素點(diǎn),圖片右半邊的像素點(diǎn),從這些數(shù)據(jù)中中找到圖像的斜率,圖像重建的斜率,包括一個(gè)新的圖像輸出到圖像像素映射時(shí)間。使用hough來檢測直線,從而檢測出角度。最后再利用一些相關(guān)的旋轉(zhuǎn)算法,將剛才旋轉(zhuǎn)的車牌進(jìn)行旋轉(zhuǎn)。車牌的傾斜度調(diào)整后的效果如圖8所示:
圖8 調(diào)整后的效果圖Fig 8 The adjusted effect diagram
車牌的字符主要進(jìn)行單字符的分割,主要策略就是主要來檢測像素的綜合變化,字符的顏色與非字符區(qū)域的顏色完全不同,經(jīng)過二值化之后的非字符區(qū)域就是黑色,像素的值比較低[8]。含有字符的區(qū)域白色點(diǎn)比較多,所以含有字符的列的像素和比較高。根據(jù)這個(gè)來進(jìn)行字符分割。
具體分割的算法如下:
(1)認(rèn)為水平方向,最大的波峰為車牌區(qū)域。
(2)查找垂直直方圖波峰,去掉車牌上下邊緣1個(gè)像素,避免白邊影響閾值判斷。
(3)U和0要求閾值偏小,否則U和0會(huì)被分成兩半,車牌字符數(shù)應(yīng)大于6,判斷是否是左側(cè)車牌邊緣。組合分離漢字,去除車牌上的分隔點(diǎn),可能是固定車牌的鉚釘,判斷最后一個(gè)數(shù)是否是車牌邊緣,假設(shè)車牌邊緣被認(rèn)為是1。
車牌字符分割的示意圖如9所示:
圖9 字符分割示意圖Fig 9 Character segmentation diagram
該步驟如下:首先要做的是判斷車牌的字符數(shù)是否大于6,緊接著判斷車牌左側(cè)的邊緣,接著分離出第一個(gè)漢字部分[9]。去掉車牌上的分隔點(diǎn),將剩下的字符一個(gè)個(gè)分割,判斷最后一個(gè)數(shù)是不是邊緣,假設(shè)邊緣為1,若這個(gè)1太細(xì)的話則把它當(dāng)做是邊緣來處理。
將上面含有字符圖片所分割出來的字符串圖片,對它做一個(gè)個(gè)的字符分割,將每個(gè)字符串送到已經(jīng)訓(xùn)練好的模板里進(jìn)行識(shí)別。需要對模板進(jìn)行訓(xùn)練,將34省的縮寫,以及0到9這十個(gè)數(shù)字和A-Z這26個(gè)字母進(jìn)行訓(xùn)練。但是因?yàn)闆]有足夠的樣本,無法進(jìn)行這一步的操作。
使用樣本上的一些限制還有由于樣本的不足,算法方面也有待完善。導(dǎo)致在車牌定位方面有些不準(zhǔn)確,遇到環(huán)境復(fù)雜或者車牌占比很小識(shí)別不出來。在字符中樣本的不足,在判斷兩個(gè)字符的情況下,會(huì)導(dǎo)致混淆,如0和O以及Z與2,還有就是8和B等等。這些都需要很大的樣本來訓(xùn)練,以提高準(zhǔn)確率。
警示系統(tǒng)使整個(gè)系統(tǒng)的限高警示部分,是主要的輸出信息環(huán)節(jié),展示環(huán)節(jié)。
本系統(tǒng)主要分為兩個(gè)部分,分別是串口通信部分,車牌信息顯示部分。樹莓派在往單片機(jī)發(fā)的時(shí)候,以GB2312的格式發(fā)送[10]。在GB2312格式中,每個(gè)中文字符占據(jù)兩個(gè)字節(jié),英文占據(jù)一個(gè)字節(jié)。將得到的車牌信息顯示在戶外點(diǎn)陣屏幕上面上面。
圖10 車牌示警部分流程圖FIig 10 Flow chart of license plate warning part
通信協(xié)議以‘#’為起始幀,以‘%’為結(jié)束幀,防止數(shù)據(jù)在傳輸?shù)倪^程中出現(xiàn)亂碼或者錯(cuò)碼,提高了系統(tǒng)的可靠性。車牌含有一個(gè)中文字符,七個(gè)英文或者數(shù)字,定義了一個(gè)9個(gè)字符的數(shù)組。協(xié)議的示意圖如下:
圖11 自定義協(xié)議圖Fig11 Custom Protocol diagram
本文詳細(xì)的介紹了辨識(shí)部分的車牌識(shí)別本地化處理的過程,以及警示部分的處理。利用SVM支持向量機(jī)實(shí)現(xiàn)對字符的訓(xùn)練以及處理,最后還介紹了辨識(shí)部分與警示部分之間的通信協(xié)議.