




已阅读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直接的设备上,然后与之进行比蓝牙距离更远的高速通信。基于该技术,我们构想出了两种多终端通信方式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分钟前”等)格式显示,在部分场景中有较大的用处。“浏览车辆登记单”页面中的操作,和前述“浏览车辆信息库”页面的操作十分类似,这里不再赘述。(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢琴键盘机械制作工三级安全教育(班组级)考核试卷及答案
- 报刊业务员入职考核试卷及答案
- 2025非全日制劳动合同范本
- 生技科安全培训试题及答案解析
- 半导体继电器装调工效率提升考核试卷及答案
- 基金从业资格北京考试及答案解析
- 井下电泵作业工知识考核试卷及答案
- 2025d类事业单位中职题目及答案
- 2025企业设备购置融资租赁合同
- 白酒配酒工成本预算考核试卷及答案
- 蜂窝组织炎护理小讲课
- 智慧树知道网课《工业机器人技术基础》课后章节测试满分答案
- (一检)泉州市2026届高三高中毕业班质量监测(一)数学试卷(含标准答案)
- 管道热处理课件
- 纤维转盘滤布滤池运行维护技术说明
- 2025至2030中国无烟产品行业发展趋势分析与未来投资战略咨询研究报告
- 2021年全球工作场所状况报告 State of the Global Workplace 2021 Report
- 球墨铸铁管-施工方案(3篇)
- (正式版)DB35∕T 2242-2025 《户用光伏发电系统安装技术规范》
- 2025年职业技能鉴定考试(考评员)经典试题及答案
- 微创手术不育治疗-洞察及研究
评论
0/150
提交评论