基于FPGA的車(chē)牌識別系統
作者/李鑫,高佳皓,李金晟(北京理工大學(xué) 信息與電子學(xué)院,北京 100081)
本文引用地址:http://dyxdggzs.com/article/201902/397980.htm摘要:車(chē)牌識別主要包括車(chē)牌定位檢測、字符分割和字符識別三個(gè)部分,現有的車(chē)牌識別系統都依托于類(lèi)似OpenCV這樣的軟件平臺,實(shí)際安裝操作非常麻煩,沒(méi)有一個(gè)專(zhuān)用的處理器來(lái)實(shí)現車(chē)牌識別功能,針對這一現狀,我們設計了基于紫光PGT180H芯片的車(chē)牌識別系統,利用FPGA的靈活性和高速并行的特點(diǎn),實(shí)現了車(chē)牌識別的功能,并在紫光同創(chuàng )開(kāi)發(fā)板上搭建了車(chē)牌識別系統。
關(guān)鍵詞:圖像處理;神經(jīng)網(wǎng)絡(luò );FPGA;實(shí)時(shí)處理
*第二屆(2018)全國大學(xué)生集成電路創(chuàng )新創(chuàng )業(yè)大賽全國一等獎
0 引言
課題研究背景
智能交通系統是將先進(jìn)的信息技術(shù)、移動(dòng)通信技術(shù)和計算機技術(shù)應用在交通網(wǎng)絡(luò ),建設一種全方位的、實(shí)時(shí)準確的綜合運輸和管理系統,實(shí)現道路交通和機動(dòng)車(chē)輛的自動(dòng)化管理。自動(dòng)化的發(fā)展在交通管理領(lǐng)域產(chǎn)生了一系列的應用,比如道路收費、車(chē)載導航系統和車(chē)聯(lián)網(wǎng)等。這些應用對于車(chē)輛的識別檢測、安全管理也提出了越來(lái)越高的要求[1]。
車(chē)牌識別系統研究現狀及難點(diǎn)
車(chē)牌識別系統,采用的主要方法是通過(guò)圖像處理技術(shù),對采集的包含車(chē)牌的圖像進(jìn)行分析,提取車(chē)牌的位置,完成字符分割和識別的功能。隨著(zhù)計算機技術(shù)的發(fā)展,對于單個(gè)字符的識別已經(jīng)有非常完善的解決方法,車(chē)牌識別系統準確性主要受限于圖像信息的獲取,識別失敗也大多數是由獲取圖像不理想導致。存在的問(wèn)題包括車(chē)牌圖像的傾斜、車(chē)牌自身的磨損、光線(xiàn)的干擾都會(huì )影響到定位的精度。對于車(chē)牌識別系統來(lái)說(shuō),識別車(chē)牌的準確性和快速性往往是互相矛盾的存在,快速實(shí)時(shí)的捕捉和處理圖像往往會(huì )使用來(lái)識別的字符產(chǎn)生較大的失真,而不能滿(mǎn)足識別算法的要求,同時(shí)為了保證車(chē)牌識別的準確性經(jīng)常會(huì )犧牲識別的速度,比如需要車(chē)牌在攝像頭前保持更長(cháng)的一段時(shí)間才能完成識別[2]。
1 設計和系統模塊概述
1.1 作品介紹
本作品是基于紫光PGT180H的車(chē)牌識別系統,包括了紫光開(kāi)發(fā)板、帶FIFO的OV7725攝像頭、像素為320x240的LCD顯示屏以及搭載了攝像頭和LCD的PCB板。
系統采用OV7725攝像頭采集圖片,通過(guò)RGB轉HSV的模塊并根據HSV值提取出藍色部分,經(jīng)過(guò)detect模塊檢測有無(wú)車(chē)牌,然后對圖像進(jìn)行處理得到車(chē)牌的四個(gè)頂點(diǎn),利用線(xiàn)性?xún)炔宓姆椒ǐ@得固定大小的圖像,提取出車(chē)牌中的7個(gè)包含字符的圖像矩陣,然后使用訓練好的神經(jīng)網(wǎng)絡(luò )分別對其進(jìn)行運算分析,最后識別出結果并顯示到LCD上。
本項目的具體工作如下。
?、跑?chē)牌定位檢測。針對攝像頭獲取的圖像受到車(chē)牌模糊、光照強度的影響,采用HSV格式的圖像二值化方法,提出了一種通過(guò)掃描二值化圖像檢測車(chē)牌四個(gè)頂點(diǎn)的方法,得到了車(chē)牌的位置區域,根據設定判斷依據檢測車(chē)牌是否存在于攝像頭前,檢測成功后自動(dòng)完成識別功能。
?、谱址指?。根據已經(jīng)提取的圖像定點(diǎn),采用一種線(xiàn)性?xún)炔宓姆椒▽⒃紙D像轉換為固定大小圖像,這一方法也可以適應發(fā)生旋轉后的車(chē)牌,再將固定大小的圖像順序分割成單個(gè)字符用來(lái)識別。
?、亲址R別。采用神經(jīng)網(wǎng)絡(luò )算法完成字符識別功能,將已經(jīng)訓練好的神經(jīng)網(wǎng)絡(luò )矩陣存在存儲器中,在FPGA上建立相應并行與流水線(xiàn)結構的乘累加模塊設計,利用查找表以及線(xiàn)性?xún)炔宓姆椒▽せ詈瘮祍igmoid進(jìn)行逼近,提高計算精度和算法效率。
1.2 系統工作流程
上電后,先進(jìn)行攝像頭寄存器配置,然后將攝像頭捕捉到的畫(huà)面顯示到LCD顯示屏上,同時(shí)RGB轉HSV和detect模塊運行;一旦detect模塊提取到車(chē)牌,LCD畫(huà)面將轉化為暫停的黑白畫(huà)面,緊接著(zhù)運行車(chē)牌分割和顯示的模塊image_pro和segment,然后是神經(jīng)網(wǎng)絡(luò )識別車(chē)牌,最后將結果顯示至LCD左側并且暫停。若想進(jìn)行第二次識別,則按下按鍵將會(huì )回到攝像頭捕捉畫(huà)面的狀態(tài)。
2 車(chē)牌檢測和圖像處理
2.1 HSV格式
從攝像頭獲得RGB565值的大小會(huì )隨著(zhù)環(huán)境光線(xiàn)的變化而變化,直接利用RGB三個(gè)值進(jìn)行二值化是很困難的,我們采取將RGB格式轉換成HSV格式,再設置二值化相應的閾值。HSV分別表示色相、飽和度和亮度。其中主要的二值化指標是色度和飽和度,表示偏向某個(gè)顏色和偏向的尺度,通過(guò)判斷色相和飽和度,我們將車(chē)牌中藍色的部分提取出來(lái)供后面使用。
我們使用的閾值如下:飽和度大于30,色相大于200 且小于280,亮度大于30。
2.2 圖像檢測
提取出藍色部分后,利用算法找到車(chē)牌的四個(gè)頂點(diǎn),通過(guò)四個(gè)頂點(diǎn)的相對位置,所表示的矩形的長(cháng)寬比來(lái)檢測車(chē)牌是否被放在攝像頭正前方。
為了提取出車(chē)牌,我們需要分析車(chē)牌的特征。在畫(huà)面中,車(chē)牌占了一大部分,意味著(zhù)連續的行和列都會(huì )呈現藍色,車(chē)牌的四個(gè)頂點(diǎn)分別位于左上、左下、右上、右下,所計算出的長(cháng)寬比在1:3到1:4內。檢測算法如下。
?、乓恍幸恍械乇闅v整幅圖。
?、飘斠恍兄袡z測到連續的10個(gè)藍色點(diǎn)時(shí),flag10賦值為1,視為檢測到車(chē)牌的初步狀態(tài),當連續的10個(gè)藍色點(diǎn)消失時(shí),flag10賦值為0。
?、钱攆lag10為1時(shí),記錄連續點(diǎn)中的左頂點(diǎn)和右頂點(diǎn)。
?、扔涗涇?chē)牌的左上、左下、右上、右下的坐標,即每次的左右頂點(diǎn)分別計算x+y和x-y的最大最小值與所記錄的坐標進(jìn)行比較。
?、扇舸嬖谶B續的10行,flag10都被賦值為1,視為找到了一大塊藍色區域。
?、十敱闅v完整幅圖并且找到了藍色區域之后,計算長(cháng)寬比,達到要求后視為找到了車(chē)牌。
?、薓ATLAB進(jìn)行的算法驗證,如圖2所示。
2.3 圖像分割
在車(chē)牌檢測模塊是我們已經(jīng)提取出來(lái)了4個(gè)頂點(diǎn)的坐標,通過(guò)其中的3個(gè)頂點(diǎn),可以將車(chē)牌部分映射到大小為1687的圖片中,設新圖片中的點(diǎn)坐標為,根據以下公式完成圖片映射。
圖形分割方法如下:按行和列將上圖分割成7個(gè)字符,每個(gè)字符出去最邊緣一行,再將上圖中紅色框內的點(diǎn)出去,最終得到71410的字符存進(jìn)RAM中。
映射與圖形分割的效果如圖3。
3 神經(jīng)網(wǎng)絡(luò )與字符識別
3.1 神經(jīng)網(wǎng)絡(luò )算法
3.1.1 神經(jīng)網(wǎng)絡(luò )的設計
前文中,我們已經(jīng)將車(chē)牌上的字符提取了出來(lái),每個(gè)字符都是一個(gè)1410的由0、1構成的矩陣。已經(jīng)完成了卷積神經(jīng)網(wǎng)絡(luò )中類(lèi)似池化的操作,我們不太需要更加復雜的CNN網(wǎng)絡(luò ),而可以使用最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò )結構。
于是我們設計了如下的神經(jīng)網(wǎng)絡(luò )。
?、耪麄€(gè)神經(jīng)網(wǎng)絡(luò )由3層感知機組成,輸入層、隱含層和輸出層。
?、戚斎雽?40個(gè)神經(jīng)元,對應1410中的每個(gè)像素點(diǎn);隱含層80個(gè)神經(jīng)元;輸出層34個(gè)神經(jīng)元,可分別對應10個(gè)數字和24個(gè)除去I、O的字母(車(chē)牌中這兩個(gè)字母由于和1、0比較像,故不存在),或34個(gè)省級行政區域。
?、禽斎雽訜o(wú)激活函數,僅隱含層和輸出層含有激活函數sigmoid。
3.1.2 神經(jīng)網(wǎng)絡(luò )的訓練
神經(jīng)網(wǎng)絡(luò )的訓練采用了梯度下降法,通過(guò)誤差反饋調整權值矩陣以減少誤差,使得神經(jīng)網(wǎng)絡(luò )的輸出逐漸收斂至我們想要的輸出[3]。
3.2 FPGA實(shí)現模塊
神經(jīng)網(wǎng)絡(luò )中包含兩種運算,分別是矩陣乘法和sigmoid函數映射的運算,主要通過(guò)以下的模塊實(shí)現。
3.2.1 選擇累加模塊
本模塊神經(jīng)網(wǎng)絡(luò )的第一層計算,將輸入的1410的二值化像素點(diǎn)的向量和訓練完成的神經(jīng)網(wǎng)絡(luò )權值矩陣W1相乘,得出結果,結果輸出至sigmoid模塊。因為圖像點(diǎn)陣數據格式已二值化,僅含有數字0、1,所以做乘法時(shí)相當于在做選擇,故采用選擇累加的方法計算向量與矩陣的乘積。
3.2.2 sigmoid模塊
Sigmoid函數是一個(gè)連續的函數,但是FPGA難以直接地計算該函數,于是我們通過(guò)通信中PCM編碼得到的靈感,找到斜率為2的冪次方的折線(xiàn)段的端點(diǎn)坐標存入查找表,對輸入的x即可找到對應區間,然后通過(guò)移位即可進(jìn)行對sigmoid曲線(xiàn)的線(xiàn)性逼近。
3.2.3 乘累加模塊
本模塊中,神經(jīng)網(wǎng)絡(luò )中第一層算出的80個(gè)結點(diǎn)為輸入,與訓練完成的神經(jīng)網(wǎng)絡(luò )權值矩陣W2進(jìn)行矩陣運算。模塊調用乘累加IP核,在模塊內調用神經(jīng)網(wǎng)絡(luò )的權值矩陣rom2,與頂層的ram2讀取的80個(gè)結點(diǎn)數據進(jìn)行乘累加運算,每次運算完成后進(jìn)行數據的流水輸出至Sigmoid模塊,同時(shí)給出相應ram寫(xiě)入使能的控制。當接收到開(kāi)始信號有效,模塊開(kāi)始工作,結束后輸出完成信號。
3.3 神經(jīng)網(wǎng)絡(luò )訓練
神經(jīng)網(wǎng)絡(luò )的訓練應采用準確的數據進(jìn)行訓練,才可以達到完美的訓練效果。于是我們在FPGA上實(shí)現了車(chē)牌的字符提取之后,編寫(xiě)了一個(gè)串口通信模塊,將采集好的字符矩陣傳輸至電腦端,并以此作為訓練數據。在MATLAB上將權值矩陣訓練好以后,存儲進(jìn)FPGA的矩陣[4]。
4 硬件實(shí)現結果
4.1 硬件實(shí)現
我們使用OV7725攝像頭和LCD作為外設,負責圖像的采集和輸出顯示,自行設計了PCB板,該外設可以通過(guò)插拔的簡(jiǎn)單方式連接起來(lái),上電后可以直接使用。
4.2 結果驗證
圖4是系統實(shí)現的最終效果圖,我們的車(chē)牌對經(jīng)過(guò)輕度旋轉的圖像也有很好的處理效果,在做板級驗證的時(shí)候,我們也測試了輕度旋轉的圖片識別,可以看出,該系統成功地識別出了車(chē)牌。
5 創(chuàng )新點(diǎn)
本作品利用FPGA可編程邏輯器件和簡(jiǎn)單的系統設計,實(shí)現了準確性較高的車(chē)牌識別系統,創(chuàng )新的采用HSV格式用作圖片二值化方法,獲得了很好的區分效果,能夠適應光線(xiàn)變化的不同場(chǎng)景,圖像的提取和字符分割也取得了理想的效果,保證了車(chē)牌識別的正確率,實(shí)現了以神經(jīng)網(wǎng)絡(luò )為核心的專(zhuān)用FPGA圖像識別處理器及結構,將神經(jīng)網(wǎng)絡(luò )和圖像處理模塊在FPGA芯片上實(shí)現。
參考文獻
[1]張靈芳.車(chē)牌識別系統相關(guān)算法研究與改進(jìn)[D].中南大學(xué), 2012.
[2]劉同焰.車(chē)牌識別系統的相關(guān)算法研究與實(shí)現[D].華南理工大學(xué), 2012.
[3]張坤艷,鐘宜亞,苗松池,等.一種基于全局閾值二值化方法的BP神經(jīng)網(wǎng)絡(luò )車(chē)牌字符識別系統[J].計算機工程與科學(xué), 2010, 32(2):88-89.
[4]楊凡,趙建民,朱信忠.一種基于BP神經(jīng)網(wǎng)絡(luò )的車(chē)牌字符分類(lèi)識別方法[J].計算機科學(xué),2005,32(8):192-195.
作者簡(jiǎn)介:
李鑫(1997- ),男,本科生,主要從事信號處理和數字邏輯的學(xué)習。
高佳皓(1997-),男,本科生,主要從事信號與信息處理研究。
李金晟(1997- ),男,本科生,主要從事集成電路設計。
本文來(lái)源于科技期刊《電子產(chǎn)品世界》2019年第3期第77頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處
評論