王唯一,祝振中
基于Android平臺車牌識別系統(tǒng)的軟件設(shè)計
王唯一,祝振中
針對車輛的便捷式移動性稽查,以Android平臺為載體,分析了軟件需求與實現(xiàn)方案,研究了基于移動平臺的車牌識別系統(tǒng)的軟件技術(shù)。借助Android系統(tǒng)的開源性,使用Eclipse集成開發(fā)平臺工具,設(shè)計一系列系統(tǒng)功能的布局與架構(gòu),并建立基本的終端應(yīng)用程序界面,開發(fā)了一套可以運行在Android智能手機中的車牌識別APP軟件,以實現(xiàn)車牌定位、字符分割、字符識別三大核心功能。經(jīng)過系統(tǒng)的測試與運行,研制的車牌識別系統(tǒng)具有良好的性能,可以滿足用戶的基本需求。
軟件設(shè)計;開源;布局;車牌識別
手機是人們現(xiàn)代生活中必不可少的工具,它的功能不局限于通信領(lǐng)域,也集成了各種便捷的應(yīng)用功能。利用手機對城市車輛進行快速稽查與校驗,能夠節(jié)省大量的人力物力資源。車牌識別系統(tǒng),作為智能交通系統(tǒng)的重要組成部分,逐漸從傳統(tǒng)平臺,過渡到智能移動終端平臺。
Android是Google公司推出的一款移動平臺操作系統(tǒng),主要由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成[1]。它延續(xù)了Linux系統(tǒng)的自由及開放源代碼的特點,是一個開放的體系架構(gòu),實行多任務(wù)處理機制。Android系統(tǒng)采用Java語言作為程序開發(fā)語言,提供了良好的開發(fā)和程序調(diào)試環(huán)境。該平臺為設(shè)計及開發(fā)車牌識別系統(tǒng)提供了條件。
圖1 用戶需求模塊示意圖
1.1 識別系統(tǒng)需求分析
車牌識別系統(tǒng)的用戶需求模塊示意圖如圖1所示:
通過分析,可以對各個子模塊的功能按實際要求進行設(shè)計與規(guī)劃。
圖像采集:通過調(diào)用系統(tǒng)的攝像頭,系統(tǒng)可完成圖片的攝入。目前大部分智能終端設(shè)備都配有高精度的攝像功能,借助Android平臺的拓展性,該功能的實現(xiàn)具有較好的硬件平臺支持。
車牌定位:車牌定位是在攝入的汽車圖片中,尋找到車牌區(qū)域的位置,完成車牌區(qū)域與背景區(qū)域的分離。從車輛圖片中,準確可靠地定位出車牌區(qū)域,并提取出來,是提高系統(tǒng)識別率的關(guān)鍵。
字符分割:車牌區(qū)域被定位并提取出之后,需要把車牌區(qū)域七個字符分割成獨立的字符圖片,并使分割出的字符單獨顯示。字符分割是車牌定位和字符識別的樞紐,分割效果的準確性也很重要。
字符識別:分割出來的字符塊圖片,經(jīng)過歸一化處理后,可進行特征的提取,再經(jīng)過一系列的匹配計算,完成車牌字符的識別。車牌信息就可以顯示在文本框中,供用戶查看。
信息存儲:信息存儲模塊負責(zé)把識別出的字符集,存儲到本地數(shù)據(jù)庫,方便用戶對車牌信息的后續(xù)操作。
1.2 識別系統(tǒng)軟件設(shè)計分析
Android系統(tǒng)有4大基本組件(Activity:界面,Service:服務(wù),Content Provider:內(nèi)容提供者,BroadcastReceiver:廣播接收器)。在進行應(yīng)用程序開發(fā)時,都是通過操作這些組件來實現(xiàn)的。本文主要采用Activity來進行軟件的設(shè)計與實現(xiàn)。在Activity中,通過設(shè)置代碼來調(diào)用各類控件和程序進行交互,實現(xiàn)相應(yīng)的應(yīng)用功能。
Android采用分層的架構(gòu),主要分為四層:應(yīng)用層(Application)、應(yīng)用框架層(Application Framework)、系統(tǒng)運行庫(Libraries)和Linux內(nèi)核層(Linux Kernel)。應(yīng)用框架層,是主要的核心資源層,為車牌識別系統(tǒng)的開發(fā)提供基本的類庫,程序的軟件設(shè)計也是基于該層而構(gòu)思的。
Android 開發(fā)中,建立工程文件后,才能完成代碼的編寫和測試[2]。基于 Android 應(yīng)用軟件開發(fā)流程圖如圖2所示:
圖2 程序開發(fā)流程圖
在 Eclipse開發(fā)平臺中構(gòu)建車牌識別應(yīng)用程序,需在layout文件中的activity_main.xml完成用戶界面的設(shè)計和布局,在src目錄下完成 Java 主程序MainActivity的編寫,在Manifest文件中,進行Android相關(guān)權(quán)限的配置,主要針對外存SD卡文件的操作和讀寫處理。選取部分配置代碼如下所示:
配置完成后,車牌識別系統(tǒng)的信息處理有一個較好的運行環(huán)境,數(shù)據(jù)就可以方便地進行輸入輸出與存儲。
設(shè)計基于移動端的車牌識別系統(tǒng),需要有思路清晰且可行性強的方案,明確系統(tǒng)的各個功能架構(gòu)。Android開發(fā)平臺,具有交互性強的圖形化用戶開發(fā)界面,能讓編程人員充分利用各個可視化控件,完成車牌軟件界面的布局和識別功能模塊的設(shè)計。根據(jù)所設(shè)計的用戶界面,可以把主程序放在一個包文件里,分程序放置在另一個包文件里,這樣可以方便識別分程序之間的調(diào)用,避免程序的混亂,有利于程序代碼的編寫與調(diào)試。車牌識別系統(tǒng)方案設(shè)計圖如圖3所示:
圖3 車牌識別系統(tǒng)方案設(shè)計圖
根據(jù)車牌識別系統(tǒng)的實際情況,應(yīng)充分考慮用戶的主觀感受,進行識別系統(tǒng)控件的布局與規(guī)劃[3]。為了合理使用系統(tǒng)的圖形化用戶組件,降低識別系統(tǒng)的操作難易程度,提高實時性響應(yīng)速度,需調(diào)用如下Android基本控件:
Button控件:Button控件是常用的實現(xiàn)事件監(jiān)聽功能的按鈕??梢酝ㄟ^對應(yīng)的按鈕操作來響應(yīng)單擊事件,實現(xiàn)用戶設(shè)定的功能。本文的圖像采集、車牌定位、字符分割與識別,以及信息存儲功能模塊,都是通過Button來實現(xiàn)的。
ImageView控件:用來顯示圖片的常用功能性控件,在該界面中,可以顯示待識別的車輛圖片。
TextView控件:提供了類似標簽的文本顯示操作,可以把識別系統(tǒng)的相關(guān)標記信息進行顯示。
EditText控件:識別出的車牌文字信息可以在 EditText編輯框控件中顯示,具有良好的人機交互性。
ListView控件:一種具有滾動效果的視圖控件,可以將存儲的車牌信息進行顯示,供用戶查看。
在Layout文件夾中,設(shè)置activity_main.xml文件,對控件進行規(guī)劃、調(diào)整。本文采用的線性布局是一種基本的布局方式,可以對控件進行水平或垂直排列。識別系統(tǒng)主要劃分了3個區(qū),每個區(qū)用一個線性布局來布置。在Activity主界面中,本文設(shè)計的車牌識別系統(tǒng)軟件布局圖如圖4所示:
圖4 移動式車牌識別系統(tǒng)布局示意圖
經(jīng)過軟件的布局規(guī)劃,本文詳盡地設(shè)計了車牌識別系統(tǒng)的各個功能區(qū),使系統(tǒng)的UI界面簡潔,各個分區(qū)功能明確,這樣就可以進行軟件的編程與實現(xiàn)[4]。在每個功能區(qū)中,編輯對應(yīng)的代碼模塊,來實現(xiàn)相應(yīng)的事件處理。
從實際需求出發(fā),設(shè)計相應(yīng)的功能實現(xiàn)流程與規(guī)劃,滿足車牌識別系統(tǒng)的總體設(shè)計要求。
3.1 圖像采集模塊設(shè)計
車牌識別系統(tǒng)中的車輛圖片可以通過攝像頭采集,也可以通過系統(tǒng)自帶的相冊功能,調(diào)用指定的圖片,加載圖像,顯示在 ImageView控件中。詳細的程序設(shè)計流程圖如圖 5所示:
圖5 圖像采集設(shè)計流程圖
其中 MediaStore.ACTION_IMAGE_CAPTURE是系統(tǒng)的靜態(tài)方法,可以調(diào)用該方法,啟動系統(tǒng)自帶的攝像機拍攝車輛照片。Intent.ACTION_GET_CONTENT也是靜態(tài)方法,可以通過它來瀏覽系統(tǒng)相冊中保存的圖片,選擇指定的一張來進行顯示。圖像進入識別系統(tǒng)后,最終顯示在已設(shè)定的視圖組件(ImageView圖片顯示組件)中。
3.2 車牌定位模塊設(shè)計
圖片進入車牌識別系統(tǒng)后,就進入車牌定位的環(huán)節(jié)。在主函數(shù)中,通過調(diào)用自主設(shè)計的車牌定位函數(shù),處理車輛圖片。把圖片轉(zhuǎn)換成位圖之后,進行顏色空間模型的轉(zhuǎn)換,通過定位核心程序處理,定位出車牌。函數(shù)的調(diào)用關(guān)系如圖6所示:
圖6 車牌定位程序設(shè)計圖
其中K-means是顏色聚類函數(shù),把車輛圖片劃分成不同的顏色區(qū)塊,便于車牌目標區(qū)域的檢測。Orientation負責(zé)將聚類后圖片的每個顏色區(qū)塊中,找尋出最符合設(shè)定比例的車牌矩形區(qū)。Erzhihua對定位出的車牌區(qū)進行二值化處理,使得車牌底色和字符色黑白分明。CutFrame把車牌多余的邊框去除, CutWhite則去掉車牌多余的空白區(qū)。經(jīng)過上述的函數(shù)處理后,只包含字符的車牌將單獨顯示在一個ImageView控件中。
3.3 車牌字符分割和識別模塊設(shè)計
車牌定位后,進入字符分割及識別環(huán)節(jié)。如圖7所示:
圖7 字符分割及識別設(shè)計流程圖
設(shè)計垂直投影函數(shù)WordsCut分割車牌區(qū)域字符和模板匹配函數(shù)CharRC來識別分割出的單字字符。設(shè)計三個字符庫模板,使用31個省市簡稱漢字模板,0~9阿拉伯數(shù)字模板,24個英文字母模板(去除字母I和O),模板匹配法就可以順利進行車牌字符的識別。把分割出的單字字符與模板中的每個標準字符進行匹配,將相似度最大的模板字符作為識別出的字符,進行顯示。
3.4 車牌信息存儲模塊設(shè)計
車牌信息被識別出后,顯示在 EditText(文本框)中,之后還需將其保存至本地數(shù)據(jù)庫,并顯示在 ListView控件(滑動視圖)中。SQLite是一種關(guān)系型數(shù)據(jù)庫,一般用于嵌入式產(chǎn)品的開發(fā)與研究。本文采用SQLite,設(shè)計了適合識別系統(tǒng)的數(shù)據(jù)庫,對識別出的車牌字符進行存儲。如圖8所示:
圖8 車牌信息存儲設(shè)計流程圖
使用SQLiteDatabase類的各種封裝的方法[5](insert:插入、delete:刪除、update:更新),對車牌信息進行一系列的操作。
至此,Android平臺的車牌識別系統(tǒng)的軟件設(shè)計已完成。為了使其有更好的用戶體驗效果,設(shè)置背景圖片,使用戶在視覺上有一定的舒適度;設(shè)計按鈕圓角邊框效果,讓系統(tǒng)具有一定的美觀性。最終設(shè)計完成的車牌識別系統(tǒng)如圖9所示:
圖9 移動式車牌識別系統(tǒng)示意圖
本文設(shè)計的車牌識別系統(tǒng),所用的函數(shù)模塊和基本的程序流程,完全遵循軟件設(shè)計的規(guī)則。采用 Android 軟件開發(fā)平臺,充分利用其開放性、便捷性、無界性,來完成系統(tǒng)的整體布局、設(shè)計和實現(xiàn),便于程序的二次架構(gòu)與開發(fā)。借助Eclipse集成開發(fā)工具,建立工程文件,編寫、調(diào)試程序代碼,將識別系統(tǒng)打包生成 apk 文件。在手機端進行的真機測試,驗證了程序代碼的正確性及有效性、識別系統(tǒng)的可用性及準確性。移動式車牌識別系統(tǒng),能夠靈活地識別車牌號碼,具有較好的實用價值和寬廣的市場前景。借助移動互聯(lián)網(wǎng)的發(fā)展契機,推廣該車牌識別系統(tǒng)的應(yīng)用,能促進智能交通系統(tǒng)的發(fā)展。
[1] 劉衛(wèi)國. Android的架構(gòu)與應(yīng)用開發(fā)研究[J].計算機系統(tǒng)應(yīng)用,2008(11): 110-112.
[2] 魏崇毓,張菲菲. 基于Android 平臺的視頻監(jiān)控系統(tǒng)設(shè)計[J].計算機工程,2012,38(14): 214-216.
[3] Kwang K,Keechul J. Color Texture-based Object Detection: An Application to License Plate Localization[J]. Pattern Recognition with Support Vector Machines,2002: 293-309.
[4] 趙大偉,陳剛.基于TMS320C6446的車牌識別系統(tǒng)的研究與設(shè)計[J].微型電腦應(yīng)用,2012,28 (8):40-44.
[5] 李興華. Android開發(fā)實戰(zhàn)經(jīng)典[M]. 北京:清華大學(xué)出版社,2012.
Software Design of License Plate Recognition System Based on Android Platform
Wang Weiyi, Zhu Zhenzhong
(School of Mechatronic Engineering and Automation, Shanghai University, Shanghai 200072, China)
Taking the Android platform as the carrier, especially for the convenient mobility inspection for vehicles, this paper analyzes the software requirement and implementation scheme. The software design and development of the vehicle license plate recognition system based on the mobile platform are studied. With Android system open source, a series of layout and architecture of system functions are designed by using Eclipse integrated development platform tools. The basic terminal application interface is established. A set of APP software of license plate recognition which can run in the Android smart phone and can achieve three core functions of license plate location, character segmentation, character recognition is developed. After testing and running of the system, the license plate recognition system proposed in this paper has good performance, and can meet the basic needs of users.
Software Design; Open Source; Layout; License Plate Recognition
TP311
A
1007-757X(2016)09-0038-03
2016.01.14)
王唯一(1961-),男,上海大學(xué)機電工程與自動化學(xué)院,副教授,博士,研究方向:圖像分析與處理,計算機控制技術(shù),上海 200072祝振中(1990-),男,上海大學(xué)機電工程與自動化學(xué)院,碩士研究生,研究方向:Android應(yīng)用軟件開發(fā),上海 200072