王唯一,祝振中
基于Android平臺車牌識別系統的軟件設計
王唯一,祝振中
針對車輛的便捷式移動性稽查,以Android平臺為載體,分析了軟件需求與實現方案,研究了基于移動平臺的車牌識別系統的軟件技術。借助Android系統的開源性,使用Eclipse集成開發平臺工具,設計一系列系統功能的布局與架構,并建立基本的終端應用程序界面,開發了一套可以運行在Android智能手機中的車牌識別APP軟件,以實現車牌定位、字符分割、字符識別三大核心功能。經過系統的測試與運行,研制的車牌識別系統具有良好的性能,可以滿足用戶的基本需求。
軟件設計;開源;布局;車牌識別
手機是人們現代生活中必不可少的工具,它的功能不局限于通信領域,也集成了各種便捷的應用功能。利用手機對城市車輛進行快速稽查與校驗,能夠節省大量的人力物力資源。車牌識別系統,作為智能交通系統的重要組成部分,逐漸從傳統平臺,過渡到智能移動終端平臺。
Android是Google公司推出的一款移動平臺操作系統,主要由操作系統、中間件、用戶界面和應用軟件組成[1]。它延續了Linux系統的自由及開放源代碼的特點,是一個開放的體系架構,實行多任務處理機制。Android系統采用Java語言作為程序開發語言,提供了良好的開發和程序調試環境。該平臺為設計及開發車牌識別系統提供了條件。

圖1 用戶需求模塊示意圖
1.1 識別系統需求分析
車牌識別系統的用戶需求模塊示意圖如圖1所示:
通過分析,可以對各個子模塊的功能按實際要求進行設計與規劃。
圖像采集:通過調用系統的攝像頭,系統可完成圖片的攝入。目前大部分智能終端設備都配有高精度的攝像功能,借助Android平臺的拓展性,該功能的實現具有較好的硬件平臺支持。
車牌定位:車牌定位是在攝入的汽車圖片中,尋找到車牌區域的位置,完成車牌區域與背景區域的分離。從車輛圖片中,準確可靠地定位出車牌區域,并提取出來,是提高系統識別率的關鍵。
字符分割:車牌區域被定位并提取出之后,需要把車牌區域七個字符分割成獨立的字符圖片,并使分割出的字符單獨顯示。字符分割是車牌定位和字符識別的樞紐,分割效果的準確性也很重要。
字符識別:分割出來的字符塊圖片,經過歸一化處理后,可進行特征的提取,再經過一系列的匹配計算,完成車牌字符的識別。車牌信息就可以顯示在文本框中,供用戶查看。
信息存儲:信息存儲模塊負責把識別出的字符集,存儲到本地數據庫,方便用戶對車牌信息的后續操作。
1.2 識別系統軟件設計分析
Android系統有4大基本組件(Activity:界面,Service:服務,Content Provider:內容提供者,BroadcastReceiver:廣播接收器)。在進行應用程序開發時,都是通過操作這些組件來實現的。本文主要采用Activity來進行軟件的設計與實現。在Activity中,通過設置代碼來調用各類控件和程序進行交互,實現相應的應用功能。
Android采用分層的架構,主要分為四層:應用層(Application)、應用框架層(Application Framework)、系統運行庫(Libraries)和Linux內核層(Linux Kernel)。應用框架層,是主要的核心資源層,為車牌識別系統的開發提供基本的類庫,程序的軟件設計也是基于該層而構思的。
Android 開發中,建立工程文件后,才能完成代碼的編寫和測試[2]。基于 Android 應用軟件開發流程圖如圖2所示:

圖2 程序開發流程圖
在 Eclipse開發平臺中構建車牌識別應用程序,需在layout文件中的activity_main.xml完成用戶界面的設計和布局,在src目錄下完成 Java 主程序MainActivity的編寫,在Manifest文件中,進行Android相關權限的配置,主要針對外存SD卡文件的操作和讀寫處理。選取部分配置代碼如下所示:

配置完成后,車牌識別系統的信息處理有一個較好的運行環境,數據就可以方便地進行輸入輸出與存儲。
設計基于移動端的車牌識別系統,需要有思路清晰且可行性強的方案,明確系統的各個功能架構。Android開發平臺,具有交互性強的圖形化用戶開發界面,能讓編程人員充分利用各個可視化控件,完成車牌軟件界面的布局和識別功能模塊的設計。根據所設計的用戶界面,可以把主程序放在一個包文件里,分程序放置在另一個包文件里,這樣可以方便識別分程序之間的調用,避免程序的混亂,有利于程序代碼的編寫與調試。車牌識別系統方案設計圖如圖3所示:

圖3 車牌識別系統方案設計圖
根據車牌識別系統的實際情況,應充分考慮用戶的主觀感受,進行識別系統控件的布局與規劃[3]。為了合理使用系統的圖形化用戶組件,降低識別系統的操作難易程度,提高實時性響應速度,需調用如下Android基本控件:
Button控件:Button控件是常用的實現事件監聽功能的按鈕。可以通過對應的按鈕操作來響應單擊事件,實現用戶設定的功能。本文的圖像采集、車牌定位、字符分割與識別,以及信息存儲功能模塊,都是通過Button來實現的。
ImageView控件:用來顯示圖片的常用功能性控件,在該界面中,可以顯示待識別的車輛圖片。
TextView控件:提供了類似標簽的文本顯示操作,可以把識別系統的相關標記信息進行顯示。
EditText控件:識別出的車牌文字信息可以在 EditText編輯框控件中顯示,具有良好的人機交互性。
ListView控件:一種具有滾動效果的視圖控件,可以將存儲的車牌信息進行顯示,供用戶查看。
在Layout文件夾中,設置activity_main.xml文件,對控件進行規劃、調整。本文采用的線性布局是一種基本的布局方式,可以對控件進行水平或垂直排列。識別系統主要劃分了3個區,每個區用一個線性布局來布置。在Activity主界面中,本文設計的車牌識別系統軟件布局圖如圖4所示:

圖4 移動式車牌識別系統布局示意圖
經過軟件的布局規劃,本文詳盡地設計了車牌識別系統的各個功能區,使系統的UI界面簡潔,各個分區功能明確,這樣就可以進行軟件的編程與實現[4]。在每個功能區中,編輯對應的代碼模塊,來實現相應的事件處理。
從實際需求出發,設計相應的功能實現流程與規劃,滿足車牌識別系統的總體設計要求。
3.1 圖像采集模塊設計
車牌識別系統中的車輛圖片可以通過攝像頭采集,也可以通過系統自帶的相冊功能,調用指定的圖片,加載圖像,顯示在 ImageView控件中。詳細的程序設計流程圖如圖 5所示:

圖5 圖像采集設計流程圖
其中 MediaStore.ACTION_IMAGE_CAPTURE是系統的靜態方法,可以調用該方法,啟動系統自帶的攝像機拍攝車輛照片。Intent.ACTION_GET_CONTENT也是靜態方法,可以通過它來瀏覽系統相冊中保存的圖片,選擇指定的一張來進行顯示。圖像進入識別系統后,最終顯示在已設定的視圖組件(ImageView圖片顯示組件)中。
3.2 車牌定位模塊設計
圖片進入車牌識別系統后,就進入車牌定位的環節。在主函數中,通過調用自主設計的車牌定位函數,處理車輛圖片。把圖片轉換成位圖之后,進行顏色空間模型的轉換,通過定位核心程序處理,定位出車牌。函數的調用關系如圖6所示:

圖6 車牌定位程序設計圖
其中K-means是顏色聚類函數,把車輛圖片劃分成不同的顏色區塊,便于車牌目標區域的檢測。Orientation負責將聚類后圖片的每個顏色區塊中,找尋出最符合設定比例的車牌矩形區。Erzhihua對定位出的車牌區進行二值化處理,使得車牌底色和字符色黑白分明。CutFrame把車牌多余的邊框去除, CutWhite則去掉車牌多余的空白區。經過上述的函數處理后,只包含字符的車牌將單獨顯示在一個ImageView控件中。
3.3 車牌字符分割和識別模塊設計
車牌定位后,進入字符分割及識別環節。如圖7所示:

圖7 字符分割及識別設計流程圖
設計垂直投影函數WordsCut分割車牌區域字符和模板匹配函數CharRC來識別分割出的單字字符。設計三個字符庫模板,使用31個省市簡稱漢字模板,0~9阿拉伯數字模板,24個英文字母模板(去除字母I和O),模板匹配法就可以順利進行車牌字符的識別。把分割出的單字字符與模板中的每個標準字符進行匹配,將相似度最大的模板字符作為識別出的字符,進行顯示。
3.4 車牌信息存儲模塊設計
車牌信息被識別出后,顯示在 EditText(文本框)中,之后還需將其保存至本地數據庫,并顯示在 ListView控件(滑動視圖)中。SQLite是一種關系型數據庫,一般用于嵌入式產品的開發與研究。本文采用SQLite,設計了適合識別系統的數據庫,對識別出的車牌字符進行存儲。如圖8所示:

圖8 車牌信息存儲設計流程圖
使用SQLiteDatabase類的各種封裝的方法[5](insert:插入、delete:刪除、update:更新),對車牌信息進行一系列的操作。
至此,Android平臺的車牌識別系統的軟件設計已完成。為了使其有更好的用戶體驗效果,設置背景圖片,使用戶在視覺上有一定的舒適度;設計按鈕圓角邊框效果,讓系統具有一定的美觀性。最終設計完成的車牌識別系統如圖9所示:

圖9 移動式車牌識別系統示意圖
本文設計的車牌識別系統,所用的函數模塊和基本的程序流程,完全遵循軟件設計的規則。采用 Android 軟件開發平臺,充分利用其開放性、便捷性、無界性,來完成系統的整體布局、設計和實現,便于程序的二次架構與開發。借助Eclipse集成開發工具,建立工程文件,編寫、調試程序代碼,將識別系統打包生成 apk 文件。在手機端進行的真機測試,驗證了程序代碼的正確性及有效性、識別系統的可用性及準確性。移動式車牌識別系統,能夠靈活地識別車牌號碼,具有較好的實用價值和寬廣的市場前景。借助移動互聯網的發展契機,推廣該車牌識別系統的應用,能促進智能交通系統的發展。
[1] 劉衛國. Android的架構與應用開發研究[J].計算機系統應用,2008(11): 110-112.
[2] 魏崇毓,張菲菲. 基于Android 平臺的視頻監控系統設計[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的車牌識別系統的研究與設計[J].微型電腦應用,2012,28 (8):40-44.
[5] 李興華. Android開發實戰經典[M]. 北京:清華大學出版社,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-),男,上海大學機電工程與自動化學院,副教授,博士,研究方向:圖像分析與處理,計算機控制技術,上海 200072祝振中(1990-),男,上海大學機電工程與自動化學院,碩士研究生,研究方向:Android應用軟件開發,上海 200072