蒲 浩,李自成
成都理工大學(xué)工程技術(shù)學(xué)院,四川 樂山 614000
車牌智能識別系統(tǒng)是一種利用計算機(jī)視覺和模式識別技術(shù),能夠自動識別車輛車牌號碼的系統(tǒng)。隨著交通管理和車輛監(jiān)控的需求不斷增加,車牌智能識別系統(tǒng)在實際應(yīng)用中發(fā)揮著重要的作用。但目前國內(nèi)車牌智能識別系統(tǒng)存在制造成本高、識別效率低等問題。基于此,本文設(shè)計了一種高效、準(zhǔn)確的車牌智能識別系統(tǒng)。為實現(xiàn)車牌的高效識別傳輸,該系統(tǒng)選擇了MATLAB與單片機(jī)串行通信方式。MATLAB可通過串行通信與單片機(jī)進(jìn)行數(shù)據(jù)的雙向交互,實現(xiàn)數(shù)據(jù)的傳輸和控制;MATLAB同時具有強(qiáng)大的數(shù)據(jù)處理能力,可對從單片機(jī)接收到的數(shù)據(jù)進(jìn)行實時處理、分析和可視化。單片機(jī)相比于其他采集芯片具有體型小巧、價格便宜、性能可靠等優(yōu)點,同時具有快速的響應(yīng)速度和較好的實時性,因此,采用單片機(jī)進(jìn)行串行通信既可高效地完成采集任務(wù),又能大大節(jié)約成本。本文設(shè)計的系統(tǒng)具有較高的識別率和實時性能,可在交通管理和車輛監(jiān)控領(lǐng)域發(fā)揮重要作用。
本文設(shè)計的車牌智能識別系統(tǒng)主要包括車牌圖像采集、圖像預(yù)處理、字符分割、字符識別和結(jié)果顯示等模塊。其中,車牌圖像采集模塊主要由單片機(jī)完成從攝像獲取車牌圖像,單片機(jī)可較好地控制攝像頭進(jìn)行圖像采集并通過串行通信接口傳輸給PC機(jī);圖像預(yù)處理模塊對圖像進(jìn)行灰度化、圖像增強(qiáng)等操作;字符分割模塊將車牌圖像分割成單個字符;字符識別模塊利用模板匹配法對字符進(jìn)行識別;結(jié)果顯示模塊將識別結(jié)果顯示出來。
該系統(tǒng)的設(shè)計架構(gòu)包括使用AT89C51單片機(jī)作為下位機(jī),通過PC機(jī)作為上位機(jī)實現(xiàn)實時車牌數(shù)據(jù)的采集與分析處理。在MATLAB環(huán)境中,可通過如圖1所示的結(jié)構(gòu)來實現(xiàn)PC機(jī)與單片機(jī)之間的串行通信。
圖1 基于MATLAB環(huán)境下串行通信的實時數(shù)據(jù)采集處理系統(tǒng)結(jié)構(gòu)
為解決PC機(jī)串口與單片機(jī)串口由于使用的工作電氣規(guī)范不一致而無法直接進(jìn)行串行通信工作的問題,使用MAX-485電平轉(zhuǎn)換芯片將RS485串行接口與單片機(jī)輸入與輸出串口進(jìn)行電平轉(zhuǎn)換連接。相較于RS-232芯片,RS485芯片具有更好的兼容性和更快的數(shù)據(jù)傳輸速度(10 Mbit/s),并且能夠抵御共模噪聲的干擾。在系統(tǒng)運行時,為進(jìn)行對PC機(jī)串行口的讀寫操作,MATLAB會通過調(diào)用設(shè)備控制工具箱中的serial類及相關(guān)函數(shù),創(chuàng)建一個串口設(shè)備對象,獲取設(shè)備的文件句柄,并以文件操作方式進(jìn)行操作[1-2]。
根據(jù)以上分析可知,PC機(jī)通過MATLAB向串行口發(fā)送指令,AT89C51單片機(jī)會對此作出反應(yīng),并將A/D采樣分析數(shù)據(jù)通過串行口回送。MATLAB對車牌數(shù)據(jù)進(jìn)行了讀取、預(yù)處理、車牌定位、字符分割、字符識別以及車牌識別等操作后,通過中斷的方式實時發(fā)送經(jīng)PC機(jī)分析的車牌數(shù)據(jù),然后通過AT89C51單片機(jī)實時接收并顯示車牌號碼。
AT89C51單片機(jī)采用中斷方式下的全雙工形式進(jìn)行異步串行通信,51單片機(jī)的串行通信接口有2個外部引腳分別為-P3.0/RXD(串行口輸入引腳)和P3.1/TXD(串行口輸出引腳),引腳信號電平為TTL電平(0~5 V),而現(xiàn)代PC機(jī)的引腳電平為RS232電平(-12~12 V)[3],因此通信中需要采用RS232標(biāo)準(zhǔn)接口進(jìn)行電平轉(zhuǎn)換。但由于RS232接口存在傳輸速率慢、距離近等不足,故該設(shè)計系統(tǒng)采用RS485標(biāo)準(zhǔn)接口,它所提供的數(shù)據(jù)傳輸速率高達(dá)10 Mb/s,通信數(shù)據(jù)傳輸距離高達(dá)1 200 m,是一種十分經(jīng)濟(jì),并具有噪聲抑制率高、傳輸速率快、傳輸距離長特點的通信平臺。在硬件電路中,單片機(jī)與PC機(jī)應(yīng)實現(xiàn)直接通信還需要選用MAX485電平轉(zhuǎn)換芯片來實現(xiàn)雙機(jī)通信。將MAX485經(jīng)轉(zhuǎn)換電平后的11引腳(輸入)接到單片機(jī)發(fā)送數(shù)據(jù)串口TXD端,其14引腳(輸出)接到單片受數(shù)據(jù)串口RXD端。PC機(jī)與單片機(jī)通信連接結(jié)構(gòu)如圖2所示。
圖2 PC機(jī)與單片機(jī)通信連接結(jié)構(gòu)
2.2.1 MATLAB串行通信程序設(shè)計
1)在MATLAB環(huán)境下,進(jìn)行下位機(jī)單片機(jī)的串口數(shù)據(jù)讀取的方法有查詢方式和中斷方式2種。①查詢方式是使用串口對象的read函數(shù)進(jìn)行查詢。首先創(chuàng)建1個串口對象,然后使用fopen函數(shù)打開串口連接,接下來使用read函數(shù)讀取指定數(shù)量的數(shù)據(jù)。查詢方式是一種主動讀取數(shù)據(jù)的方式,需要不斷地調(diào)用read函數(shù)來獲取數(shù)據(jù),無法對下位機(jī)所采集到的數(shù)據(jù)進(jìn)行實時處理。②中斷方式是使用串口對象的回調(diào)函數(shù)進(jìn)行中斷讀取:首先創(chuàng)建一個串口對象,然后使用fopen函數(shù)打開串口連接,將回調(diào)函數(shù)與串口對象關(guān)聯(lián),當(dāng)有數(shù)據(jù)到達(dá)時,自動調(diào)用回調(diào)函數(shù)來讀取數(shù)據(jù)。中斷方式是一種被動讀取數(shù)據(jù)的方式,當(dāng)有數(shù)據(jù)到達(dá)時會立刻進(jìn)行讀取。
為能夠快速地實時進(jìn)行數(shù)據(jù)傳輸,本文設(shè)計的系統(tǒng)采用的讀取方式為中斷方式,這樣可實時處理下位機(jī)發(fā)送的數(shù)據(jù)信息。
2)為實現(xiàn)PC機(jī)與單片機(jī)進(jìn)行串行通信,除了確定通信方式外還應(yīng)設(shè)置通信協(xié)議,在MATLAB中,可使用串口通信工具箱通信:首先創(chuàng)建1個串口對象,然后設(shè)置好串口的屬性值(端口號、波特率等參數(shù)),接著使用串口對象的函數(shù)發(fā)送和接受數(shù)據(jù)[4]。
MATLAB串口通信主要編程程序如下。
s=serial(‘COM1’); %創(chuàng)建串口對象
set(s,’BaudRate’,9600); %設(shè)置其屬性值
fopen(s); %連接設(shè)備
fprintf(s,’*IDN?’); %讀/寫操作
out=fscanf(s);%讀取數(shù)據(jù),然后格式化為文本
fclose(s) %斷開連接
delete(s) %清理內(nèi)存中串口對象
clear s %清除MATLAB工作空間串口對象
2.2.2 51單片機(jī)串行通信程序設(shè)計
在單片機(jī)端,需要編寫相應(yīng)的串行通信程序。將單片機(jī)控制的攝像頭捕獲到的車牌圖像經(jīng)過圖像數(shù)據(jù)轉(zhuǎn)換后,通過UART(異步通信)串口傳輸給PC機(jī)。系統(tǒng)根據(jù)選擇的通信方式和協(xié)議,在單片機(jī)的代碼中配置串口相關(guān)的寄存器和參數(shù),將捕獲的車牌數(shù)據(jù)轉(zhuǎn)換為圖像數(shù)據(jù),然后通過串口將圖像數(shù)據(jù)發(fā)送給MATLAB以實現(xiàn)通信。單片機(jī)進(jìn)行數(shù)據(jù)傳輸?shù)耐ㄐ胚^程如下。
1)通信雙方均使用9 600 bit/s的高速率傳送數(shù)據(jù),使用主從式通信,PC機(jī)為主動發(fā)送數(shù)據(jù),單片機(jī)為被動接受數(shù)據(jù),雙方在發(fā)送和接收數(shù)據(jù)時使用中斷方式。
2)雙機(jī)開始通信時,打開串口,主機(jī)向串口發(fā)送發(fā)射數(shù)據(jù)信號,然后通信串口向單片機(jī)串口發(fā)送數(shù)據(jù)。
3)從機(jī)在接收完數(shù)據(jù)指令后向串口發(fā)送車牌圖像數(shù)據(jù)。
4)PC機(jī)接收到單片機(jī)發(fā)送的圖像數(shù)據(jù)后對接收到的車牌數(shù)據(jù)進(jìn)行處理分析。
5)最終顯示出車牌號碼。單片機(jī)串口通信部分程序如下。
#include〈reg52.h〉
void main(){
Serial begin(9600);//設(shè)置本地串口波特率為9600
Serial begin(9600);//設(shè)置外部串口波特率為9600}
void loop(){
//捕獲車牌圖像并轉(zhuǎn)換為圖像數(shù)據(jù)
//將圖像壓縮為適當(dāng)格式(PNG)
const int imgeaSize=sizeof(‘r9888.png’);//定義圖片數(shù)據(jù)大小
sendlmage(‘r9888.png’);//發(fā)送圖片數(shù)據(jù)到PC機(jī)
delay(5);//延時5 ms方便MATLAB讀取數(shù)據(jù)}
void sendImage(){//發(fā)送圖片數(shù)據(jù)循環(huán)程序
for (int i=0;i } 智能車牌識別系統(tǒng)可利用圖像處理、模式識別等技術(shù)自動完成對車牌號碼的識別、跟蹤與定位。它通過攝像頭拍攝車牌圖像,利用先進(jìn)的圖像處理技術(shù)和模式識別算法,自動進(jìn)行車牌信息的提取和輸出顯示。在軟件模塊設(shè)計中,本文采用MATLAB軟件來進(jìn)行分析研究設(shè)計。車牌自動識別的設(shè)計具體流程如圖3所示。 圖3 車輛自動識別流程 從攝像頭識別的車牌圖像中進(jìn)行車牌識別是一個重要的環(huán)節(jié)。為準(zhǔn)確識別車牌,需要先進(jìn)行圖像預(yù)處理,以提升圖像質(zhì)量并提取有用信息。圖像預(yù)處理是指在識別圖像之前,需要執(zhí)行圖像轉(zhuǎn)換為灰度圖像、去除圖像中的噪聲、增強(qiáng)圖像的質(zhì)量和檢測圖像的邊緣等步驟。這些步驟可為后續(xù)的車牌字符定位與分割打下基礎(chǔ)。 3.2.1 圖像灰度化 單片機(jī)攝像設(shè)備采集到的車牌圖像照片大部分均為RGB類型的彩色圖像。而彩色圖像的處理通常更加復(fù)雜,因為它需要用3個值(紅色、綠色、藍(lán)色)來表示每個像素顏色,所占儲存空間也更大。為加快圖像處理速度并減少存儲空間,車牌識別前需要對車牌進(jìn)行灰度化單色處理,這樣可更準(zhǔn)確地提取車牌號碼特征?;叶葓D像一般呈現(xiàn)出黑色與白色間多種級別的顏色深度,比人眼識別的顏色范圍更廣,所以,使用灰度圖像可更準(zhǔn)確地識別車牌信息。 本文系統(tǒng)通過使用MATLAB中的rgb2gray函數(shù)來實現(xiàn)灰度轉(zhuǎn)化處理,調(diào)用方式為X=rgb2gray(RGB)。實現(xiàn)關(guān)鍵代碼如下。 RGB=imread(‘r9888.png’);%讀取車牌圖像 X=rgb2gray(RGB); %車牌灰度化 subolt(2.2.1); imshow(X); %顯示圖像 但無論活到哪個程度,只能是你自己。自己才是唯一的,是拯救的主力,也是悲憫眾生的主體。早年錯誤而榮幸地喜歡上了寫東西。是的,我一直不敢自稱作家詩人,只能說自己是寫東西的。因為我知道,天才已經(jīng)在我們中間成批降臨,相對于天才,類似我這樣的寫東西的,只能說是湊熱鬧而已。好在,到了這個年齡,一切都看開了。再說,文學(xué)之道,在于推陳出新,再好的作家詩人,也不可能壟斷、興盛一輩子。一個凡庸的寫東西的人,好好做自己,寫自己的,不斷覺悟,寬闊,自覺,就已經(jīng)足夠了。 3.2.2 圖像增強(qiáng) 圖像進(jìn)行灰度處理后,常常無法得到理想的灰度值,導(dǎo)致圖像細(xì)節(jié)不夠清晰、畫面模糊,這給提取車牌邊緣特征增加了困難,因此需要對圖像進(jìn)行增強(qiáng)處理,以增加對比度,使車牌號中的字符更加清晰可見。 在系統(tǒng)設(shè)計中,通過采用直方圖修正技術(shù)-直方圖均衡化,從而提高圖像對比度和亮度分布。通過調(diào)用X1=histeq(X)函數(shù)對圖像的直方圖進(jìn)行修正,使像素數(shù)值的分布更加均勻,因而增強(qiáng)了圖像的視覺效果,改善了字符的清晰度。 為提高車牌識別的準(zhǔn)確性,系統(tǒng)設(shè)計中采用圖像膨脹的方法來填補(bǔ)由于遮擋導(dǎo)致車牌號碼斷裂的空隙,以便更容易、準(zhǔn)確地識別出車牌號碼。該系統(tǒng)使用imdilate函數(shù)對圖像進(jìn)行膨脹操作。經(jīng)過膨脹過后的車牌號碼對比度將更高,這時還需要對車牌進(jìn)行腐蝕處理,調(diào)用imclose函數(shù)使其他不屬于車牌區(qū)域的事物灰度值降低,再設(shè)置不同灰度閾值將不屬于車牌區(qū)域圖像進(jìn)行移除處理。 3.2.3 邊緣檢測 為準(zhǔn)確地定位和識別車牌字符,須先進(jìn)行圖像邊緣檢測處理。邊緣檢測可大大減少與車牌號碼無關(guān)的信息量,并減少噪聲,保護(hù)圖像的重要結(jié)構(gòu)屬性,從而簡化車牌信息,提高圖像質(zhì)量,便于定位車牌區(qū)域并進(jìn)行字符識別。邊緣檢測方法是最常用于檢測灰度級之間不連續(xù)的方法,目前,邊緣檢測的主要方法是基于亮度不連續(xù)性的檢測,可通過使用一階和二階導(dǎo)數(shù)邊緣檢測算子來實現(xiàn)。 實現(xiàn)關(guān)鍵代碼如下。 X3=edge(X2,’canny’,thresh,sigma);% Canny邊緣檢測 subplot(2.1.1); imshow(X3); %圖像輸出效果圖 title(‘邊緣檢測圖像) 3.3.1 車牌定位 對車牌圖像進(jìn)行一系列預(yù)處理操作后,車牌區(qū)域已變得十分明顯。此時,只需要使用圖形的形態(tài)處理方法來確定車牌區(qū)域的大致范圍,并通過形態(tài)學(xué)操作灰度開運算來準(zhǔn)確定位?;叶乳_運算的步驟為先進(jìn)行灰度腐蝕,然后進(jìn)行灰度膨脹。根據(jù)開運算處理后的結(jié)果,在圖像的特定區(qū)域內(nèi)出現(xiàn)了明顯的灰度變化,可通過設(shè)定適當(dāng)?shù)拈撝祦泶_定車牌的準(zhǔn)確位置,并將其分割出來。 實現(xiàn)關(guān)鍵代碼如下。 se=str(‘rectangle’,[5,10]); %定義一個矩形結(jié)構(gòu)元素 X4=imdilate(X3,se); %膨脹操作 X5=imfill(X4,’holes’); %t填充孔洞 X6=bwareaopen(X5,500); %去除小于500像素的區(qū)域 props=regionprops(X6,’BoundingBox’); %使用區(qū)域props進(jìn)行車牌區(qū)域識別 boundingBoxes=[props,BoundingBox]; %在原始圖像中繪制車牌區(qū)域 figure;imshow(X1);hold; for i=1:length(boundingBoxes)/4 rectangle(‘position’,boundingBoxes(4×i-3:4×i),’EdgeColor’,’r’,’Linewidth’,2); end hold off; title(‘車牌定位結(jié)果’) 3.3.2 車牌分割 定位車牌區(qū)域后,應(yīng)對車牌進(jìn)行字符分割。中國車牌標(biāo)準(zhǔn)共由7個字符組成。結(jié)合每個字符寬45 mm、長90 mm、間隔寬10 mm、字符筆觸寬10 mm等特點,利用函數(shù)從左到右逐列掃描車牌,求出每列像素點的和[5]。如果像素點之和為0,則代表字符,反之則為空區(qū)域。在尋找字符區(qū)間塊的過程中,本文將區(qū)間塊的有效寬度與一個固定的閾值進(jìn)行比較,并根據(jù)比較結(jié)果進(jìn)行裁剪,然后逐一保存字符圖片,最終可得到7個字符。 在進(jìn)行識別前,需要先使用imresize函數(shù)對字符的位置和大小進(jìn)行歸一化處理。該系統(tǒng)使用模板匹配的方法來識別單個字符數(shù)據(jù),提取數(shù)據(jù)的二值數(shù)字點陣。通過與字符模板庫進(jìn)行比對,根據(jù)字符像素點的特征進(jìn)行判斷匹配,選擇像素級差異最小的作為最佳匹配結(jié)果,并輸出最終的識別結(jié)果。最終仿真識別效果如圖4所示。 圖4 基于MATLAB與單機(jī)片串行通信下的車牌智能識別系統(tǒng) 本文針對汽車車牌智能識別系統(tǒng)提出了一種結(jié)合MATLAB與單片機(jī)兩者優(yōu)點的串行通信方案。MATLAB與單片機(jī)串行通信為汽車車牌智能識別系統(tǒng)的設(shè)計和分析提供了重要的支持。通過合理的串行通信設(shè)計和編程函數(shù),可實現(xiàn)MATLAB與單片機(jī)之間的數(shù)據(jù)傳輸和交互,從而實現(xiàn)車牌的智能識別功能,這對于提高車牌識別系統(tǒng)的性能和實用性具有重要意義。3 圖像處理軟件系統(tǒng)設(shè)計
3.1 識別系統(tǒng)的總體設(shè)計
3.2 車牌圖像預(yù)處理
3.3 車牌定位與分割
3.4 車牌字符識別
4 結(jié)束語