蔡春曉,李燕龍,陳 曉
(1.桂林電子科技大學 教學實踐部, 廣西 桂林 541004; 2.桂林電子科技大學 信息科技學院, 廣西 桂林 541004)
?
基于Hadoop的Java調用Matlab混合編程的車牌識別
蔡春曉1,李燕龍1,陳曉2
(1.桂林電子科技大學 教學實踐部, 廣西 桂林541004; 2.桂林電子科技大學 信息科技學院, 廣西 桂林541004)
摘要:在交通行業日益發展的今天,車牌識別技術對于公路車輛監管以及車輛軌跡跟蹤越來越重要,考慮到龐大的車輛信息數據量,單機處理數據能力已不能滿足實時性的要求。本文在詳細研究分布式處理平臺Hadoop的工作原理后,利用其強大的HDFS存儲系統與MapReduce數據處理方案,通過Java對Matlab的調用,簡化了識別程序,搭建了分布式處理平臺,即使在數據量龐大的情況下也能夠進行車牌識別分布式計算。實驗結果表明,在處理2 000張以上的車牌圖像時,運行效率提升了2倍左右。
關鍵詞:云計算;車牌識別;混合編程;分布式計算
0引言
近年來,隨著我國公路交通事業的日益發展和人民生活水平的提升, 車輛數目不斷增加, 通過車牌識別來統計車輛軌跡的方法對于交通管制的作用也變得愈發重要[1]。 為了能夠快速存儲和處理龐大的車牌號信息數據, 必須借助分布式處理平臺。 Hadoop是Apache基金會所開發的一種分布式基礎架構, 具有高可靠性、 高拓展性、 高效性、高容錯性、低成本等一系列特性,用戶可以輕松地在Hadoop上開發和運行處理海量數據的應用程序。Hadoop框架最核心的設計HDFS與MapReduce分別可以實現海量數據存儲與海量數據計算。
2006年初, 通過借鑒Google的GFS和Map Reduce技術,Nutch項目的開發團隊解決了前期面臨的軟件擴展性問題,實現了開源的Nutch分布式文件系統(NDFS)和MapReduce計算框架。由于NDFS和MapReduce具有較高的應用價值,而不僅限于搜索領域,開發團隊將它們從Nutch項目中拆分出來,組成一個新的開源項目Hadoop,NDFS隨即更名為HDFS。2008年初,Hadoop成為Apache的重點研究項目,得到了一些國際廠商的支持,如FaceBook、Yahoo以及阿里巴巴等互聯網巨頭,這使得Hadoop迎來了它的快速發展[2]。
在短短的幾年中,Hadoop成為了目前為止最為成功、最廣泛使用的大數據處理主流技術和系統平臺,并成為一種大數據處理事實上的工業標準[3],得到工業界大量的進一步開發和改進,并在業界和應用行業,尤其是互聯網行業得到廣泛的應用。
由于在系統性能和功能方面存在不足,Hadoop在發展過程中不斷改進,自2007年推出首個版本以來,目前已經先后推出數十個版本。Hadoop系統在大規模數據分布存儲和批處理能力[4],以及在系統的可擴展性和易用性上具有不少其他系統難以具備的優點, 并且由于近幾年來業界和應用行業在Hadoop開發和應用上已有大量的前期投入和上線應用系統,以及Hadoop形成的包含各種豐富的工具軟件的完整生態環境,同時也隨著Hadoop自身向新一代系統的演進和不斷改進,在今后相當長一段時間內,Hadoop系統將繼續發揮其在大數據處理領域的重要作用,同時其他各種新的系統也將逐步與 Hadoop系統相互融合和共存[5-6]。
Hadoop的底層框架由Java編寫,考慮到各種計算情況下,有些Java代碼實現的運算并不高效,而利用Matlab寫好相應的函數,再由Java將其調用會顯得更加方便[7]。Java 語言具有跨平臺性、可移植性、多線程、分布式、安全可靠等優點。但 Java 程序設計語言對一些較為復雜的數值計算的編程較繁瑣,編程效率較低。對于較為復雜的分析與處理可以采用 Java 及 Matlab 的混合編程,實現二者的優勢互補。
1Hadoop平臺以及eclipse開發環境的搭建
1.1Hadoop平臺介紹
分布式文件系統HDFS和分布式計算框架MapReduce是Hadoop的兩大核心組成部分。其中,HDFS負責大規模數據集的分布式存儲,是一個典型的主從式體系結構,由1個主節點(NameNode)和多個從節點(DataNode)構成;整個Hadoop集群中,只允許同時存在一個NameNode節點,它是整個系統的主控服務器,用于管理HDFS的命名空間和協調客戶端的文件訪問。MapReduce構建在HDFS之上,為存儲在HDFS上的數據提供分布式計算框架,由1個JobTracker和多個TaskTracker組成;JobTracker負責整個MapReduce的資源監控和作業調度,TaskTracker負責執行JobTracker分配下來的計算任務;用戶通過客戶端將編寫好的MapReduce程序提交到JobTracker端,之后MapReduce作業被分解為若干個Map Task和Reduce Task,任務調度器按照一定的調度策略(可配置)將任務分配到適當的TaskTracker上執行。兩者緊密結合、相互協調,為Hadoop高效、可靠地處理大數據提供了保障。
分布式計算的簡略實施步驟如下:①集群下每臺計算機安裝Linux操作系統;②每臺計算機修改主機名(主機名和IP地址的映射), 配置hosts文件(在/etc/hosts中添加機器名和相應的IP);③創建用戶;④配置ssh,使master主機與每臺slave主機實現無密碼登陸;⑤安裝JDK;⑥安裝Hadoop;⑦在master主機上配置好,再分發到各臺slave主機。此外,安裝Hadoop后需修改環境變量,加入Hadoop路徑,為方便統一管理,在Hadoop根目錄下建立文件夾:mkdir tmp、mkdir hdfs、mkdir logs、mkdir hdfs/name、mkdir hdfs/data,可將文件夾權限修改為可讀寫;再修改/Hadoop/conf/目錄下的配置文件:hadoop-env.sh、core-site.xml、hdfs-site.xml、 mapred-site.xml、masters、slaves;配置masters和slaves:分別用gedit打開masters和slaves,前者加入hadoopm,后者加入hadoops即可;將配置文件hosts、bashrc同步到集群各個節點中,并把配置好的hadoop發送到集群中各個節點;對集群的分布式文件系統進行格式化,并檢查系統啟動情況。
1.2開發環境安裝
①在Linux下安裝eclipse;
②安裝eclipse-hadoop插件;
③配置eclipse;
④測試插件是否安裝成功。
由于本文所論述的識別車牌方法涉及Hadoop內部HDFS文件系統的工作原理,而開發環境的安裝只為了能夠讓開發者運用自己所擅長的語言編譯出適用于某種特定功能的代碼,故關于開發環境的具體安裝方法及步驟本文不再贅述。
至此,系統環境搭建已完成[8]。
2Matlab的調用與MapReduce的運算執行
2.1Matlab車牌識別算法
車牌識別需經過觸發拍照、圖像采集、圖像預處理、車牌定位、字符分割、字符識別、輸出結果等一系列過程,其中字符識別為核心內容。目前,用于車牌字符識別(OCR)的算法已經有很多種,主要有基于模板匹配的OCR算法[9]、基于特征分析的字符識別算法及基于人工神經網絡的OCR算法[10]。本文以基于模板匹配車牌識別Matlab算法為例,實現在Hadoop云計算平臺上Java調用Matlab混合編程的車牌識別處理過程。
如圖1所示,基于模板匹配的OCR算法過程為:首先對待識別字符進行二值化,并將其尺寸大小縮放為字符數據庫中模板的大小,然后與所有的模板進行匹配,最后選最佳匹配作為結果。模板匹配是圖像識別方法中最具代表性的基本方法之一[11],它是將從待識別的圖像或圖像區域中提取的若干特征量與模板相應的特征量逐個進行比較,計算它們之間規化的互相關量,其中互相關量最大的一個就表示期間相似程度最高,可將圖像歸于相應的類。通常情況下用于匹配的圖像各自成像條件存在差異,本文采用相減的方法求得字符與模板中最相似的字符,然后找到相似度最大的輸出[12]。

圖1 車牌識別算法Fig.1 License plate recognition algorithm
2.2Java對于Matlab的調用
考慮到計算的各種情況,有些用Java代碼實現的計算難免會顯得不夠高效。而利用Matlab寫好相應的計算函數,然后打包成jar包供Java調用,在某些情況下會更加方便。以下說明如何實現這一過程:
(1)確定計算機上已安裝Matlab或者Matlab動態鏈接庫,并且完成Java的運行環境配置,Matlab的版本必須為2006b+(包括2006b或更高版本), 因為只有在這些版本中才有Matlab Builder for Java(也叫Java Builder)[13]。
(2)打開Matlab,在Command Window框中輸入deploytool,在Name中輸入名字,在Location中選擇路徑,最后在Type中選擇Java Package。
(3)在Matlab中找到Java Package窗口,添加class文件,因為此文件就是以后導入到Java中要作為一個對象的名字,故當命名class文件的時候需要注意,其本身即為放在new后面作為構造函數的類名,本文命名為test。
(4)點擊類名下的Add files,將剛才編輯好的m文件test.m等相關函數文件加到test.prj當中。
(5)打包:在Matlab安裝的目錄中找到“… oolboxjavabuilderjarjavabuilder.jar”的文件,在剛剛打包的文件夾中找到對應的包,本文為test.jar,將這兩個jar包導入到Java項目當中,新建Java類文件test.java,這個Matlab文件轉為了Java類就可以直接被Java項目調用。
2.3MapReduce執行流程
借助Hadoop 框架及云計算核心技術MapReduce 來實現數據的計算和存儲,并且將HDFS分布式文件系統和HBase分布式數據庫很好地融入到云計算框架中,從而實現云計算的分布式、并行計算和存儲,并具有很好的處理大規模數據的能力。
MapReduce的任務可分為兩個階段:Map階段和Reduce階段。每個階段都使用鍵值對作為輸入和輸出,IO類型可由程序員進行選擇。一個MapReduce工作單元,包括輸入數據、MapReduce程序和配置信息。作業控制由JobTracker(1個)和TaskTracker(多個)執行。MapReduce程序執行時,輸入的數據會被分成等長的數據塊,這些數據塊即為分片。Map任務運行在本地存儲數據的節點上,才能獲得最好的效率。Map的結果只是用于中間過渡,這個中間結果要傳給Reduce任務執行,Reduce任務的結果才是最終結果,Map中間值最后會被刪除。
一個MapReduce工作(job)會將文件系統中的數據輸入并分隔為多個獨立的分塊(split);每個分塊都會被提交給一個Map任務處理;經Map任務處理后,所有具有相同屬性的數據會被提交給一個Reduce任務處理;Reduce任務將處理結果輸回文件系統。而本文使用到MapReduce最核心的功能則需通過對Map任務與Reduce任務的編程實現。
進行任務配置: job.setOutputKeyClass(key3_T.class); job.setOutputValueClass(value3_T.class); 編寫Map extends Mapper類時實現數據映射過程“〈key1,value1〉→〈key2,value2〉”;編寫Reduce extends Reducer類時實現數據歸約過程“〈key2,list(value2)〉→〈key3,value3〉”。
數據輸入方法:數據在進入Map任務前首先需要經過分隔和格式化的過程; 輸入數據經過分隔形成若干個相互無關的輸入分片(Input Split), 各個輸入分片中的每條數據記錄都會被格式化為〈key,value〉的形式傳遞給Map任務;輸入方法由InputFormat接口類的實現定義。
3實驗結果與分析
本文搭建的Hadoop云平臺由4臺普通PC組成,其中1臺作為NameNode節點(Master), 其余3臺作為DateNode節點(Slave)。NameNode節點用于存放系統目錄和分配計算任務等,DateNode節點用于存儲實際數據和提供計算資源。
本文所實現的車牌識別系統能從車牌圖像中自動提取車牌區域,自動分隔字符,進而對字符進行識別,得到車牌號碼。整個車牌識別系統的核心功能為車牌定位與字符識別,但其他功能也是重要組成部分,關系著整個系統的準確性與效率。在切割過程中會有對中文單個字符進行切割的現象,可以通過修改配置參數或者用基于距離的分割方法對車牌進行切割解決,主要需要完成MapReduce處理過程設計、InputFormat功能設計、Map任務功能設計、Reduce任務功能設計等。
MapReduce處理過程的設計:輸入文件為帶有元數據和圖像數據的車牌消息源文件; Map任務為從車輛照片中識別獲得數字化車牌;Reduce任務為對具有相同車牌的元數據進行歸類和排序;輸出文件為含有車牌軌跡和定位信息的結果文件。
Map任務功能的設計:對圖像數據(類型為BufferedImage,作為Value輸入)進行檢測,測定車牌位置,并進行傾斜校正; 再將車牌分隔為字符后對字符進行模板對比識別; 得出數字化的車牌序列(類型為Text, 作為Key輸出)。
Reduce任務功能的設計:對具有相同序列化車牌(類型為Text,作為Key輸入和輸出)的元數據集合(類型為Iterable〈Text〉, 作為value輸入)進行歸類合并, 并按照時間順序進行排序后輸出(類型為Text, 作為value輸出)。
實驗中具體的識別過程為:首先取字符模板,接著依次取待識別字符與模板進行匹配,將其與模板字符相減,得到的0越多就越匹配。把每一幅相減后圖0值最多個數對應的模板保存下來,即為識別出來的結果[14]。識別結果如圖2所示。
設置4組分別包含有100、 500、 1 000、2 000張車牌信息的隨機圖像,測試系統在單機情況和分布式情況下的處理耗時,其中分布式又分為單節點(slave_1)、雙節點(slave_2)和三節點(slave_3)3種情況。在得到相同輸出結果的情況下,系統耗時如圖3所示。

圖2 識別結果Fig.2 Recognition results

圖3 圖像識別系統耗時Fig.3 Time used in image recognition system
可知,在單機和1個節點的情況下,系統耗時接近,且單機處理速度稍快,這是由于單機環境下省去了主機與節點間通信和數據交換的時間開銷。隨著節點數的增加,系統處理速度顯著提升,同時由于采用Java調用Matlab處理,處理過程更加靈活,并且圖像數據量越大,分布式并行處理的優勢越明顯。實驗結果顯示,當圖像達到2 000張時,基于云架構的系統較單機系統的處理速度快了2倍左右。因此,基于云平臺的車牌識別系統在處理海量圖像數據時,性能優于傳統單機識別系統。
4結束語
由于目前技術限制,文中所闡述的車牌識別技術還有一些問題,其解決方案如下:(1)本程序使用的是投影法進行車牌字符切割, 會有對中文單個字符進行切割的現象, 可以通過修改配置參數或者用基于距離的分割方法對車牌進行切割解決; (2)文件調用,程序本身不能識別HDFS文件系統路徑,所以程序運行時調用的是本地系統的模板文件,這樣會降低效率。解決方法有兩個:第一是將程序中的路徑替換成HDFS文件路徑;第二是將模板文件放到每一臺機器的統一路徑下。
采用Java與Matlab混合編程來實現MapReduce功能不僅在識別車牌的效率有了大幅提升,在其他圖像處理、通信、計算領域都具有很好的應用前景,同時易于開發者編寫、更改代碼來實現功能的調整,如此一來,極大促進了云計算的應用和推廣。
參考文獻:
[1]何蘇勤,楊美薈.嵌入式視頻監控系統實時性研究[J].計算機工程,2009,35(4): 235-237,240.
[2]董西成.Hadoop 技術內幕:深入解析MapReduce 架構設計與實現原理[M].北京:機械工業出版社,2013.
[3]Zhao X M, Ma H D,Zhang H T,et al. Metadata extraction and correction for large-scale traffic surveillance videos[C]//2014 IEEE International Conference on Big Data, 2014:412-420.
[4]羅軍舟,金嘉暉,宋愛波,等.云計算:體系架構與關鍵技術[J]. 通信學報, 2011,32(7):3-21.
[5]王鵬,黃華峰,曹珂.云計算:中國未來的IT戰略[M].北京:人民郵電出版社,2010.
[6]張建勛,古志民,鄭超.云計算研究進展綜述[J].計算機應用研究,2010,27(2): 429-433.
[7]Echel B.Java編程思想[M].4版.陳昊鵬,譯.北京:機械工業出版社,2007.
[8]Metsker S J,Wake W C.Java設計模式[M]. 2版.張逸,史磊,譯.北京:電子工業出版社, 2012
[9]劉佐濂,鄧榮標,孔嘉圓.一種車牌識別算法的實現[J].中國科技信息,2005,23(2):56-57.
[10]Yoshida T, Kagesawa M,Ikeuchi K,Local-feature based vehicle recognition system using parallel vision board[J].Elecironic and Communication in Japan,2003,86(5):1-10.
[11]史紹強,王英健,唐賢瑛.基于整形特征與模糊識別的手寫體漢字識別[J].微機發展,2004,14(1):114-116.
[12]葉晨洲, 楊杰,宣國榮. 車輛牌照字符識別[J].上海交通大學學報,2000,34(5):672-675.
[13]張銀鶴,唐有明,王俊偉. 點石成金:JSP+Ajax網站開發典型實例[M].北京:電子工業出版社,2009.
[14]Ching Y T.Detecting line segments in an image:A new implementation for Hough Transform[J]. Pattern Recognition Letters,2001, 22(3): 421-429.
文章編號:1674-9057(2016)02-0383-05
doi:10.3969/j.issn.1674-9057.2016.02.033
收稿日期:2015-06-16
基金項目:廣西自然科學基金項目(2013GXNSFAA019334)
作者簡介:蔡春曉(1980—)男,碩士,講師,研究方向:計算機控制、云計算、大數據,fjcainiao@guet.edu.cn。
通訊作者:李燕龍,講師,lylong@guet.edu.cn。
中圖分類號:TP391.9
文獻標志碼:A
Effective recognition of license plate based on invoking of Matlab from Java in Hadoop
CAI Chun-xiao1, LI Yan-long1, CHEN Xiao2
(1.Department of Experiential Practice,Guilin University of Electronic Technology, Guilin 541004,China;2.Institute of Information Technology of Guilin University of Electronic Technology, Guilin 541004,China)
Abstract:With the development of transportation industry, the technology of license plate recognition plays a more important role in the traffic regulation and vehicle tracing than before.Present bulkiness of vehicle information and the capacity of stand-alone data processing can not meet the real-time requirements.The powerful storage system of HDFS and data solution of Map Reduce are used to improve license plate recognition algorithm after studying the principle of Hadoop (a platform of distributed data processing). By Java of Matlab calls, the recognition procedure is simplified, and a distributed processing platform is set up.The license plate recognition can be distributed in computing with a large amount of data. Experimental results show that when dealing with more than 2 000 images of license plates, operating efficiency improved about 2 times.
Key words:cloud computing; license plate recognition; hybrid programming; distributed computing
引文格式:蔡春曉,李燕龍,陳曉.基于Hadoop的Java調用Matlab混合編程的車牌識別[J].桂林理工大學學報,2016,36(2):383-387.