




已閱讀5頁,還剩49頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
華南理工大學畢業設計(論文)基于ANDROID平臺的車輛信息查詢系統的開發學院(系)專業班級學生姓名指導教師目錄目錄8摘要10ABSTRACT111緒論1211問題描述與項目動因1212篇章結構132ANDROID移動操作系統1421移動計算1422ANDROID技術背景14221ANDROID的特性14222ANDROID架構1523ANDROID平臺本地應用的開發16231虛擬機之上的JAVA應用16232LINUX之上的C/C本地代碼1624ANDROID平臺數據的存儲與同步17241嵌入式關系數據庫管理系統SQLITE17242ANDROID平臺的數據同步193ANDROID平臺上的車牌識別2031圖像處理20311OPENCV20312JAVACV2032車牌探測21321將原始圖像轉化為灰階圖像22322灰階圖像的平滑與增強處理22323灰階圖像轉化為二值圖像22324從二值圖像中提取輪廓23325基于邊緣檢測的車牌探測2333車牌字符分割2434車牌字符識別25341TESSERACTOCR引擎25342車牌語言的訓練25343TESSERACT庫在ANDROID中的使用274需求分析與設計2941功能需求29411用例模型29412交互圖3242非功能需求345系統設計、實現與測試3651系統的設計36511程序邏輯設計36512數據庫設計3852系統實現38521支撐條件39522類的實現41523數據庫模式4253運行與測試43531運行演示43532測試466結語與后續計劃48參考文獻49致謝52插圖目錄圖1ANDROID架構圖15圖2OPENCV的構成20圖3ANDROIDVIQ項目目錄結構21圖4原始車輛圖像22圖5灰階圖像22圖6平滑與增強過后的灰階圖像22圖7二值圖像23圖8輪廓圖像(黑色背景上的白色輪廓線,不易觀察)23圖9檢測出的車牌圖像24圖10車牌圖像的輪廓24圖11分割后的車牌字符25圖12分割后再合并的車牌字符25圖13車牌字符訓練圖片圖14連通多部首漢字以簡化盒子文件的修改26圖15項目TESSERACTANDROIDTOOLS的目錄結構27圖16本系統直接用例模型30圖17系統抽象用例模型30圖18細化并擴展了的用例模型31圖19用例“編輯車輛信息”的順序圖33圖20UI類的交互圖34圖21用例“瀏覽車輛信息庫”和“瀏覽車輛登記單”實際的類圖37圖22項目目錄結構39圖23類“VEHICLEITEMVIEWACTIVITY”的實現42圖24車輛信息庫圖25快速查找圖26快速查找43圖27車輛信息庫列表項的上下文菜單圖28查看車輛圖29編輯車輛信息44圖30刪除車輛信息圖31聯系車主圖32瀏覽車輛登記單44圖33查看車輛圖34登記車輛圖35登記信息立即顯示在了登記記錄列表中45圖36查詢/登記車輛圖37成功登記的車輛圖38創建車輛信息46圖39成功創建車輛信息46摘要本文基于ANDROID移動操作系統,集成了OPENCV、TESSERACTOCR、JAVACPP、SQLITE等幾大開源技術,設計并實現了一個基于ANDROID平臺的車輛信息查詢系統。該系統除針對車輛信息及其車輛登記記錄簡單快捷的增刪改查操作外,還具有自動車牌識別、快速撥打電話、多終端數據同步等功能,能滿足小區(停車場)車輛管理、“黑的”鑒別、基于車輛識別的個性化服務等諸多場景的需求。論文主要學習、研究基于ANDROID平臺的車輛信息查詢系統的技術實現,具體內容包括ANDROID技術背景,ANDROID平臺本地應用的開發,ANDROID平臺數據的存儲與同步,以及ANDROID平臺上車牌識別技術的實現。通過本對課題的調查、研究與實現,歸納出了ANDROID系統在車輛管理方面的典型應用場景和用例;介紹了與之相關的理論和技術基礎;詳細講解了這些理論和技術基礎在本系統中的實踐與運用;圍繞數據同步子課程,研究了在多個ANDROID終端間同步數據的解決方案;圍繞關鍵子課題車牌識別,研究并采用了OPENCV作為車牌圖像處理技術,TESSERACTOCR作為車牌字符識別技術,JAVACPP作為在ANDROID平臺上高效調用OPENCV與TESSERACTOCR共享庫的技術,以及ANDROID上內置的SQLITE嵌入式數據庫技術。本文的特色在于1)將車牌識別技術在ANDROID上成功實現;2)集成創新,車牌識別等技術取材于谷歌代碼上的開源項目,源碼易于獲得且允許商業應用;3)本課題亦以開源項目的形式開展。關鍵詞ANDROID車牌識別信息系統OPENCVTESSERACTOCRJAVACPPSQLITEABSTRACTTHISTHESISIMPLEMENTSAVEHICLEINFORMATIONQUERYVIQFORSHORTSYSTEMBASEDONANDROIDMOBILEOPERATINGSYSTEMITINTEGRATESFOUROPENSOURCETECHNOLOGIESOPENCV,TESSERACTOCR,JAVACPPANDSQLITEBESIDESASETOFFASTCRUDOPERATIONSONVEHICLEINFORMATIONANDVEHICLECHECKINGRECORDS,THEIMPLEMENTEDVIQSYSTEMALSOHASFEATURESLIKEAUTOMATICLICENCEPLATERECOGNITIONALPR,FASTCALLMAKING,DATASYNCAMONGMULTIPLETERMINALSANDMORE,WHICHCANSATISFYREQUIREMENTSOFSENERIOSLIKECOMMUNITYORPARKINGLOTVEHICLESMANAGEMENT,ILLEGALTAXISIDENTIFICATION,CUSTOMIZEDSERVICESBASEDONVEHICLEIDENTIFICATIONANDSOONINTHISTHESIS,WESTUDIEDTHEIMPLEMENTATIONOFVIQSYSTEMSBASEDONANDROIDITMAINLYINCLUDES1THEBACKGROUNDOFANDROID2THEDEVELOPMENTOFANDROIDLOCALAPPLICATION3THESTORAGEANDSYNCOFDATAONANDROIDAND4THEIMPLEMENTATIONOFALPRONANDROIDTHROUGHTHEINVESTIGATION,STUDYANDIMPLEMENTATIONOFTHISDEGREEPROJECT,THISTHESISHASSUMMARIZEDSOMETYPICALSCENARIOSANDUSECASESOFANDROIDAPPLICATIONSONVEHICLEMANAGEMENTSINTRODUCEDRELATEDTHEORYANDTECHNOLOGYBASISDETAILEDTHEAPPLICATIONOFTHEMINTHISPROJECTONDATASYNC,STUDIEDSOLUTIONSTOSYNCINGDATAAMONGMULTIPLEANDROIDTERMINALSONALPR,STUDIEDANDADOPTEDOPENCVASTHEWAYTOMANIPULATEIMAGES,TESSERACTOCRASTHEWAYTORECOGNIZELICENCEPLATES,JAVACPPASTHEWAYTOEFFICIENTLYCALLTHEUNDERLYINGSHAREDLIBRARIESOFOPENCVANDTESSERACTOCR,ANDSQLITEASTHEWAYTOSAVEPERMANENTDATAONANDROIDFEATURESOFTHISTHESIS1HAVINGALPRIMPLEMENTEDONANDROID2ANINTEGRATEDINNOVATION,WITHTECHNOLOGIESLIKEALPRFROMOPENSOURCEPROJECTSATGOOGLECODESOURCECODESAREEASYTOGETANDAVAILABLEFORCOMMERCIALUSE3THEBACKGROUNDDEGREEPRJOECTALSODEVELOPEDASANOPENSOURCEPROJECTKEYWORDSANDROIDLICENCEPLATERECOGNITIONALPRINFORMATIONSYSTEMOPENCVTESSERACTOCRJAVACPPSQLITE1緒論隨著國民經濟的發展,車輛迅速普及。小區、停車場、道路等車輛集中的地方,存在需對問題(占用車位、違規停放等)車輛或來往車輛進行登記和身份鑒定等諸多需求,以實現諸如快速聯系車主、計時計費、“黑的”鑒別、基于通過車輛識別取得顧客定制信息的個性化服務等業務應用。這些應用普遍存在場地不固定、需求變化快等特點,傳統基于固定車牌識別裝置和臺式計算機的車輛管理系統很難適應。即使努力適應,建設傳統車輛管理系統,需要有專用的攝像裝置;車輛的行駛路徑和停放位置須服從攝像裝置的要求;需要設置護欄,卻又容易導致車輛停放困難。這此無疑增加了車輛信息管理的成本,制約了車輛信息數字化的進程。移動智能終端的普及,讓移動計算正取代傳統桌面計算成為越來越重要的信息處理方式。ANDROID移動操作系統在移動計算平臺中處于領先的地位。配備攝像頭、GPS和網絡功能的ANDROID終端尤其是ANDROID手機,完全能在車輛管理信息系統中扮演重要的角色,其中最重要的是車輛信息的查詢,其次重要的是車輛信息的登記。ANDROID終端在扮演這一角色的過程中,有兩大問題需要解決一、有限的計算能力,如何快速準確地進行車牌識別,以自動查詢車輛信息,并對車輛信息進行結構化記錄;二、多終端協同工作,在網絡不可靠的情況下,如何獲取與存儲數據,又如何在一定程度上保持數據的同步,以共享最新的車輛信息,或供進行統計與決策。關于ANDROID平臺上的車牌識別,在本系統中,我們通過使用JAVACPP和JNI技術實現了對OPENCV和TESSERACTOCR本地代碼庫的調用;為了準確識別出車牌號碼,我們通過TESSERACT訓練出了中華人民共和國機動車號牌1的語言包。關于ANDROID平臺上數據的存儲與同步,在本系統中,我們采用了ANDROID內建的SQLITE技術進行數據的結構化存儲與訪問;特別針對ANDROID40及以上版本,討論了端對端WIFI直連通訊技術的實現。11問題描述與項目動因車輛信息,包括車輛本身的信息車牌號、車架號、車型、車名、車身顏色等和車主的信息姓名、電話、身份證號、出生年月、駕照號等;為了更加易于識別車輛與車主,應該提供二者的照片;此外,車輛的活動登記,包括時間、地點、備注等,也是十分重要的信息。這些信息在實際典型場景中的應用,舉例如下1)小區(停車場)車輛管理目前,很多小區都為戶主分配了專用的停車車位,車位未經允許被占用的現象卻時有發生,在一定程度上擾亂了社區的和諧。對此,前來解決問題的小區保安可使用本系統,對問題車輛進行拍照。系統自動識別出該車車牌號,查詢小區車輛備案數據庫。如果查得該車屬于小區戶主,則可立即撥打戶主電話;否則可將該車加入黑名單,備后續處理。對違規停放的車輛也可作相同的處理。此外,部分小區、校園以及停車場,出入口眾多或不固定,又不適合設置門禁,傳統固定式車牌識別系統難以有效實施出入登記或計費。使用本系統,工作人員對入場車輛進行拍照登記,并開始計費;車輛出場時再次進行拍照,或取出其上次登記記錄,結束計費。如有需要,還可以進行身份認證和信用查詢。2)“黑的”鑒別武漢現有的違法運營計程車(俗稱“黑的”),目前有超過4000輛2。黑的收費隨心所欲,擾亂正常市場秩序,且沒有安全和信譽保障,給市民出行帶來了諸多問題。使用本系統,巡邏警察跟蹤可疑計程車并拍照登記,同時記錄時間和位置。根據所識別車牌號查詢備案計程車數據庫。如果找不到擁有該車牌號的合法計程車信息,則可進一步追查;如果找到,通過照片對比和詢問車主現在的位置,即可判斷該車是否真實。3)服務機構個性化服務個性化、定制服務能給顧客帶來賓至如歸的感覺,也是很多服務機構的重要業務內容。使用本系統,服務機構保安拍攝或輸入前來的顧客車輛的車牌號,從該機構建立的顧客信息數據庫中取出顧客的相關信息。顧客下車前,其稱呼、喜好、來訪記錄已為迎賓人員所掌握;定制的或與上次相同的服務可立即提供。上述應用場景要求移動智能設備有拍照、自動車牌識別、自動記錄時間和地點、快速查詢車輛信息、保存車輛信息等功能。此外,數據備份、多設備間數據同步、與計算機共享數據等,也是隱含的功能需求。本項目即致力于設計并實現一個基于ANDROID平臺的車輛信息查詢系統,以滿足上述應用場景的需求。12篇章結構本論文正文部分圍繞以下結構展開第二章介紹ANDROID移動操作系統,重點介紹了ANDROID平臺本地應用的開發和數據的存儲與同步技術。第三章介紹車牌識別的理論、技術以及在ANDROID平臺上的實現。它是本項目的創新點和核心工作之一。第四章介紹系統需求的分析與設計。第五章介紹系統的設計、實現與測試。第六章總結全文,并對接下來的工作提出展望與規劃。2ANDROID移動操作系統21移動計算移動計算是隨著移動通信、互聯網、數據庫、分布式計算等技術的發展而興起的新技術。移動計算技術將使計算機或其它信息智能終端設備在無線環境下實現數據傳輸及資源共享。它的作用是將有用、準確、及時的信息提供給任何時間、任何地點的任何人。這將極大地改變人們的生活方式和工作方式3。手持移動設備,或手機,特別是智能手機,將是由傳統桌面計算向移動計算或云計算這一轉變過程中的主力軍。隨時隨地可用,傳感器豐富等相對傳統桌面計算機的突出優點,為智能手機改變人們的工作與生活提供了各種可能。智能手機將逐步發展成人們眼、耳、腦以及不存在感官的延伸,幫助人們獲取、處理、存儲與呈現信息,幫助人們作出決定,展現給人們美好的事物,引領人們更加智慧與舒適地生活。移動平臺是目前和將來相當一段時間應用部署的重要平臺。2012年年初,蘋果應用商店已經擁有了超過53萬款應用,而GOOGLEPLAY所能提供的應用數目也已突破了40萬大關,涵蓋了游戲、效率、社交、購物、交通、體育、圖書與工具書等等領域,滲入了生活的方方面面。下載量上,僅以ANDROID以例。最高下載量已達5億(谷歌地圖),相當多的免費應用的下載量在十萬級別以上,收費應用也在萬級別以上(具體請參照GOOGLEPLAY)。一款受歡迎的應用的市場價值十分巨大,而且這一市場才剛剛起步。22ANDROID技術背景ANDROID是用于移動設備上的一個包含一操作系統,一系列中間件,以及部分關鍵應用軟件棧。ANDROIDSDK網站提供了在ANDROID平臺上使用JAVA編程語言開發應用程序所必須的工具和API4。221ANDROID的特性應用框架,實現了組合的重用與替換DALVIK虛擬機,專為移動設備優化集成的瀏覽器,基于開源的WEBKIT引擎優化的圖形,由一個定制的2D圖形庫驅動,3D圖形基于OPENGLES10規范(硬件加速可選)媒體支持,支持常用音頻、視頻以及圖像格式(MPEG4,H264,MP3,AAC,AMR,JPG,PNG,GIF)GSM通話(依賴硬件)藍牙,EDGE(增強型數據速率GSM演進技術),3G,以及WIFI(依賴硬件)相機,GPS,指南針,加速計(依賴硬件)豐富的開發環境,包括一個設備模擬器,測試工具,內存和性能分析,以及用于ECLIPSEIDE的一個插件222ANDROID架構圖1ANDROID架構圖ANDROID架構由上至下分四層,如圖1。描述如下應用層包括由系統默認提供了桌面、聯系人、通話、瀏覽器等基礎應用,以及由廣大開發人員開發、可下載安裝的拓展應用。拓展應用訪問下層應用框架層方面,和由廠商提供的基礎應用一樣,沒有任何尊卑之別。應用框架層應用開發基本的API,提供包管理、通話管理、資源管理、位置管理、通知管理、ACTIVITY管理,窗口管理、內容提供設施、視力系統。庫用C/C寫成。提供SGL底層2D繪圖引擎,安全套接層,嵌入式標準C庫,OPENGL3D繪圖,FREETYPE字體,瀏覽器核心,用戶空間顯示管理,媒體框架,以及輕量級SQLITE關系型數據庫。運行環境與JRE極其相似。核心包包含了在JAVA開發中常用的類庫如IO、UTILITY等;DALVIK虛擬機類似JVM,同樣也是專為ANDROID定制,針對手持設備,在存儲、計算以及功耗等方面作了格外優化。LINUX內核ANDROID整個操作系統基于LINUX內核,內核提供顯示、照相、閃存、軟鍵盤、WIFI、音頻等驅動程序,提供對進程間通信機制BINDER的驅動,提供電源管理服務。23ANDROID平臺本地應用的開發同PC上應用的部署模式一樣,ANDROID應用也可有純本地應用,C/S模式和B/S模式。此外,C/S和B/S相結合的模式本地應用利用WEB控件顯示WEB頁面,或WEB應用利用JAVASCRIPT調用本地程序也十分常見。此外,具有數據同步功能的本地應用模式,在聯系人、日歷、電子郵件等核心應用中都有體現。231虛擬機之上的JAVA應用ANDROID應用(至少是目前)是使用JAVA語言開發的。JAVA代碼被編譯成字節碼,再被編譯成DEX可執行文件,以在DALVIK虛擬機上高效運行。ANDROID應用由四大組件構成ACTIVITY,SERVICE,CONTENTPROVIDER,和BROADCASTRECEIVER。每個組件以類的形式存在。類應該具有高度的內聚性;類與類之間應該具有極低的耦合性。ACTIVITY負責呈現用戶界面并與用戶交互;SERVICE運行在后臺,負責處理耗時操作,或是為服務遠程進程;CONTENTPROVIDER負責管理可被共享的應用程序數據;BROADCASTRECEIVER則能響應系統級的廣播消息。ANDROID系統設置獨有的特點是,任何應用都能啟用其他應用的組件,顯式或隱式地。一個ACTIVITY可以調用另一個ACTIVITY或SERVICE;SERVICE可在ACTIVITY結束之后關閉,或繼續運行。當系統啟用某一應用的某一組件,該應用的進程就被啟動(如果不是已經啟動了的話),該組件所需的類就被初始化。不同于其他的系統,ANDROID應用程序沒有唯一的入口(比如就沒有MAIN函數)6。232LINUX之上的C/C本地代碼ANDROID應用由JAVA所寫,運行在虛擬機上,在處理大量數值、矩陣運算時,效率比較低。C、C則直接運行于硬件之上,能充分發揮硬件的性能。此外,大量傳統與廣泛使用的底層庫文件(包括圖形圖像處理、數據庫管理系統等)都是由C/C寫成,它們向ANDROID平臺的遷移應以怎樣的方式進行呢下面介紹三種方式JNI,JNA和JAVACPP。1)JNI(JAVANATIVEINTERFACE)JNI,JAVA本地接口,是一個允許運行在JAVA虛擬機上的JAVA代碼調用本地代碼或被本地代碼調用的應用編程框架。本地代碼即指用C/C或匯編寫成的、依賴硬件和操作系統平臺的程序或庫。它定義了可管理代碼(用JAVA語言寫成)與本地代碼交互的方法。它廠商中立,支持從動態鏈接庫載入代碼;雖然繁瑣,但常能獲得可觀的效率7。2)JNA(JAVANATIVEACCESS)JNA,JAVA本地訪問,是SUN公司主導研發的,建立在經典的JNI的基礎之上的一個開源框架。它是也另一個訪問本地代碼的方法,大有取代JNI的趨勢。JNA的設計就是為了提供一種自然的方式、以最少的工作量實現對本地代碼的訪問。它不需要像JNI中那樣的樣板文件或生成的粘合代碼9。JNA堪比WINDOW的P/INVOKE和PYTHON的CTYPE。但是,ANDROID官方并沒有集成JNA。據ANDROID開源項目參與者FADDEN回答第一是因為性能不如JNI,在對性能要求高的應用中人們更傾向于使用JNI;第二是因為使用JAVA和公開的API來實現應用更有利用應用程序自身和ANDROID的發展;第三是JNA遵循的是LGPL許可,將它放入ANDROID官方發行會帶來許可問題。盡管如此,ANDROID官方仍然會考慮在虛擬機中提供掛鉤,允許開發者將JNA庫作為應用程序安裝包的一部分,自行使用10。JNA源代碼可從GITHUB獲得11。3)JAVACPPJAVACPP提供了在JAVA中高效訪問C的方法,與某些C/C編譯器與匯編語言交互的方式頗為類似。在其底層,同樣采用的是JNI,因此所有的JAVA實現它都支持,包括ANDROID。與其他訪問本地代碼的途徑(包括SWIG,CABLESWIG,JNIGENERATORAPP,JNIWRAPPER,PLATFORMINVOKE,GLUEGEN,JNIDIRECT,JNA,JNIMARSHALL,JNATIVE,J/INVOKE,HAWTJNI,BRIDJ等等)所明顯不同的是,它高效而自然地支持C語言許多經常被認為有弊病的特性,包括操作符重載、模板類和模板函數、成員函數指針、回調函數、嵌套結構體定義、可變長參數、嵌套命名空間、包含任意循環的大數據結構、多繼承、按值/引用/微量傳遞、匿名結構體、位域、異常、析構以及垃圾回收。JAVACPP項目的作者SAMUEL已經通過JAVACPP,為OPENCV,FFMPEG,LIBDC1394,PGRFLYCAPTURE,OPENKINECT,VIDEOINPUT,和ARTOOLKITPLUS等圖像庫生成了完整的接口,集成到了他的開源項目JAVACV當中18。JAVACPP底層實現最開始使用的是JNA,后來又回到了JNI10。24ANDROID平臺數據的存儲與同步241嵌入式關系數據庫管理系統SQLITESQLITE是一個包含一個自包含、無服務、零配制、事務型的SQL數據庫引擎的軟件庫。它是世界上最流行的數據庫引擎之一。并且,SQLITE的源代碼已經進入了公共域,可自由使用11。ANDROID提供了對SQLITE數據庫的完全支持。你所創建的任何數據庫都能被當前應用中的任何類按名訪問,當前應用之外的類則不行12。2411SQLITE3中的數據類型14大部分數據庫引擎(就我們所知,除SQLITE之外的任何其他數據庫引擎)使用著傳統的靜態類型。靜態類型下,一個值的數據類型由其容器該值所存儲在的列所決定。SQLITE使用一種更加泛化的動態類型系統。在SQLITE中,一個值的數據類型依賴于其值本身而非其容器。在其他靜態類型數據庫上能使用的SQL語言,在SQLITE上同樣能使用;在這一意義上講,SQLITE的這一動態類型系統相對其他數據庫的靜態類型系統具有向后兼容的能力。而且,SQLITE中的動態類型能讓它完成傳統類型數據庫所不能完成的工作。最后,值得注意的是,SQLITE對特殊的一列ROWID的處理。它與在ANDROID中對SQLITE的訪問密切相關。2412ROWID和整型主碼SQLITE表的每一行都有一個64位有符號整數鍵,唯一地標識表中該一行。該整數通常被稱作“ROWID”。ROWID的值可使用以下任意列名的任意大小寫形式訪問“ROWID”“OID”或“_ROWID_”。如果一個表已經存在了一個用戶定義的名叫“ROWID”“OID”或“_ROWID_”的列,則使用這些名字時,訪問的是用戶定義的列;這一整型ROWID行將不再能被檢索到15。SQLITE的每一張表都以一棵B樹的數據結構存儲。該樹包含了對每一行的一個入口,入口地址是一個整型主碼(INTEGERPRIMARYKEY),或ROWID。這意味著按ROWID檢索或排序記錄速度極快。搜索某一指定或在某一范圍內的ROWID的行,比相同情況下在其他主碼或索引上搜索,要快一倍15。也正是這個原因,ANDROID中重要的UI組件LISTVIEW訪問SQLITE數據庫所使用的適配器CURSORADAPTER對查詢結果CURSOR的列有一個特殊的要求必須要有一個名叫“_ID”的列16。在實現上,LISTVIEW的一行(即一個LISTITEM)對應CURSOR的一行;據觀察,ANDROID為該LISTITEM分配了ID,其值正是“_ID”列的值??赏ㄟ^以下方法獲得LISTVIEW中的某一項的ID方法一單擊列表項的回調函VOIDANDROIDAPPLISTACTIVITYONLISTITEMCLICKLISTVIEWL,VIEWV,INTPOSITION,LONGID的形參中本身就有ID;方法二長按列表項,引起上下文菜單彈出的回調函數BOOLEANANDROIDAPPACTIVITYONCONTEXTITEMSELECTEDMENUITEMITEM中,可以這樣取得被長按列表項的ID/獲取彈出菜單的菜單信息;該菜單信息包含了適配器上下文信息,其中就包含了適配器為當前列表項綁定的(CURSOR的)IDADAPTERCONTEXTMENUINFOINFOADAPTERCONTEXTMENUINFOITEMGETMENUINFO/當前列表項的IDINTIDINFOID此外,要獲取當前列表項中子VIEW的值,也有快捷的方法/當前列表項在適配器上的位置INTPOSITIONINFOPOSITION/獲取適配器為當前列表項綁定的CURSOR(或一行記錄)CURSORCURSORCURSORGETLISTADAPTERGETITEMPOSITION/反過來獲取CURSOR中的列“_ID”的值,與INFOID對比STRING_IDCURSORGETSTRINGCURSORGETCOLUMNINDEX“_ID“LOGVTAG,“_IDATPOSITION“POSITION“,ID“ID“IS“_ID對比會發現,無論對列表項進行新增、刪除、排序等任何操作,ID與_ID均相同;相反,POSITION表示的只是當前列表項在列表LISTVIEW中的下標,與ID或_ID沒有直接的關系。以上問題是困擾作者本人在內的許多開發者許久的問題。通過一定的分析和實驗,結果是可知的。這或許也是做開發的樂趣之所在。242ANDROID平臺的數據同步ANDROID終端同WEB服務器、ANDROID終端與終端之間的數據同步,可以采用同ANDROID系統中谷歌帳戶應用(GMAIL、GOOGLECALENDAR等)類似的方法,通過SAMPLESYNCADAPTER,利用ANDROID框架中的帳戶管理器和同步管理器實現。這里不再贅述。本文將討論的,是基于ANDROID40及以上版本API中引入的最新技術端對端WIFI直連通訊技術。2421端對端WIFI直連通訊技術從ANDROID40(API14)開始,WIFI直連通訊技術允許設備通過WIFI直接(WIFIDIRECT)連接,不再需要中間互連點(如無線路由器或WIFI熱點)。使用ANDROID所提供的API,你可以發現并連接到同樣支持WIFI直接的設備上,然后與之進行比藍牙距離更遠的高速通信?;谠摷夹g,我們構想出了兩種多終端通信方式1)C/S單向同步。2)對等雙向同步。鑒于實驗條件不允許,我們僅對邏輯的實現作理論的分析。相信經過這一分析,在ANDROIDAPI14實現起來是不難的。(1)C/S單向同步在該同步方式中,指定一臺設備作為服務器,或才最先啟動同步服務的設備自動作為服務器;其他設備作為客戶機;首先輪流上傳各自的數據,服務器負責數據的新增、更新與合并;然后輪流從服務器下載最新的數據。作為服務器的設備(服務設備)首先啟動同步服務,其他設備(請求設備)搜尋到該設備,發送同步請求。服務設備在用戶的協助的對請求設備進行身份認證,并允許保存身份信息(即配對)以供下次免認證連接。服務設備上啟用一個服務,或為每個設備啟用一個服務,響應所有設備發送過來的通知(包含對數據變更的描述和數據本身)。響應操作包括備份同步前的數據;新增設備新增的記錄,緩存設備的修改和刪除請求并在最后提示用戶確認(修改或刪除),最后標記版本。全部設備的變更上傳完成后,服務設備轉而向所有請求設備發送指令,備份并刪除其同步前數據,并下載同步后的數據。(2)對等雙向同步在該同步方式中,設備間對等通信,向其他配對設備播送自身數據的變化,同時接收與處理其他配對設備數據變化的通知。該方式與C/S單向同步的不同之處在于,設備同時扮演兩種角色服務設備和請求設備;無需下載同步后數據。兩種同步方式都希望所有設備在當時當地可用,否則每一部設備上的數據都不是嚴格意義上“最新”的數據。但在實際應用中,對“最新”的要求并不高;相反,每周一次的同步(比如在例會與工作總結時同步工作數據),在同步時展示與統計每一部終端的數據變更,反而有得于對工作的評價。3ANDROID平臺上的車牌識別車牌識別這里特指自動車牌識別,即運用計算機視覺技術,從包含車牌的圖像中自動探測到車牌區域,提取該區域車牌圖像進行進一步處理,使其中的車牌字符適合光學字符識別(OCR)引擎識別,最后返回完整的車牌號字符串的過程。該過程包含的三大核心環節對識別率起到了至關重要的作用1)車牌探測;2)車牌字符分割;3)車牌字符識別。下面對其分別進行描述并加以實現。31圖像處理在圖像學中,圖像處理是對輸入圖像的任何形式的信號處理;其輸出可以是一幅圖像,或與之相關的字符集或參數19。本課題中包含大量的圖像處理,因此我們研究并采用了開源圖像處理庫OPENCV。311OPENCVOPENCV(開源計算機視覺)是一個用于實時計算機視覺的程序函數庫。它在BSD許可下發布,學術和商業上均可免費使用。它擁有能運行在WINDOWS、LINUX、ANDROID以及MAC上的C、C、PYTHOON和JAVA的接口。該庫擁有超過2500個算法的優化。使用者遍布全球,擁有2,500,000以上的下載量和40,000用戶組成員。使用范圍從交互藝術到礦物探測,再到WEB圖形檢索等領域20。OPENCV由英特爾公司于1999年起開發,用C/C寫成,包含了500多個函數。OPENCV的構成如圖2。CXCORE基本結構和算法,XML支持,繪圖函數CV圖像處理和視覺算法HIGHGUIGUI,圖像和視頻I/O圖2OPENCV的構成312JAVACVJAVACV是一個OPENCV的JAVA接口。它為計算機視覺領域調查者們常用的庫提供了封裝。這些庫包括OPENCV,FFMPEG,LIBDC1394,PGRFLYCAPTURE,OPENKINECT,VIDEOINPUT,和ARTOOLKITPLUS等。COMGOOGLECODEJAVACVCPP包命名空間下的類便展示出了完整的API。并且,實用類還使自身的功能在JAVA平臺包括ANDROID平臺上更加可用21。JAVACV開源項目的負責人SAMUEL,即前述JAVACPP項目的負責人。JAVACV正是利用JAVACPP技術實現的OPENCV的JAVA接口。編譯或生成JAVACPPJAR和JAVACVJAR,作為本項目的引用包;將JAVACVANDROIDARMJAR和OPENCV240ANDROIDARMZIP中所有的庫文件解壓至項目根目錄下的LIBS/ARMEABI文件夾中,即完成了對JAVACV庫引用。項目目錄結構如圖3。具體請參照項目主頁的介紹。圖3ANDROIDVIQ項目目錄結構32車牌探測在圖像處理技術中,HAAR特征提取技術常用于從圖像中提取物體22。該技術涉及神經網絡等算法,限于知識水平,暫不研究。邊緣檢測作為一種簡單的物體檢測方法,特別適合于矩形外框的車牌。本課題采用基于邊緣檢測的車牌探測技術。原始車輛圖像如圖4。圖4原始車輛圖像321將原始圖像轉化為灰階圖像CVCVTCOLORMVEHICLEIMAGE,VEHICLEIMAGEGRAY,CV_BGR2GRAY圖5灰階圖像322灰階圖像的平滑與增強處理CVSMOOTHVEHICLEIMAGEGRAY,VEHICLEIMAGEGRAY,CV_GAUSSIAN,3CVEQUALIZEHISTVEHICLEIMAGEGRAY,VEHICLEIMAGEGRAY圖6平滑與增強過后的灰階圖像323灰階圖像轉化為二值圖像CVTHRESHOLDVEHICLEIMAGEGRAY,VEHICLEIMAGEBINARY,128,255,CV_THRESH_BINARY圖7二值圖像324從二值圖像中提取輪廓CVSEQCONTOURSNEWCVSEQINTOBJECTSCVFINDCONTOURSVEHICLEIMAGEBINARY,CVCREATEMEMSTORAGE0,CONTOURS,LOADERSIZEOFCVCONTOURCLASS,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE圖8輪廓圖像(黑色背景上的白色輪廓線,不易觀察)325基于邊緣檢測的車牌探測經檢測,提取的圖像輪廓中有約1800個獨立輪廓區域。我們這樣來找到車牌輪廓區域用指定精度逼近曲線輪廓,形成一個多邊形輪廓;如果多邊形為四邊形,面積足夠大,且寬高比介于28到34之間(普通車牌外廓尺寸為440MM140MM,寬高比為314),則可初步判斷它為車牌輪廓,接下來的工作將圍繞該區域展開。示例代碼如下/獲得多邊形輪廓CVSEQPOLYCONTOURSCVAPPROXPOLYCONTOURS,LOADERSIZEOFCVCONTOURCLASS,CVCREATEMEMSTORAGE0,CV_POLY_APPROX_DP,CVCONTOURPERIMETERCONTOURS005,0/檢查輪廓邊數和面積IFPOLYCONTOURSTOTAL4/檢查輪廓寬高比DOUBLEPLATE_HWRATIODOUBLEBOUNDINGRECTWIDTH/DOUBLEBOUNDINGRECTHEIGHTIFPLATE_HWRATIO28CREATETABLEQUERY_ID,TIME,PLACE,NOTE,PHOTO,_LICENCECREATEVIEWQUERYINFOASSELECTQUERY_IDAS_ID,_LICENCEASLICENCE,NAME,PHONE,TIME,PLACE,QUERYNOTEASNOTE,QUERYPHOTOASPHOTOFROMQUERYLEFTOUTERJOININFOON_LICENCELICENCE53運行與測試531運行演示應用程序在開發設備上運行良好,能滿足需求分析中所研究各大使用場景和用例的基本需求。下面將結合需求設計中的幾個用例給出具有代表性的程序運行截屏。(1)瀏覽車輛信息庫如圖24所示,“車輛信息庫”頁以列表形式顯示了所有共52條車輛的信息,以車牌號排序。列表項左側是車輛的備案照片,右側是車牌號、車主姓名與電話等信息。單擊“車輛登記單”按鈕,可切換至“車輛登記單”頁面;單擊“查詢/登記車輛”按鈕,可切換至“查詢/登記車輛”頁面;單擊列表項,可切換至“查看車輛”頁面。單擊“快速查找”按鈕,標題欄將變為可編輯狀態,可輸入任一已知字段中的文本片段進行查找,列表項實時更新。如圖26所示,有3條記錄中包含有關鍵詞“45”。長按列表項,將彈出上下文菜單,如圖27所示。可對車輛信息進行查看(切換至“查看車輛”頁面)、編輯、刪除操作,可快速聯系車主,可短信發送車輛信息,可復制部分或全部字段至剪切板。圖24車輛信息庫圖25快速查找圖26快速查找圖27車輛信息庫列表項的上下文菜單圖28查看車輛圖29編輯車輛信息圖30刪除車輛信息圖31聯系車主圖32瀏覽車輛登記單(2)瀏覽車輛登記單如圖32所示,“車輛登記單”頁以列表形式顯示了所有共53條車輛登記記錄,以登記時間逆序排序。列表項中,左側是車輛的登記照片,右側是所識別或輸入車牌號、通過車牌號所查得的車主姓名和電話等信息。車輛登記單還特別記錄了登記的時間和地點,并且時間以相對時間(如“剛剛”“35分鐘前”等)格式顯示,在部分場景中有較大的用處?!盀g覽車輛登記單”頁面中的操作,和前述“瀏覽車輛信息庫”頁面的操作十分類似,這里不再贅述。(3)查看車輛如圖33所示,“查看車輛”頁顯示了指定車輛的信息以及其所有登記記錄。同樣可對該車輛的登記記錄實施編輯、刪除操作。同時,還可以新建登記記錄,如圖34;系統將自動填入登記的時間和經緯度信息。圖33查看車輛圖34登記車輛圖35登記信息立即顯示在了登記記錄列表中(4)查詢/登記車輛如圖35所示,“查詢/登記車輛”頁取得用戶拍攝或選擇的車輛照片,自動檢測到車牌并對其圖像進行加工,最后完成識別并等待用戶確認。用戶確認后,程序將保存此次登記,并根據所得車牌號碼查找車輛信息庫。如果找不到,“查看車輛”頁上方將不顯示車輛的信息,并允許用戶建立該車的車輛信息。圖36查詢/登記車輛圖37成功登記的車輛圖38創建車輛信息圖39成功創建車輛信息532測試軟件的測試分為白盒測試和黑盒測試兩大方法。對ANDROID應用進行白盒測試,ANDROIDAPI提供了ACTIVITYINSTRUMENTATIONTESTCASE2等測試專用的類,用以模擬用戶和系統對應用的操作或調用,對應用實施快速自動的測試。本項目所選取的是手工測試。針對前述各個用例,可以靈活地輸入各種測試數據,走遍各個可能的路徑,及時發現問題并予以解決。邊界條件如對列表項的第一項、最后一項實施編輯或刪除,函數中的空參數、零值、零長字符串,異常如GPS不可用、SD卡不可用、文件不存在等,程序都做了充分的考慮和妥善的處理。此外,代碼中關鍵部分都設置了日志記錄,遇到問題可迅速定位并解決。針對關鍵技術車牌識別,由于本項目目前的主要工作暫只是將車牌識別技術在ANDROID上實現,而沒來得及進行深入的優化,因而測試工作也不夠充分。目前,識別超過2MB的車輛圖片可能會導致內存用盡異常;對部分類型車牌的識別率不夠可觀。相信通過訓練更好的車輛識別語言包,以及優化車牌檢測算法和圖像處理算法,本系統的車牌識別率能與專用ALPR設備相媲美6結語與后續計劃本論文的撰寫,經歷了大量的前期準備。閱讀并翻譯了大量的英文文獻,特別是ANDROID官方網站ANDROID開發者上介紹ANDROID基礎及API的文檔。關于車牌識別在ANDROID上的實現,參考了作者AHMADGULLLIAQAT于2011年完成的碩士學位論文MOBILEREALTIMELICENSEPLATERECOGNITION,從中提取了大量寶貴的素材,并與AHMAD本人進行了多次的郵件交流。此外,還對開源項目TESSERACTOCR和JAVACV作出了一定的研究,利用二者促成了本項目的快速構建。最終,較好地實現了一個基于ANDROID平臺的車輛信息查詢系統,實現了ANDROID平臺上的車牌識別,并將后者應用到了前者當中。本論文介紹了上述工作中的核心內容,描述了系統的開發過程,展示了所取得的成果。它對該系統進一步的完善,以及其他從事類似工作的開發者,具有一定的指導意義。論文的不足之處在于,1)未就車牌識別問題進行充分的研究,包括車牌類型的適應性(機動車車牌和小車車牌,前方車牌和后方車牌)、車牌照片的適應性(拍攝的角度與傾斜、光線與背景干擾);2)未實現車輛數據庫的同步,包括手機與服務器、手機與手機的數據同步。它們在接下來的工作中加以完善。至此,以車輛識別為特性的基于ANDROID平臺的車輛信息查詢系統的開發工作到達了一個重要的里程碑。它不是終點,相反是新的起點。我們已經將本論文背后的項目放入了谷歌代碼托管,將接受來自世界各地開發者的關注與貢獻,并鼓勵大家自由使用。接下來,我們將著手提升車牌識別準確率,并實現車輛數據庫的同步。爭取在不遠的未來,本系統能廣泛運用到現實生產生活中去參考文獻1公安部GA362007中華人民共和國機動車號牌,20072大楚網武漢黑的士大楚網新聞頻道,HTTP/HBQQCOM/ZT/2008/HEIDISHI/HEIDISHIHTM,20125263百度百科移動計算_百度百科,HTTP/BAIKEBAIDUCOM/VIEW/95305HTM,20125194ANDROID開發者WHATISANDROID|ANDROIDDEVELOPERS,HTTP/DEVELOPERANDROIDCOM/GUIDE/BASICS/WHATISANDROIDHTML,20125195英文維基百科ANDROIDOPERATINGSYSTEMWIKIPEDIA,THEFREEENCYCLOPEDIA,HTTP/ENWIKIPEDIAORG/WIKI/ANDROID_28OPERATING_SYSTEM29,20125196ANDROID開發者APPLICATIONFUNDAMENTALS|ANDROIDDEVELOPERS,HTTP/DEVELOPERANDROIDCOM/GUIDE/TOPICS/FUNDAMENTALSHTML,20125197英文維基百科JAVANATIVEINTERFACEWIKIPEDIA,THEFREEENCYCLOPEDIA,HTTP/ENWIKIPEDIAORG/WIKI/JNI,20125198ANDROID開發者JNITIPS|ANDROIDDEVELOPERS,HTTP/DEVELOPERANDROIDCOM/GUIDE/PRACTICES/DESIGN/JNIHTML,20125199英文維基百科JAVANATIVEACCESSWIKIPEDIA,THEFREEENCYCLOPEDIA,HTTP/ENWIKIPEDIAORG/WIKI/JAVA_NATIVE_ACCESS,201251910谷歌代碼托管ISSUE11099ANDROIDJNAONANDROIDDESIREDANDROIDANOPENHANDSETALLIANCEPROJECTGOOGLEPROJECTHOSTING,HTTP/CODEGOOGLECOM/P/ANDROID/ISSUES/DETAILID11099,201251911SQLITE官方主頁SQLITEHOMEPAGE,HTTP/WWWSQLITEORG/,201252012ANDROID開發者DATASTORAGE|ANDROIDDEVELOPERS,HTTP/DEVELOPERANDROIDCOM/GUIDE/TOPICS/DATA/DATASTORAGEHTMLDB,201252013SQLITE官方主頁FEATURESOFSQLITE,HTTP/WWWSQLITEORG/FEATURESHTML,201252014SQLITE官方主頁DATATYPESINSQLITEVERSION3,HTTP/WWWSQLITEORG/DATATYPE3HTML,201252015SQLITE官方主頁SQLITEQUERYLANGUAGECREATETABLE,HTTP/WWWSQLITEORG/LANG_CREATETABLEHTMLROWID,201252016ANDROID開發者CURSORADAPTERANDROIDSDK|ANDROIDDEVELOPERS,FILE/D/VIKY/ANDROID/ANDROIDSDK/DOCS/REFERENCE/ANDROID/WIDGET/CURSORADAPTERHTML,201252017GITHUB代碼托管NETJU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- YY 0459-2025外科植入物丙烯酸類樹脂骨水泥
- 新疆北庭希望環??萍加邢薰炯舅_爾縣25萬噸-年危廢處理利用項目(2)環評報告
- 某著名企業DeepSeek系列09DeepSeek政務應用場景與解決方案
- 工業廢水處理與綠色工藝技術
- 工業廢氣治理技術與方法探討
- 工業大數據的分析與應用
- 工業建筑設計及自動化機電系統
- 工業污染防治與綠色制造技術分析
- 工業網絡通信協議與技術標準
- 工業生產中的設備優化管理
- 2025年合肥城建發展股份有限公司及所屬子公司招聘17人(二批次)筆試參考題庫附帶答案詳解
- 【上料機械手結構中的真空系統的設計計算案例1100字】
- 西方美術史試題及答案
- 七年級數學下學期期末測試卷(1)(學生版+解析)-2025年七年級數學下學期期末總復習(北師大版)
- 醫院員工手冊管理制度
- 校園短劇創作與演出指導行業跨境出海項目商業計劃書
- 東航客運崗位面試題目及答案
- 【7歷期末】安徽省合肥市包河區2023-2024學年部編版七年級下學期期末歷史試卷
- 國家開放大學本科《理工英語4》一平臺機考第五大題寫作題總題庫
- 路基交驗具體要求(共5頁)
- 粉煤灰對土壤和作物生長的影響
評論
0/150
提交評論