毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc

上传人:仙人指路1688 文档编号:2394312 上传时间:2023-02-17 格式:DOC 页数:52 大小:3.47MB
返回 下载 相关 举报
毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc_第1页
第1页 / 共52页
毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc_第2页
第2页 / 共52页
毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc_第3页
第3页 / 共52页
毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc_第4页
第4页 / 共52页
毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc》由会员分享,可在线阅读,更多相关《毕业论文基于Android平台的车辆信息查询系统的开发设计25664.doc(52页珍藏版)》请在三一办公上搜索。

1、华南理工大学毕业设计(论文)基于Android平台的车辆信息查询系统的开发学院(系):专业班级:学生姓名:指导教师:目 录目 录8摘 要10Abstract111绪论121.1问题描述与项目动因121.2篇章结构132Android移动操作系统142.1移动计算142.2Android技术背景142.2.1Android的特性142.2.2Android架构152.3Android平台本地应用的开发162.3.1虚拟机之上的Java应用162.3.2Linux之上的C/C+本地代码162.4Android平台数据的存储与同步172.4.1嵌入式关系数据库管理系统SQLite172.4.2And

2、roid平台的数据同步193Android平台上的车牌识别203.1图像处理203.1.1OpenCV203.1.2JavaCV203.2车牌探测213.2.1将原始图像转化为灰阶图像223.2.2灰阶图像的平滑与增强处理223.2.3灰阶图像转化为二值图像223.2.4从二值图像中提取轮廓233.2.5基于边缘检测的车牌探测233.3车牌字符分割243.4车牌字符识别253.4.1Tesseract OCR引擎253.4.2车牌语言的训练253.4.3Tesseract库在Android中的使用274需求分析与设计294.1功能需求294.1.1用例模型294.1.2交互图324.2非功能需

3、求345系统设计、实现与测试365.1系统的设计365.1.1程序逻辑设计365.1.2数据库设计385.2系统实现385.2.1支撑条件395.2.2类的实现415.2.3数据库模式425.3运行与测试435.3.1运行演示435.3.2测试466结语与后续计划48参考文献49致 谢52插图目录:图1 Android架构图15图2 OpenCV的构成20图3 AndroidVIQ项目目录结构21图4 原始车辆图像22图5 灰阶图像22图6 平滑与增强过后的灰阶图像22图7 二值图像23图8 轮廓图像(黑色背景上的白色轮廓线,不易观察)23图9 检测出的车牌图像24图10 车牌图像的轮廓24图

4、11 分割后的车牌字符25图12 分割后再合并的车牌字符25图13 车牌字符训练图片 图14 连通多部首汉字以简化盒子文件的修改26图15 项目tesseract-android-tools的目录结构27图16 本系统直接用例模型30图17 系统抽象用例模型30图18 细化并扩展了的用例模型31图19用例“编辑车辆信息”的顺序图33图20 UI类的交互图34图21 用例“浏览车辆信息库”和“浏览车辆登记单”实际的类图37图22 项目目录结构39图23类“VehicleItemViewActivity”的实现42图24 车辆信息库 图25 快速查找 图26 快速查找43图27 车辆信息库列表项的

5、上下文菜单 图28 查看车辆 图29 编辑车辆信息44图30 删除车辆信息 图31 联系车主 图32 浏览车辆登记单44图33 查看车辆 图34登记车辆 图35 登记信息立即显示在了登记记录列表中45图36 查询/登记车辆 图37 成功登记的车辆 图38 创建车辆信息46图39 成功创建车辆信息46摘 要本文基于Android移动操作系统,集成了OpenCV、Tesseract OCR、JavaCPP、SQLite等几大开源技术,设计并实现了一个基于Android平台的车辆信息查询系统。该系统除针对车辆信息及其车辆登记记录简单快捷的增删改查操作外,还具有自动车牌识别、快速拨打电话、多终端数据同

6、步等功能,能满足小区(停车场)车辆管理、“黑的”鉴别、基于车辆识别的个性化服务等诸多场景的需求。论文主要学习、研究基于Android平台的车辆信息查询系统的技术实现,具体内容包括:Android技术背景,Android平台本地应用的开发,Android平台数据的存储与同步,以及Android平台上车牌识别技术的实现。通过本对课题的调查、研究与实现,归纳出了Android系统在车辆管理方面的典型应用场景和用例;介绍了与之相关的理论和技术基础;详细讲解了这些理论和技术基础在本系统中的实践与运用;围绕数据同步子课程,研究了在多个Android终端间同步数据的解决方案;围绕关键子课题车牌识别,研究并采

7、用了OpenCV作为车牌图像处理技术,Tesseract OCR作为车牌字符识别技术,JavaCPP作为在Android平台上高效调用OpenCV与Tesseract OCR共享库的技术,以及Android上内置的SQLite嵌入式数据库技术。本文的特色在于:1)将车牌识别技术在Android上成功实现;2)集成创新,车牌识别等技术取材于谷歌代码上的开源项目,源码易于获得且允许商业应用;3)本课题亦以开源项目的形式开展。关键词:Android; 车牌识别; 信息系统; OpenCV; Tesseract OCR; JavaCPP; SQLiteAbstractThis thesis imple

8、ments a Vehicle Information Query (VIQ for short) system based on Android mobile operating system. It integrates four open source technologies: OpenCV, Tesseract OCR, JavaCPP and SQLite. Besides a set of fast CRUD operations on vehicle information and vehicle checking records, the implemented VIQ sy

9、stem also has features like automatic licence plate recognition (ALPR), fast call making, data sync among multiple terminals and more, which can satisfy requirements of senerios like community (or parking lot) vehicles management, illegal taxis identification, customized services based on vehicle id

10、entification and so on.In this thesis, we studied the implementation of VIQ systems based on Android. It mainly includes: 1) the background of Android; 2) the development of Android local application; 3) the storage and sync of data on Android; and 4) the implementation of ALPR on Android.Through th

11、e investigation, study and implementation of this degree project, this thesis has summarized some typical scenarios and use cases of Android applications on vehicle managements; introduced related theory and technology basis; detailed the application of them in this project; on data sync, studied so

12、lutions to syncing data among multiple Android terminals; on ALPR, studied and adopted OpenCV as the way to manipulate images, Tesseract OCR as the way to recognize licence plates, JavaCPP as the way to efficiently call the underlying shared libraries of OpenCV and Tesseract OCR, and SQLite as the w

13、ay to save permanent data on Android.Features of this thesis: 1) Having ALPR implemented on Android. 2) An integrated innovation, with technologies like ALPR from open source projects at Google code; source codes are easy to get and available for commercial use; 3) The background degree prjoect also

14、 developed as an open source project.Key Words:Android; licence plate recognition; ALPR; information system; OpenCV; Tesseract OCR; JavaCPP; SQLite1 绪论随着国民经济的发展,车辆迅速普及。小区、停车场、道路等车辆集中的地方,存在需对问题(占用车位、违规停放等)车辆或来往车辆进行登记和身份鉴定等诸多需求,以实现诸如快速联系车主、计时计费、“黑的”鉴别、基于通过车辆识别取得顾客定制信息的个性化服务等业务应用。这些应用普遍存在场地不固定、需求变化快等特点

15、,传统基于固定车牌识别装置和台式计算机的车辆管理系统很难适应。即使努力适应,建设传统车辆管理系统,需要有专用的摄像装置;车辆的行驶路径和停放位置须服从摄像装置的要求;需要设置护栏,却又容易导致车辆停放困难。这此无疑增加了车辆信息管理的成本,制约了车辆信息数字化的进程。移动智能终端的普及,让移动计算正取代传统桌面计算成为越来越重要的信息处理方式。Android移动操作系统在移动计算平台中处于领先的地位。配备摄像头、GPS和网络功能的Android终端尤其是Android手机,完全能在车辆管理信息系统中扮演重要的角色,其中最重要的是车辆信息的查询,其次重要的是车辆信息的登记。Android终端在扮

16、演这一角色的过程中,有两大问题需要解决:一、有限的计算能力,如何快速准确地进行车牌识别,以自动查询车辆信息,并对车辆信息进行结构化记录;二、多终端协同工作,在网络不可靠的情况下,如何获取与存储数据,又如何在一定程度上保持数据的同步,以共享最新的车辆信息,或供进行统计与决策。关于Android平台上的车牌识别,在本系统中,我们通过使用JavaCPP和JNI技术实现了对OpenCV和 Tesseract OCR本地代码库的调用;为了准确识别出车牌号码,我们通过Tesseract训练出了中华人民共和国机动车号牌1的语言包。关于Android平台上数据的存储与同步,在本系统中,我们采用了Android

17、内建的SQLite技术进行数据的结构化存储与访问;特别针对Android 4.0及以上版本,讨论了端对端Wi-Fi直连通讯技术的实现。1.1 问题描述与项目动因车辆信息,包括车辆本身的信息车牌号、车架号、车型、车名、车身颜色等和车主的信息姓名、电话、身份证号、出生年月、驾照号等;为了更加易于识别车辆与车主,应该提供二者的照片;此外,车辆的活动登记,包括时间、地点、备注等,也是十分重要的信息。这些信息在实际典型场景中的应用,举例如下:1)小区(停车场)车辆管理目前,很多小区都为户主分配了专用的停车车位,车位未经允许被占用的现象却时有发生,在一定程度上扰乱了社区的和谐。对此,前来解决问题的小区保安

18、可使用本系统,对问题车辆进行拍照。系统自动识别出该车车牌号,查询小区车辆备案数据库。如果查得该车属于小区户主,则可立即拨打户主电话;否则可将该车加入黑名单,备后续处理。对违规停放的车辆也可作相同的处理。此外,部分小区、校园以及停车场,出入口众多或不固定,又不适合设置门禁,传统固定式车牌识别系统难以有效实施出入登记或计费。使用本系统,工作人员对入场车辆进行拍照登记,并开始计费;车辆出场时再次进行拍照,或取出其上次登记记录,结束计费。如有需要,还可以进行身份认证和信用查询。2)“黑的”鉴别武汉现有的违法运营计程车(俗称“黑的”),目前有超过4000辆2。黑的收费随心所欲,扰乱正常市场秩序,且没有安

19、全和信誉保障,给市民出行带来了诸多问题。使用本系统,巡逻警察跟踪可疑计程车并拍照登记,同时记录时间和位置。根据所识别车牌号查询备案计程车数据库。如果找不到拥有该车牌号的合法计程车信息,则可进一步追查;如果找到,通过照片对比和询问车主现在的位置,即可判断该车是否真实。3)服务机构个性化服务个性化、定制服务能给顾客带来宾至如归的感觉,也是很多服务机构的重要业务内容。使用本系统,服务机构保安拍摄或输入前来的顾客车辆的车牌号,从该机构建立的顾客信息数据库中取出顾客的相关信息。顾客下车前,其称呼、喜好、来访记录已为迎宾人员所掌握;定制的或与上次相同的服务可立即提供。上述应用场景要求移动智能设备有拍照、自

20、动车牌识别、自动记录时间和地点、快速查询车辆信息、保存车辆信息等功能。此外,数据备份、多设备间数据同步、与计算机共享数据等,也是隐含的功能需求。本项目即致力于设计并实现一个基于Android平台的车辆信息查询系统,以满足上述应用场景的需求。1.2 篇章结构本论文正文部分围绕以下结构展开:第二章介绍Android移动操作系统,重点介绍了Android平台本地应用的开发和数据的存储与同步技术。第三章介绍车牌识别的理论、技术以及在Android平台上的实现。它是本项目的创新点和核心工作之一。第四章介绍系统需求的分析与设计。第五章介绍系统的设计、实现与测试。第六章总结全文,并对接下来的工作提出展望与规

21、划。2 Android移动操作系统2.1 移动计算移动计算是随着移动通信、互联网、数据库、分布式计算等技术的发展而兴起的新技术。移动计算技术将使计算机或其它信息智能终端设备在无线环境下实现数据传输及资源共享。它的作用是将有用、准确、及时的信息提供给任何时间、任何地点的任何人。这将极大地改变人们的生活方式和工作方式3。手持移动设备,或手机,特别是智能手机,将是由传统桌面计算向移动计算或云计算这一转变过程中的主力军。随时随地可用,传感器丰富等相对传统桌面计算机的突出优点,为智能手机改变人们的工作与生活提供了各种可能。智能手机将逐步发展成人们眼、耳、脑以及不存在感官的延伸,帮助人们获取、处理、存储与

22、呈现信息,帮助人们作出决定,展现给人们美好的事物,引领人们更加智慧与舒适地生活。移动平台是目前和将来相当一段时间应用部署的重要平台。2012年年初,苹果应用商店已经拥有了超过53万款应用,而Google Play所能提供的应用数目也已突破了40万大关,涵盖了游戏、效率、社交、购物、交通、体育、图书与工具书等等领域,渗入了生活的方方面面。下载量上,仅以Android以例。最高下载量已达5亿(谷歌地图),相当多的免费应用的下载量在十万级别以上,收费应用也在万级别以上(具体请参照Google Play)。一款受欢迎的应用的市场价值十分巨大,而且这一市场才刚刚起步。2.2 Android技术背景And

23、roid是用于移动设备上的一个包含一操作系统,一系列中间件,以及部分关键应用软件栈。Android SDK网站提供了在Android平台上使用Java编程语言开发应用程序所必须的工具和API4。2.2.1 Android的特性l 应用框架,实现了组合的重用与替换l Dalvik虚拟机,专为移动设备优化l 集成的浏览器,基于开源的WebKit引擎l 优化的图形,由一个定制的2D图形库驱动,3D图形基于OpenGL ES 1.0规范(硬件加速可选)l 媒体支持,支持常用音频、视频以及图像格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)l GSM通话(依赖

24、硬件)l 蓝牙,EDGE(增强型数据速率GSM演进技术),3G,以及Wi-Fi(依赖硬件)l 相机,GPS,指南针,加速计(依赖硬件)l 丰富的开发环境,包括一个设备模拟器,测试工具,内存和性能分析,以及用于Eclipse IDE的一个插件2.2.2 Android架构图1 Android架构图Android架构由上至下分四层,如图1。描述如下:l 应用层:包括由系统默认提供了桌面、联系人、通话、浏览器等基础应用,以及由广大开发人员开发、可下载安装的拓展应用。拓展应用访问下层应用框架层方面,和由厂商提供的基础应用一样,没有任何尊卑之别。l 应用框架层:应用开发基本的API,提供包管理、通话管理

25、、资源管理、位置管理、通知管理、Activity管理,窗口管理、内容提供设施、视力系统。l 库:用C/C+写成。提供SGL底层2D绘图引擎,安全套接层,嵌入式标准C库,OpenGL 3D绘图,FreeType字体,浏览器核心,用户空间显示管理,媒体框架,以及轻量级SQLite关系型数据库。l 运行环境:与JRE极其相似。核心包包含了在Java开发中常用的类库如IO、Utility等;Dalvik虚拟机类似JVM,同样也是专为Android定制,针对手持设备,在存储、计算以及功耗等方面作了格外优化。l Linux 内核:Android整个操作系统基于Linux内核,内核提供显示、照相、闪存、软键

26、盘、Wi-Fi、音频等驱动程序,提供对进程间通信机制Binder的驱动,提供电源管理服务。2.3 Android平台本地应用的开发同PC上应用的部署模式一样,Android应用也可有纯本地应用,C/S模式和B/S模式。此外,C/S和B/S相结合的模式本地应用利用Web控件显示Web页面,或Web应用利用Javascript调用本地程序也十分常见。此外,具有数据同步功能的本地应用模式,在联系人、日历、电子邮件等核心应用中都有体现。2.3.1 虚拟机之上的Java应用Android应用(至少是目前)是使用Java语言开发的。Java代码被编译成字节码,再被编译成.dex可执行文件,以在Dalvik

27、虚拟机上高效运行。Android应用由四大组件构成Activity, Service, Content Provider, 和Broadcast receiver。每个组件以类的形式存在。类应该具有高度的内聚性;类与类之间应该具有极低的耦合性。Activity负责呈现用户界面并与用户交互;Service运行在后台,负责处理耗时操作,或是为服务远程进程;Content Provider负责管理可被共享的应用程序数据;Broadcast receiver则能响应系统级的广播消息。Android系统设置独有的特点是,任何应用都能启用其他应用的组件,显式或隐式地。一个Activity可以调用另一个Ac

28、tivity或Service;Service可在Activity结束之后关闭,或继续运行。当系统启用某一应用的某一组件,该应用的进程就被启动(如果不是已经启动了的话),该组件所需的类就被初始化。不同于其他的系统,Android应用程序没有唯一的入口(比如就没有main()函数)6。2.3.2 Linux之上的C/C+本地代码Android应用由Java所写,运行在虚拟机上,在处理大量数值、矩阵运算时,效率比较低。C、C+则直接运行于硬件之上,能充分发挥硬件的性能。此外,大量传统与广泛使用的底层库文件(包括图形图像处理、数据库管理系统等)都是由C/C+写成,它们向Android平台的迁移应以怎样

29、的方式进行呢?下面介绍三种方式:JNI,JNA和JavaCPP。1)JNI(Java Native Interface)JNI,Java本地接口,是一个允许运行在Java虚拟机上的Java代码调用本地代码或被本地代码调用的应用编程框架。本地代码即指用C/C+或汇编写成的、依赖硬件和操作系统平台的程序或库。它定义了可管理代码(用Java语言写成)与本地代码交互的方法。它厂商中立,支持从动态链接库载入代码;虽然繁琐,但常能获得可观的效率7。2)JNA(Java Native Access)JNA,Java本地访问,是SUN公司主导研发的,建立在经典的JNI的基础之上的一个开源框架。它是也另一个访问

30、本地代码的方法,大有取代JNI的趋势。JNA的设计就是为了提供一种自然的方式、以最少的工作量实现对本地代码的访问。它不需要像JNI中那样的样板文件或生成的粘合代码9。JNA堪比Window的P/Invoke和Python的ctype。但是,Android官方并没有集成JNA。据Android开源项目参与者fadden回答:第一是因为性能不如JNI,在对性能要求高的应用中人们更倾向于使用JNI;第二是因为使用Java和公开的API来实现应用更有利用应用程序自身和Android的发展;第三是JNA遵循的是LGPL许可,将它放入Android官方发行会带来许可问题。尽管如此,Android官方仍然会

31、考虑在虚拟机中提供挂钩,允许开发者将JNA库作为应用程序安装包的一部分,自行使用10。JNA源代码可从GitHub获得11。3)JavaCPPJavaCPP提供了在Java中高效访问C+的方法,与某些C/C+编译器与汇编语言交互的方式颇为类似。在其底层,同样采用的是JNI,因此所有的Java实现它都支持,包括Android。与其他访问本地代码的途径(包括SWIG,CableSwig,JNIGeneratorApp,JNIWrapper,Platform Invoke,GlueGen,JNIDirect,JNA,JniMarshall,JNative,J/Invoke,HawtJNI,BridJ

32、等等)所明显不同的是,它高效而自然地支持C+语言许多经常被认为有弊病的特性,包括操作符重载、模板类和模板函数、成员函数指针、回调函数、嵌套结构体定义、可变长参数、嵌套命名空间、包含任意循环的大数据结构、多继承、按值/引用/微量传递、匿名结构体、位域、异常、析构以及垃圾回收。JavaCPP项目的作者samuel已经通过JavaCPP,为OpenCV,FFmpeg,libdc1394,PGR FlyCapture,OpenKinect,videoInput,和ARToolKitPlus等图像库生成了完整的接口,集成到了他的开源项目JavaCV当中18。JavaCPP底层实现最开始使用的是JNA,后

33、来又回到了JNI10。2.4 Android平台数据的存储与同步2.4.1 嵌入式关系数据库管理系统SQLiteSQLite是一个包含一个自包含、无服务、零配制、事务型的SQL数据库引擎的软件库。它是世界上最流行的数据库引擎之一。并且,SQLite的源代码已经进入了公共域,可自由使用11。Android提供了对SQLite数据库的完全支持。你所创建的任何数据库都能被当前应用中的任何类按名访问,当前应用之外的类则不行12。2.4.1.1 SQLite 3中的数据类型14大部分数据库引擎(就我们所知,除SQLite之外的任何其他数据库引擎)使用着传统的静态类型。静态类型下,一个值的数据类型由其容器

34、该值所存储在的列所决定。SQLite使用一种更加泛化的动态类型系统。在SQLite中,一个值的数据类型依赖于其值本身而非其容器。在其他静态类型数据库上能使用的SQL语言,在SQLite上同样能使用;在这一意义上讲,SQLite的这一动态类型系统相对其他数据库的静态类型系统具有向后兼容的能力。而且,SQLite中的动态类型能让它完成传统类型数据库所不能完成的工作。最后,值得注意的是,SQLite对特殊的一列ROWID的处理。它与在Android中对SQLite的访问密切相关。2.4.1.2 ROWID和整型主码SQLite表的每一行都有一个64位有符号整数键,唯一地标识表中该一行。该整数通常被称

35、作“rowid”。rowid的值可使用以下任意列名的任意大小写形式访问:“rowid”“oid”或“_rowid_”。如果一个表已经存在了一个用户定义的名叫“rowid”“oid”或“_rowid_”的列,则使用这些名字时,访问的是用户定义的列;这一整型rowid行将不再能被检索到15。SQLite的每一张表都以一棵B树的数据结构存储。该树包含了对每一行的一个入口,入口地址是一个整型主码(INTEGER PRIMARY KEY),或rowid。这意味着按rowid检索或排序记录速度极快。搜索某一指定或在某一范围内的rowid的行,比相同情况下在其他主码或索引上搜索,要快一倍15。也正是这个原因

36、,Android中重要的UI组件ListView访问SQLite数据库所使用的适配器CursorAdapter对查询结果Cursor的列有一个特殊的要求:必须要有一个名叫“_id”的列16。在实现上,ListView的一行(即一个ListItem)对应Cursor的一行;据观察,Android为该ListItem分配了id,其值正是“_id”列的值。可通过以下方法获得ListView中的某一项的id:方法一:单击列表项的回调函void android.app.ListActivity.onListItemClick(ListView l, View v, int position, long

37、id)的形参中本身就有id;方法二:长按列表项,引起上下文菜单弹出的回调函数boolean android.app.Activity.onContextItemSelected(MenuItem item)中,可以这样取得被长按列表项的id:/获取弹出菜单的菜单信息;该菜单信息包含了适配器上下文信息,其中就包含了适配器为当前列表项绑定的(Cursor的)idAdapterContextMenuInfo info=(AdapterContextMenuInfo) item.getMenuInfo();/当前列表项的idint id=info.id;此外,要获取当前列表项中子View的值,也有快捷

38、的方法:/当前列表项在适配器上的位置int position=info.position;/获取适配器为当前列表项绑定的Cursor(或一行记录)Cursor cursor = (Cursor) getListAdapter().getItem(position);/反过来获取Cursor中的列“_id”的值,与info.id对比String _id = cursor.getString(cursor.getColumnIndex(_id);Log.v(TAG, _id at position + position + , id + id + is + _id);对比会发现,无论对列表项进行新

39、增、删除、排序等任何操作,id与_id均相同;相反,position表示的只是当前列表项在列表ListView中的下标,与id或_id没有直接的关系。以上问题是困扰作者本人在内的许多开发者许久的问题。通过一定的分析和实验,结果是可知的。这或许也是做开发的乐趣之所在。2.4.2 Android平台的数据同步Android终端同Web服务器、Android终端与终端之间的数据同步,可以采用同Android系统中谷歌帐户应用(Gmail、Google Calendar等)类似的方法,通过SampleSyncAdapter,利用Android框架中的帐户管理器和同步管理器实现。这里不再赘述。本文将讨论

40、的,是基于Android 4.0及以上版本API中引入的最新技术端对端Wi-Fi直连通讯技术。2.4.2.1 端对端Wi-Fi直连通讯技术从Android 4.0(API 14)开始,Wi-Fi直连通讯技术允许设备通过Wi-Fi直接(Wi-Fi Direct)连接,不再需要中间互连点(如无线路由器或Wi-Fi热点)。使用Android所提供的API,你可以发现并连接到同样支持Wi-Fi直接的设备上,然后与之进行比蓝牙距离更远的高速通信。基于该技术,我们构想出了两种多终端通信方式:1)C/S单向同步。2)对等双向同步。鉴于实验条件不允许,我们仅对逻辑的实现作理论的分析。相信经过这一分析,在And

41、roid API 14实现起来是不难的。(1)C/S单向同步在该同步方式中,指定一台设备作为服务器,或才最先启动同步服务的设备自动作为服务器;其他设备作为客户机;首先轮流上传各自的数据,服务器负责数据的新增、更新与合并;然后轮流从服务器下载最新的数据。作为服务器的设备(服务设备)首先启动同步服务,其他设备(请求设备)搜寻到该设备,发送同步请求。服务设备在用户的协助的对请求设备进行身份认证,并允许保存身份信息(即配对)以供下次免认证连接。服务设备上启用一个服务,或为每个设备启用一个服务,响应所有设备发送过来的通知(包含对数据变更的描述和数据本身)。响应操作包括:备份同步前的数据;新增设备新增的记

42、录,缓存设备的修改和删除请求并在最后提示用户确认(修改或删除),最后标记版本。全部设备的变更上传完成后,服务设备转而向所有请求设备发送指令,备份并删除其同步前数据,并下载同步后的数据。(2)对等双向同步在该同步方式中,设备间对等通信,向其他配对设备播送自身数据的变化,同时接收与处理其他配对设备数据变化的通知。该方式与C/S单向同步的不同之处在于,设备同时扮演两种角色:服务设备和请求设备;无需下载同步后数据。两种同步方式都希望所有设备在当时当地可用,否则每一部设备上的数据都不是严格意义上“最新”的数据。但在实际应用中,对“最新”的要求并不高;相反,每周一次的同步(比如在例会与工作总结时同步工作数

43、据),在同步时展示与统计每一部终端的数据变更,反而有得于对工作的评价。3 Android平台上的车牌识别车牌识别这里特指自动车牌识别,即运用计算机视觉技术,从包含车牌的图像中自动探测到车牌区域,提取该区域车牌图像进行进一步处理,使其中的车牌字符适合光学字符识别(OCR)引擎识别,最后返回完整的车牌号字符串的过程。该过程包含的三大核心环节对识别率起到了至关重要的作用:1)车牌探测;2)车牌字符分割;3)车牌字符识别。下面对其分别进行描述并加以实现。3.1 图像处理在图像学中,图像处理是对输入图像的任何形式的信号处理;其输出可以是一幅图像,或与之相关的字符集或参数19。本课题中包含大量的图像处理,

44、因此我们研究并采用了开源图像处理库OpenCV。3.1.1 OpenCVOpenCV(开源计算机视觉)是一个用于实时计算机视觉的程序函数库。它在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基本结构和

45、算法,XML支持,绘图函数CV图像处理和视觉算法HighGUIGUI,图像和视频 I/O图2 OpenCV的构成3.1.2 JavaCVJavaCV是一个OpenCV的Java接口。它为计算机视觉领域调查者们常用的库提供了封装。这些库包括:OpenCV,FFmpeg,libdc1394,PGR FlyCapture,OpenKinect,videoInput,和ARToolKitPlus等。com.googlecode.javacv.cpp包命名空间下的类便展示出了完整的API。并且,实用类还使自身的功能在Java平台包括Android平台上更加可用21。JavaCV开源项目的负责人samue

46、l,即前述JavaCPP项目的负责人。JavaCV正是利用JavaCPP技术实现的OpenCV的Java接口。编译或生成javacpp.jar和javacv.jar,作为本项目的引用包;将javacv-android-arm.jar和OpenCV-2.4.0-android-arm.zip中所有的库文件解压至项目根目录下的libs/armeabi文件夹中,即完成了对JavaCV库引用。项目目录结构如图3。具体请参照项目主页的介绍。图3 AndroidVIQ项目目录结构3.2 车牌探测在图像处理技术中,Haar特征提取技术常用于从图像中提取物体22。该技术涉及神经网络等算法,限于知识水平,暂不研

47、究。边缘检测作为一种简单的物体检测方法,特别适合于矩形外框的车牌。本课题采用基于边缘检测的车牌探测技术。原始车辆图像如图4。图4 原始车辆图像3.2.1 将原始图像转化为灰阶图像cvCvtColor(mVehicleImage, vehicleImageGray, CV_BGR2GRAY);图5 灰阶图像3.2.2 灰阶图像的平滑与增强处理cvSmooth(vehicleImageGray, vehicleImageGray, CV_GAUSSIAN, 3);cvEqualizeHist(vehicleImageGray, vehicleImageGray);图6 平滑与增强过后的灰阶图像3.2.3 灰阶图像转化为二值图像cvThreshold(vehicleImageGray, vehicleImageBinary, 128, 255, CV_THRESH_BINARY);图7 二值图像3.2.4 从二值图像中提取轮廓CvSeq contours = new CvSeq();int objects = cvFindContou

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号