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