蔡曉宇
(安徽師范大學皖江學院,蕪湖241000)
基于樹莓派開發(fā)板的車輛識別系統(tǒng)設(shè)計*
蔡曉宇
(安徽師范大學皖江學院,蕪湖241000)
本設(shè)計著手于具有較大實用價值的“車牌識別”,用小巧的嵌入式開發(fā)板接入互聯(lián)網(wǎng),實現(xiàn)物聯(lián)網(wǎng)技術(shù)下的車輛識別。該系統(tǒng)主要由嵌入式開發(fā)板、攝像頭、臺式機組成。嵌入式開發(fā)板采用當下流行的樹莓派開發(fā)板,負責調(diào)用外置的攝像頭模塊采集車牌照片,配合在云端的臺式機,將采集好的相片通過互聯(lián)網(wǎng)上傳至臺式機,臺式機處理傳送來的車牌照片,并返回識別結(jié)果,從而完成整個識別過程。
物聯(lián)網(wǎng)技術(shù);嵌入式;車牌識別
隨著社會城鎮(zhèn)化建設(shè)的不斷推進,不但城市人口的數(shù)量變得日益龐大,而且城市中最重要的交通工具汽車的數(shù)量急劇增加,與日俱增的車輛時刻考驗著城市交通管理的能力。高效、可靠地管理車輛已成為每個城市迫切需求。
隨著信息化的高速發(fā)展,交通管理的自動化、智能化受到了越來越多的關(guān)注。車牌識別系統(tǒng)(License Plate Recognition,LPR)作為智能交通管理系統(tǒng)(Intelligent Traffic System,ITS)的重要組成部分,越來越被重視。車牌識別技術(shù)的探索,促進交通管理的智能化和網(wǎng)絡(luò)化,對于日益趨多的車輛管理的工作有較大幫助。本文提出基于樹莓派開發(fā)板的車牌識別系統(tǒng),實現(xiàn)物聯(lián)網(wǎng)技術(shù)下的車牌識別。
該車輛識別系統(tǒng)主要由臺式機、嵌入式開發(fā)板、攝像頭模塊三個部分組成設(shè)計圖如圖1所示。
圖1 車輛識別設(shè)計圖
該車輛識別系統(tǒng)包括嵌入式開發(fā)板、電源模塊、攝像頭模塊、臺式機模塊、通信模塊。臺式機作為服務(wù)器,控制與之連接的樹莓派開發(fā)板對車牌進行拍照;通信模塊采用Java語言編寫,它們之間的通信通過TCP/IP協(xié)議,實現(xiàn)數(shù)據(jù)的交換和傳輸。 嵌入式開發(fā)板接入互聯(lián)網(wǎng),配合攝像頭模塊可實現(xiàn)在停車場、小區(qū)門禁等需要進行車輛身份驗證的類似場景,快速識別車牌信息。
2.1 臺式機
臺式機部分在Windows環(huán)境下,搭載了由VC2010開發(fā),OpenCV軟件輔助的識別系統(tǒng)。臺式機不斷接收來自嵌入式開發(fā)板的圖像數(shù)據(jù),圖像被處理識別后再由無線傳輸,將識別結(jié)果返回至嵌入式開發(fā)板。
開發(fā)環(huán)境如下:Visual Studio是由微軟公司推出的開發(fā)環(huán)境。它是目前最流行的Windows平臺應用程序開發(fā)環(huán)境之一。Microsoft Visual Studio 2010版本還支持支持微軟云計算架構(gòu)(Windows Azure)、移動與嵌入式裝置開發(fā)以及當前最熱門的敏捷軟件開發(fā)模型,OpenCV(Open Source Computer Vision Library)于1999年由Intel公司建立,現(xiàn)如今為其提供支持的是Willow Garage。OpenCV是一個計算機視覺函數(shù)庫,它是基于開源和跨平臺發(fā)行的。
圖2 TCP方式傳遞圖片
OpenCV作為一個外部函數(shù)庫,可以通過在Windows、Linux環(huán)境下的IDE下配置連接,在編程開發(fā)時直接調(diào)用函數(shù)庫中各種算法對應的函數(shù)就可以實現(xiàn)所需的操作,可以有效地加快開發(fā)速度。由于OpenCV專門針對Intel的處理器做了優(yōu)化,因此在Intel平臺下則表現(xiàn)出更快的速度。
Tesseract是由Ray Smith于1985~1995年間在惠普布里斯托實驗室開發(fā)出來的一個光學字符識別(Optical Character Recognition,OCR)引擎,曾經(jīng)在1995年UNLV精確度測試中名列前茅,但1996年后就停止了開發(fā)。2006年,Google邀請Smith加盟,重新啟動了該項目。該項目目前可以支持Windows、Linux和Mac OS等主流平臺。Tesseract-OCR 3.0.1以后發(fā)布的版本中加入了中文字符識別庫,可以實現(xiàn)對tif、bmp格式中含中文字符的圖像的識別。為了提高識別率,Tesseract-OCR還提供了樣本訓練功能,用戶可以通過收集大量的樣本素材來訓練自己的識別庫,從而可以提高用戶對某些特定性的字符的識別率。在Microsoft Visual Studio 2010平臺下用戶可以通過調(diào)用Tesseract-OCR提供的API接口,將自己訓練的識別庫放入安裝目錄的tessdata中,配置環(huán)境變量后,對待識別的字符圖像進行識別。
2.2 嵌入式開發(fā)板
嵌入式開發(fā)板采用了當下較為流行的樹莓派開發(fā)板。Raspberry,是世界上最小的臺式機,又稱卡片式電腦,外形只有信用卡大小,卻具有電腦的所有基本功能。它是一款基于ARM的微型電腦主板,以SD/Micro SD卡為內(nèi)存硬盤,可連接鍵盤、鼠標和網(wǎng)線,同時擁有視頻模擬信號的電視輸出接口和HDMI高清視頻輸出接口,只需接通電視機和鍵盤,就能執(zhí)行如電子表格、文字處理、玩游戲、播放高清視頻等諸多功能。
本次使用的是樹莓派3B,相較于上代樹莓派,3B的性能更加強大,搭載1.2 GHz 的64位四核處理器,增加802.11 b/g/n無線網(wǎng)卡和低功耗的藍牙4.1,功耗也有小幅度的增加。
由于臺式機接收到的圖像質(zhì)量好壞會直接影響到最終識別的準確,因此如何將攝像頭拍攝的圖像準確性、快速地傳遞給臺式機成了重中之重。
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。由于TCP連接方式的可靠性,如圖2所示,使得圖片在傳輸過程中,數(shù)據(jù)的完整性得到保障。
樹莓派官方預搭載的編程開發(fā)環(huán)境包含了Java語言。Java語言是一種面向?qū)ο蟮恼Z言,它提供了基本的封裝方法來完成指定的任務(wù),只需要傳入必要參數(shù),即可調(diào)用相應方法,得到想要的結(jié)果。Java也適用于小型機,它的基本解釋器及類的支持只有40 KB左右。此外,Java是面向網(wǎng)絡(luò)的語言,通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便地訪問其他對象。本次設(shè)計就使用了Java語言的TCP/IP封裝的方法。
① MAC地址是上網(wǎng)設(shè)備的“身份證號碼”,具有全球唯一性。所以使用路由器綁定臺式機的MAC地址以及多臺樹莓派的MAC地址,指定其內(nèi)部網(wǎng)絡(luò)IP地址,可以方便管理。
② 臺式機作為本次方案的服務(wù)器端,使用了Java多線程技術(shù),監(jiān)聽來自不同IP地址的數(shù)據(jù),并將數(shù)據(jù)保存在指定文件目錄下。
③ 樹莓派作為本次方案的客戶端,通過Java封裝好的方法,實例化Socket流,連接指定IP地址的服務(wù)器端。在其拍照結(jié)束并檢查文件的合法性,確認文件無異常后,通過字節(jié)流將文件發(fā)送給服務(wù)器。
圖3 IP地址分配圖
④ 待文件確認傳輸完畢后,釋放所有資源,等待下次命令的開啟。圖片通過網(wǎng)絡(luò),在發(fā)送端利用TCP/IP協(xié)議傳遞給臺式機,若成功識別,會在指定目錄下生成txt文檔,保存車牌號。
臺式機服務(wù)器端多線程部分:
final ServerSocket server = new ServerSocket(PORT);
new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("開始監(jiān)聽...");
Socket socket = server.accept();
System.out.println("有鏈接");
receiveFile(socket);
}
catch (Exception e) {
System.out.println("服務(wù)器異常");
e.printStackTrace();
}
}
}
}).start();
樹莓派客戶端發(fā)送數(shù)據(jù)部分:
while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
sumL += length;
if(flag != (int)((sumL/l)*100)){
flag = (int)((sumL/l)*100);
System.out.println("已傳輸:"+flag+"%");
}
dos.write(sendBytes, 0, length);
dos.flush();
}
基于樹莓派的云端識別車牌方法,準備過程如下:
① 開啟云端的電腦,接入互聯(lián)網(wǎng)。
② 打開電腦和樹莓派之間相應的通信軟件和識別車輛的軟件,等待樹莓派連接,每連接一個樹莓派,開啟一條線程處理。
③ 樹莓派連接電源模塊,接通電源,為方便管理,為每一臺樹莓派設(shè)置好靜態(tài)固定的IP地址,通過無線網(wǎng)卡連接路由器。
④ 攝像頭正確連接樹莓派,裝入樹莓派保護盒內(nèi),保證工作狀態(tài)下減少外界干擾。并將樹莓派盒子內(nèi)攝像頭正對道路口, 擺在需要車牌識別的地方。
⑤ 通過SSH方式開啟樹莓派通信模塊,驅(qū)動攝像頭,開始工作。
捕捉車輛過程如下:
① 樹莓派開啟后,拍攝圖片,并啟用上傳程序,發(fā)送給云端臺式機。
② 云端臺式機收到連接請求,同意連接,并接受樹莓派發(fā)來的數(shù)據(jù),保存在指定目錄下,啟動識別車牌程序進行車牌的識別。
③ 若識別程序成功定位到車牌,進行識別車牌中的字符,并將結(jié)果保存在指定目錄。
若識別程序未定位到車牌,將舍棄此次數(shù)據(jù),等待下次樹莓派數(shù)據(jù)的傳輸。云端識別流程圖如圖4所示。
識別程序工作過程如下:
本系統(tǒng)基于開源發(fā)行的OpenCV跨平臺計算機視覺函數(shù)庫進行設(shè)計和實現(xiàn),采用Microsoft Visual Studio 2010開發(fā)平臺,運用MFC框架設(shè)計界面,使用C++語言編程,調(diào)用Tesseract-OCR對提取出的車牌字符進行識別,主要分三步來實現(xiàn)車牌識別技術(shù):即車牌定位、字符分割、字符識別。車牌識別系統(tǒng)的工作的總流程如圖5所示。
圖4 云端識別流程圖
圖5 車牌識別流程圖
① 圖像的輸入。本系統(tǒng)處理的圖像都統(tǒng)一調(diào)整為像素為2 592×1 456,經(jīng)過大量實驗,當判定條件的面積選擇為大于10 000時,能夠有效地去除掉微小噪點
Vehicle Identification System Based on Raspberry Pi
Cai Xiaoyu
(Wanjiang College of Anhui Normal University,Wuhu 241000,China)
In the paper,license plate recognition is concerned.With a small development board connecting to the Internet,the license plate recognition is achieved.The system mainly consists of the embedded development board,the camera,the desktop components.The embedded development board uses the current popular Raspberry development board tocall the external camera module acquisition license plate photos.Then the collected photos are uploaded to the desktop through the Internet.The desktop machine processes the transmitted license plate photos and returns the recognition results.
internet of things technology;embedded system;license plate recognition
2016國家級大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目(項目編號:201613617002)。
TP27
A