基于Android平台的车辆信息查询系统的开发word格式

上传人:仙*** 文档编号:79010790 上传时间:2022-04-22 格式:DOC 页数:53 大小:3.59MB
收藏 版权申诉 举报 下载
基于Android平台的车辆信息查询系统的开发word格式_第1页
第1页 / 共53页
基于Android平台的车辆信息查询系统的开发word格式_第2页
第2页 / 共53页
基于Android平台的车辆信息查询系统的开发word格式_第3页
第3页 / 共53页
资源描述:

《基于Android平台的车辆信息查询系统的开发word格式》由会员分享,可在线阅读,更多相关《基于Android平台的车辆信息查询系统的开发word格式(53页珍藏版)》请在装配图网上搜索。

1、武汉理工大学毕业设计(论文)武汉理工大学毕业设计(论文)基于Android平台的车辆信息查询系统的开发学院(系):计算机科学与技术学院专业班级:计算机科学与技术专业0806班学生姓名:张方纪指导教师:杨青学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。作者签名: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允

2、许论文被查阅和借阅。本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密囗,在 年解密后适用本授权书2、不保密囗。(请在以上相应方框内打“”)作者签名: 年 月 日导师签名: 年 月 日武汉理工大学本科生毕业设计(论文)任务书学生姓名 张方纪 专业班级 计算机0806 指导教师 杨青 工作单位 武汉理工大学 设计(论文)题目:基于Android平台的车辆信息查询系统的开发设计(论文)主要内容:开发一个“车辆信息查询系统”(简称系统)。该系统运行于手机,基于android平台;内嵌车辆信息

3、数据库(或连接后台服务器端数据库),以及车牌识别技术。数据库中记录了相关车辆的车牌号、车型、VIN码(车架号)、车主姓名、联系电话、性别、年龄、驾照号等。系统可用于小区车辆管理,或Taxi管理等应用领域。主要功能包括:1)车牌号输入,2)车牌拍照及车牌识别,3)根据车牌号查询车辆信息,比如车主及联系电话,4)车辆信息的浏览和查询,5)嵌入式数据库与服务器端数据库的同步。其中,功能1)2)3)是必须的最小功能集合。论文研究工作的主要支持环境:1)Java开发环境,如Eclipse2)Android SDK要求完成的主要任务:1 学习并运用相关技术和工具,独立完成本软件系统的设计与实现。系统应能在

4、实际环境(android手机)或PC模拟环境中运行,满足功能和性能方面的需求。2 按学校论文格式规范撰写学士论文。完成相关英文资料的翻译(不少于5000汉字)。学生提交论文和翻译资料的同时,上交存放有论文和所设计软件源代码的光盘片。3 要求遵守毕业设计的纪律,每周与指导老师至少联系一次,以介绍有关设计进展,并认真填写毕业设计日志。参考资料:1. 2. 3. ,谷歌代码搜索指导教师签名 系主任签名 院长签名(章)_武汉理工大学本科学生毕业设计(论文)开题报告1、目的及意义(含国内外的研究现状分析)1.1 毕业设计的目的毕业设计课题“基于Android平台的车辆信息查询系统的开发”,从过程和结果两

5、个角度来看,包含以下两点意义:1.1.1 过程接触前沿技术,综合所学知识,提升专业素养Android系统是最近几年才诞生的一个的全新的、基于Linux和嵌入式平台的现代操作系统。它由搜索引擎巨头Google所引导,一整套开发工具及文档免费可用,集成Google云服务(Gmail、语音搜索等),有完整的生态链,获得了世界范围内广泛而巨大的市场和支持,其上的应用渗入到了我们生活的方方面面。Android基于Java,有与Java相同的语法和类似的开发方式(ADT+Eclipse)及运行机制(Android虚拟机),并专为移动设备(有低功耗,多传感器,存储和计算性能受限等特性)定制。做Android

6、应用开发,了解Android应用从需求分析与设计,到总体设计,到详细设计,到编码与测试,到最后的部署、维护、营销、升级等等,是对本专业所学知识的一个大的融会贯通,更是对吸收新知识、创新与营销等能力的一个大的锻炼。车牌识别技术是本课题的重难点。图像识别、语音识别对于本人来说是从未接触过的技术,同时也是充满挑战性的。通过查阅文献、参考成熟系统等手段,自学相关知识,加上吸收与再创新,是可以取得相当的成绩的。集成创新,将已有技术应用到新的平台和领域,在这里显得尤为重要。基于Android平台的管理信息系统,在继承传统桌面MIS系统的应用模式外,有其独特的性质,比如C/S与B/S模式的结合,设备与服务器

7、的数据同步,又如新的用户界面、交互方式等的设计,再如地理位置等传感器信息的合理利用等。这些都值得思考与研究。1.1.2 结果开发出可用甚至先进的真实系统,应用于生产实践本课题基于实现的应用需求拥有车牌识别功能的手机车辆信息查询应用。应用涉及小区车辆管理、开放停车场车辆管理、道路黑的管理等诸多领域。如果做得好,可基于本课题成立一个项目,开发出真实可用的系统来。1.2 毕业设计的意义1.2.1 学术意义培养新知识获取与整理的能力(文献、文档的阅读与翻译),锻炼软件工程素养(涉及软件工程的各个阶段),研究与发展车牌识别技术,等等。1.2.1 实用意义做一个真实可用的系统,应用于生产实践。2、基本内容

8、和技术方案2.1 基本内容2.1.1 课题要求开发一个“车辆信息查询系统”(简称系统)。该系统运行于手机,基于android平台;内嵌车辆信息数据库(或连接后台服务器端数据库),以及车牌识别技术。数据库中记录了相关车辆的车牌号、车型、VIN码(车架号)、车主姓名、联系电话、性别、年龄、驾照号等。系统可用于小区车辆管理,或Taxi管理等应用领域。主要功能包括:1)车牌号输入,2)车牌拍照及车牌识别,3)根据车牌号查询车辆信息,比如车主及联系电话,4)车辆信息的浏览和查询,5)嵌入式数据库与服务器端数据库的同步。其中,功能1)2)3)是必须的最小功能集合。2.1.2 课题分析2.1.2.1场景或领

9、域1) 小区车辆管理。小区保安对占位车进行拍照(有识别和登记两大作用)。如果识别出该车为小区内的车,则可联系车主处理,否则加入黑名单。2) 开放停车场车辆管理。开放停车场(广场式,无固定出入口,难以设置门禁),工作人员对入场车进行拍照,开始计费;车出场时进行拍照(简单比对即可匹配入场车)停止计费。3) 道路黑的管理。路上交警跟踪可疑计程车,根据车牌号查询该车之前的照片和车主电话,通过照片对比和询问合法车主现在何处,即可判断该车是否为黑的。2.1.2.2摘要(对课题要求的精化)一个车辆信息查询系统。运行于手机,利用手机随时随地可用的特点(保安和执勤人员有随时到现场处理车辆相关事件的需求);提供提

10、供拍照、录音和触屏三种车牌号输入方式,前两种还能自动识别出车牌号并提供快捷修正功能;存档拍照与录音,以及所识别的车牌号、当时的日期时间和地理位置;根据车牌号快速查询车辆信息和历史记录;在本地获取和存储数据,在有网络连接(特别是Wi-Fi)的情况下将本地与服务器数据进行同步。2.1.2.3关键词及备注u 车牌字符集:u 普通车牌:蓝底白字。由省份简称(汉字),地区代码(字母)和五位号码(数字)组成,样式为“某A12345”。u 机动车牌:黄底黑字。式样与普通车牌相同。u 其他车牌(驾校教练车车牌/警车车牌/涉外车牌/领事馆车辆车牌/军车车牌/港澳台地车牌)暂不考虑。u 语音文本识别:范围为车牌字

11、符集。讲出车牌号,可要求重复一次。通过语音识别技术得出所识别车牌号。u 图像文本识别:范围为车牌字符集。拍摄车辆全图,要求包含足够清晰的车牌号。通过图像识别技术得出所识别车牌号。u 所识别车牌号:由语音或图像识别出的车牌号,用颜色和百分数显示每一个字符的确定度,可单独修正每一个字符(给出候选字符)。u 车牌识别:语音文本识别和(或)图像文本识别。可将语音识别与图像识别相结合,如在拍照时说出所见的车牌号(这也保证了所拍车牌号足够清晰)。u 本地和网络存储:网络服务环境的构建。u 同步:将本手机所获取的最新数据上传到服务器;将服务器上的最新数据(包括由其他类似手机采集的数据)下载到本地。版本控制技

12、术。2.2 技术方案通过以下几点技术方案(路线)达到本课题要求:1) 关于车牌识别技术:a) 阅读国内外核心文献至少十篇,整理重要的内容,充分吸收;b) 获取并研究示例代码,了解技术实现;c) 尝试发现开源或没有版权争议的技术,加以改进与定制,应用到本课题。2) 关于车辆信息查询系统:a) 设计用户及场景,设身处地地为用户着想,分析与设计需求;b) 试用已有的类似的商业软件,从中提取需求;c) 获取并研究类似应用的设计文档,学习好的做法;d) 使用软件工程的方法,文档驱动,用例驱动,测试驱动;e) 先做一步的原型,不断优化,不断拓展,组建构建一个功能足够强的、实现可用的系统。3、进度安排课程设

13、计从第1周(2012年2月13日)开始,到第16周(2012年5月28日)迎接答辩,对共计15周的时间,依照学校规定并结合自身实际情况,作出如下初步安排:第1至3周:选题,查阅文献,研究已有系统,初步把握技术路线,初步理解系统轮廓;第4至8周:文献精读,掌握所需知识并有一定深度的理解;需求精化,已经开发出相对成熟的原型;已经相对前人有了突破方向;第9至15周:已完成软件开发,所开发应用实用可靠,具备一定的市场价值;已经完成毕业论文,文中较好地陈述了课题的研究成果;已准备好毕业答辩。4、指导教师意见指导教师签名:年 月 日注:1开题报告应根据教师下发的毕业设计(论文)任务书,在教师的指导下由学生

14、独立撰写,在毕业设计开始后三周内完成。2“设计的目的及意义”至少800字,“基本内容和技术方案”至少400字。进度安排应尽可能详细。3指导教师意见:学生的调研是否充分?基本内容和技术方案是否已明确?是否已经具备开始设计(论文)的条件?能否达到预期的目标?是否同意进入设计(论文)阶段。目 录目 录8摘 要10Abstract111绪论121.1问题描述与项目动因121.2篇章结构132Android移动操作系统142.1移动计算142.2Android技术背景142.2.1Android的特性142.2.2Android架构152.3Android平台本地应用的开发162.3.1虚拟机之上的Ja

15、va应用162.3.2Linux之上的C/C+本地代码162.4Android平台数据的存储与同步172.4.1嵌入式关系数据库管理系统SQLite172.4.2Android平台的数据同步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车

16、牌语言的训练253.4.3Tesseract库在Android中的使用274需求分析与设计294.1功能需求294.1.1用例模型294.1.2交互图324.2非功能需求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 灰阶

17、图像22图6 平滑与增强过后的灰阶图像22图7 二值图像23图8 轮廓图像(黑色背景上的白色轮廓线,不易观察)23图9 检测出的车牌图像24图10 车牌图像的轮廓24图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

18、项目目录结构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、Tesseract OCR、JavaCPP、SQLite等几大开源技术

19、,设计并实现了一个基于Android平台的车辆信息查询系统。该系统除针对车辆信息及其车辆登记记录简单快捷的增删改查操作外,还具有自动车牌识别、快速拨打电话、多终端数据同步等功能,能满足小区(停车场)车辆管理、“黑的”鉴别、基于车辆识别的个性化服务等诸多场景的需求。论文主要学习、研究基于Android平台的车辆信息查询系统的技术实现,具体内容包括:Android技术背景,Android平台本地应用的开发,Android平台数据的存储与同步,以及Android平台上车牌识别技术的实现。通过本对课题的调查、研究与实现,归纳出了Android系统在车辆管理方面的典型应用场景和用例;介绍了与之相关的理论

20、和技术基础;详细讲解了这些理论和技术基础在本系统中的实践与运用;围绕数据同步子课程,研究了在多个Android终端间同步数据的解决方案;围绕关键子课题车牌识别,研究并采用了OpenCV作为车牌图像处理技术,Tesseract OCR作为车牌字符识别技术,JavaCPP作为在Android平台上高效调用OpenCV与Tesseract OCR共享库的技术,以及Android上内置的SQLite嵌入式数据库技术。本文的特色在于:1)将车牌识别技术在Android上成功实现;2)集成创新,车牌识别等技术取材于谷歌代码上的开源项目,源码易于获得且允许商业应用;3)本课题亦以开源项目的形式开展。关键词:

21、Android; 车牌识别; 信息系统; OpenCV; Tesseract OCR; JavaCPP; SQLiteAbstractThis thesis implements 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 op

22、erations on vehicle information and vehicle checking records, the implemented VIQ system 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) vehicl

23、es management, illegal taxis identification, customized services based on vehicle identification 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

24、and sync of data on Android; and 4) the implementation of ALPR on Android.Through the 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 technolo

25、gy basis; detailed the application of them in this project; on data sync, studied solutions 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 c

26、all the underlying shared libraries of OpenCV and Tesseract OCR, and SQLite as the way 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

27、 easy to get and available for commercial use; 3) The background degree prjoect also developed as an open source project.Key Words:Android; licence plate recognition; ALPR; information system; OpenCV; Tesseract OCR; JavaCPP; SQLite1 绪论随着国民经济的发展,车辆迅速普及。小区、停车场、道路等车辆集中的地方,存在需对问题(占用车位、违规停放等)车辆或来往车辆进行登记和

28、身份鉴定等诸多需求,以实现诸如快速联系车主、计时计费、“黑的”鉴别、基于通过车辆识别取得顾客定制信息的个性化服务等业务应用。这些应用普遍存在场地不固定、需求变化快等特点,传统基于固定车牌识别装置和台式计算机的车辆管理系统很难适应。即使努力适应,建设传统车辆管理系统,需要有专用的摄像装置;车辆的行驶路径和停放位置须服从摄像装置的要求;需要设置护栏,却又容易导致车辆停放困难。这此无疑增加了车辆信息管理的成本,制约了车辆信息数字化的进程。移动智能终端的普及,让移动计算正取代传统桌面计算成为越来越重要的信息处理方式。Android移动操作系统在移动计算平台中处于领先的地位。配备摄像头、GPS和网络功能

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

30、准确识别出车牌号码,我们通过Tesseract训练出了中华人民共和国机动车号牌1的语言包。关于Android平台上数据的存储与同步,在本系统中,我们采用了Android内建的SQLite技术进行数据的结构化存储与访问;特别针对Android 4.0及以上版本,讨论了端对端Wi-Fi直连通讯技术的实现。1.1 问题描述与项目动因车辆信息,包括车辆本身的信息车牌号、车架号、车型、车名、车身颜色等和车主的信息姓名、电话、身份证号、出生年月、驾照号等;为了更加易于识别车辆与车主,应该提供二者的照片;此外,车辆的活动登记,包括时间、地点、备注等,也是十分重要的信息。这些信息在实际典型场景中的应用,举例如

31、下:1)小区(停车场)车辆管理目前,很多小区都为户主分配了专用的停车车位,车位未经允许被占用的现象却时有发生,在一定程度上扰乱了社区的和谐。对此,前来解决问题的小区保安可使用本系统,对问题车辆进行拍照。系统自动识别出该车车牌号,查询小区车辆备案数据库。如果查得该车属于小区户主,则可立即拨打户主电话;否则可将该车加入黑名单,备后续处理。对违规停放的车辆也可作相同的处理。此外,部分小区、校园以及停车场,出入口众多或不固定,又不适合设置门禁,传统固定式车牌识别系统难以有效实施出入登记或计费。使用本系统,工作人员对入场车辆进行拍照登记,并开始计费;车辆出场时再次进行拍照,或取出其上次登记记录,结束计费

32、。如有需要,还可以进行身份认证和信用查询。2)“黑的”鉴别武汉现有的违法运营计程车(俗称“黑的”),目前有超过4000辆2。黑的收费随心所欲,扰乱正常市场秩序,且没有安全和信誉保障,给市民出行带来了诸多问题。使用本系统,巡逻警察跟踪可疑计程车并拍照登记,同时记录时间和位置。根据所识别车牌号查询备案计程车数据库。如果找不到拥有该车牌号的合法计程车信息,则可进一步追查;如果找到,通过照片对比和询问车主现在的位置,即可判断该车是否真实。3)服务机构个性化服务个性化、定制服务能给顾客带来宾至如归的感觉,也是很多服务机构的重要业务内容。使用本系统,服务机构保安拍摄或输入前来的顾客车辆的车牌号,从该机构建

33、立的顾客信息数据库中取出顾客的相关信息。顾客下车前,其称呼、喜好、来访记录已为迎宾人员所掌握;定制的或与上次相同的服务可立即提供。上述应用场景要求移动智能设备有拍照、自动车牌识别、自动记录时间和地点、快速查询车辆信息、保存车辆信息等功能。此外,数据备份、多设备间数据同步、与计算机共享数据等,也是隐含的功能需求。本项目即致力于设计并实现一个基于Android平台的车辆信息查询系统,以满足上述应用场景的需求。1.2 篇章结构本论文正文部分围绕以下结构展开:第二章介绍Android移动操作系统,重点介绍了Android平台本地应用的开发和数据的存储与同步技术。第三章介绍车牌识别的理论、技术以及在An

34、droid平台上的实现。它是本项目的创新点和核心工作之一。第四章介绍系统需求的分析与设计。第五章介绍系统的设计、实现与测试。第六章总结全文,并对接下来的工作提出展望与规划。2 Android移动操作系统2.1 移动计算移动计算是随着移动通信、互联网、数据库、分布式计算等技术的发展而兴起的新技术。移动计算技术将使计算机或其它信息智能终端设备在无线环境下实现数据传输及资源共享。它的作用是将有用、准确、及时的信息提供给任何时间、任何地点的任何人。这将极大地改变人们的生活方式和工作方式3。手持移动设备,或手机,特别是智能手机,将是由传统桌面计算向移动计算或云计算这一转变过程中的主力军。随时随地可用,传

35、感器丰富等相对传统桌面计算机的突出优点,为智能手机改变人们的工作与生活提供了各种可能。智能手机将逐步发展成人们眼、耳、脑以及不存在感官的延伸,帮助人们获取、处理、存储与呈现信息,帮助人们作出决定,展现给人们美好的事物,引领人们更加智慧与舒适地生活。移动平台是目前和将来相当一段时间应用部署的重要平台。2012年年初,苹果应用商店已经拥有了超过53万款应用,而Google Play所能提供的应用数目也已突破了40万大关,涵盖了游戏、效率、社交、购物、交通、体育、图书与工具书等等领域,渗入了生活的方方面面。下载量上,仅以Android以例。最高下载量已达5亿(谷歌地图),相当多的免费应用的下载量在十

36、万级别以上,收费应用也在万级别以上(具体请参照Google Play)。一款受欢迎的应用的市场价值十分巨大,而且这一市场才刚刚起步。2.2 Android技术背景Android是用于移动设备上的一个包含一操作系统,一系列中间件,以及部分关键应用软件栈。Android SDK网站提供了在Android平台上使用Java编程语言开发应用程序所必须的工具和API4。2.2.1 Android的特性l 应用框架,实现了组合的重用与替换l Dalvik虚拟机,专为移动设备优化l 集成的浏览器,基于开源的WebKit引擎l 优化的图形,由一个定制的2D图形库驱动,3D图形基于OpenGL ES 1.0规范

37、(硬件加速可选)l 媒体支持,支持常用音频、视频以及图像格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)l GSM通话(依赖硬件)l 蓝牙,EDGE(增强型数据速率GSM演进技术),3G,以及Wi-Fi(依赖硬件)l 相机,GPS,指南针,加速计(依赖硬件)l 丰富的开发环境,包括一个设备模拟器,测试工具,内存和性能分析,以及用于Eclipse IDE的一个插件2.2.2 Android架构图1 Android架构图Android架构由上至下分四层,如图1。描述如下:l 应用层:包括由系统默认提供了桌面、联系人、通话、浏览器等基础应用,以及由广大开发

38、人员开发、可下载安装的拓展应用。拓展应用访问下层应用框架层方面,和由厂商提供的基础应用一样,没有任何尊卑之别。l 应用框架层:应用开发基本的API,提供包管理、通话管理、资源管理、位置管理、通知管理、Activity管理,窗口管理、内容提供设施、视力系统。l 库:用C/C+写成。提供SGL底层2D绘图引擎,安全套接层,嵌入式标准C库,OpenGL 3D绘图,FreeType字体,浏览器核心,用户空间显示管理,媒体框架,以及轻量级SQLite关系型数据库。l 运行环境:与JRE极其相似。核心包包含了在Java开发中常用的类库如IO、Utility等;Dalvik虚拟机类似JVM,同样也是专为An

39、droid定制,针对手持设备,在存储、计算以及功耗等方面作了格外优化。l Linux 内核:Android整个操作系统基于Linux内核,内核提供显示、照相、闪存、软键盘、Wi-Fi、音频等驱动程序,提供对进程间通信机制Binder的驱动,提供电源管理服务。2.3 Android平台本地应用的开发同PC上应用的部署模式一样,Android应用也可有纯本地应用,C/S模式和B/S模式。此外,C/S和B/S相结合的模式本地应用利用Web控件显示Web页面,或Web应用利用Javascript调用本地程序也十分常见。此外,具有数据同步功能的本地应用模式,在联系人、日历、电子邮件等核心应用中都有体现。

40、2.3.1 虚拟机之上的Java应用Android应用(至少是目前)是使用Java语言开发的。Java代码被编译成字节码,再被编译成.dex可执行文件,以在Dalvik虚拟机上高效运行。Android应用由四大组件构成Activity, Service, Content Provider, 和Broadcast receiver。每个组件以类的形式存在。类应该具有高度的内聚性;类与类之间应该具有极低的耦合性。Activity负责呈现用户界面并与用户交互;Service运行在后台,负责处理耗时操作,或是为服务远程进程;Content Provider负责管理可被共享的应用程序数据;Broadca

41、st receiver则能响应系统级的广播消息。Android系统设置独有的特点是,任何应用都能启用其他应用的组件,显式或隐式地。一个Activity可以调用另一个Activity或Service;Service可在Activity结束之后关闭,或继续运行。当系统启用某一应用的某一组件,该应用的进程就被启动(如果不是已经启动了的话),该组件所需的类就被初始化。不同于其他的系统,Android应用程序没有唯一的入口(比如就没有main()函数)6。2.3.2 Linux之上的C/C+本地代码Android应用由Java所写,运行在虚拟机上,在处理大量数值、矩阵运算时,效率比较低。C、C+则直接运

42、行于硬件之上,能充分发挥硬件的性能。此外,大量传统与广泛使用的底层库文件(包括图形图像处理、数据库管理系统等)都是由C/C+写成,它们向Android平台的迁移应以怎样的方式进行呢?下面介绍三种方式:JNI,JNA和JavaCPP。1)JNI(Java Native Interface)JNI,Java本地接口,是一个允许运行在Java虚拟机上的Java代码调用本地代码或被本地代码调用的应用编程框架。本地代码即指用C/C+或汇编写成的、依赖硬件和操作系统平台的程序或库。它定义了可管理代码(用Java语言写成)与本地代码交互的方法。它厂商中立,支持从动态链接库载入代码;虽然繁琐,但常能获得可观的

43、效率7。2)JNA(Java Native Access)JNA,Java本地访问,是SUN公司主导研发的,建立在经典的JNI的基础之上的一个开源框架。它是也另一个访问本地代码的方法,大有取代JNI的趋势。JNA的设计就是为了提供一种自然的方式、以最少的工作量实现对本地代码的访问。它不需要像JNI中那样的样板文件或生成的粘合代码9。JNA堪比Window的P/Invoke和Python的ctype。但是,Android官方并没有集成JNA。据Android开源项目参与者fadden回答:第一是因为性能不如JNI,在对性能要求高的应用中人们更倾向于使用JNI;第二是因为使用Java和公开的API

44、来实现应用更有利用应用程序自身和Android的发展;第三是JNA遵循的是LGPL许可,将它放入Android官方发行会带来许可问题。尽管如此,Android官方仍然会考虑在虚拟机中提供挂钩,允许开发者将JNA库作为应用程序安装包的一部分,自行使用10。JNA源代码可从GitHub获得11。3)JavaCPPJavaCPP提供了在Java中高效访问C+的方法,与某些C/C+编译器与汇编语言交互的方式颇为类似。在其底层,同样采用的是JNI,因此所有的Java实现它都支持,包括Android。与其他访问本地代码的途径(包括SWIG,CableSwig,JNIGeneratorApp,JNIWrap

45、per,Platform Invoke,GlueGen,JNIDirect,JNA,JniMarshall,JNative,J/Invoke,HawtJNI,BridJ等等)所明显不同的是,它高效而自然地支持C+语言许多经常被认为有弊病的特性,包括操作符重载、模板类和模板函数、成员函数指针、回调函数、嵌套结构体定义、可变长参数、嵌套命名空间、包含任意循环的大数据结构、多继承、按值/引用/微量传递、匿名结构体、位域、异常、析构以及垃圾回收。JavaCPP项目的作者samuel已经通过JavaCPP,为OpenCV,FFmpeg,libdc1394,PGR FlyCapture,OpenKinec

46、t,videoInput,和ARToolKitPlus等图像库生成了完整的接口,集成到了他的开源项目JavaCV当中18。JavaCPP底层实现最开始使用的是JNA,后来又回到了JNI10。2.4 Android平台数据的存储与同步2.4.1 嵌入式关系数据库管理系统SQLiteSQLite是一个包含一个自包含、无服务、零配制、事务型的SQL数据库引擎的软件库。它是世界上最流行的数据库引擎之一。并且,SQLite的源代码已经进入了公共域,可自由使用11。Android提供了对SQLite数据库的完全支持。你所创建的任何数据库都能被当前应用中的任何类按名访问,当前应用之外的类则不行12。2.4.

47、1.1 SQLite 3中的数据类型14大部分数据库引擎(就我们所知,除SQLite之外的任何其他数据库引擎)使用着传统的静态类型。静态类型下,一个值的数据类型由其容器该值所存储在的列所决定。SQLite使用一种更加泛化的动态类型系统。在SQLite中,一个值的数据类型依赖于其值本身而非其容器。在其他静态类型数据库上能使用的SQL语言,在SQLite上同样能使用;在这一意义上讲,SQLite的这一动态类型系统相对其他数据库的静态类型系统具有向后兼容的能力。而且,SQLite中的动态类型能让它完成传统类型数据库所不能完成的工作。最后,值得注意的是,SQLite对特殊的一列ROWID的处理。它与在

48、Android中对SQLite的访问密切相关。2.4.1.2 ROWID和整型主码SQLite表的每一行都有一个64位有符号整数键,唯一地标识表中该一行。该整数通常被称作“rowid”。rowid的值可使用以下任意列名的任意大小写形式访问:“rowid”“oid”或“_rowid_”。如果一个表已经存在了一个用户定义的名叫“rowid”“oid”或“_rowid_”的列,则使用这些名字时,访问的是用户定义的列;这一整型rowid行将不再能被检索到15。SQLite的每一张表都以一棵B树的数据结构存储。该树包含了对每一行的一个入口,入口地址是一个整型主码(INTEGER PRIMARY KEY)

49、,或rowid。这意味着按rowid检索或排序记录速度极快。搜索某一指定或在某一范围内的rowid的行,比相同情况下在其他主码或索引上搜索,要快一倍15。也正是这个原因,Android中重要的UI组件ListView访问SQLite数据库所使用的适配器CursorAdapter对查询结果Cursor的列有一个特殊的要求:必须要有一个名叫“_id”的列16。在实现上,ListView的一行(即一个ListItem)对应Cursor的一行;据观察,Android为该ListItem分配了id,其值正是“_id”列的值。可通过以下方法获得ListView中的某一项的id:方法一:单击列表项的回调函v

50、oid android.app.ListActivity.onListItemClick(ListView l, View v, int position, long id)的形参中本身就有id;方法二:长按列表项,引起上下文菜单弹出的回调函数boolean android.app.Activity.onContextItemSelected(MenuItem item)中,可以这样取得被长按列表项的id:/获取弹出菜单的菜单信息;该菜单信息包含了适配器上下文信息,其中就包含了适配器为当前列表项绑定的(Cursor的)idAdapterContextMenuInfo info=(Adapter

51、ContextMenuInfo) item.getMenuInfo();/当前列表项的idint id=info.id;此外,要获取当前列表项中子View的值,也有快捷的方法:/当前列表项在适配器上的位置int position=info.position;/获取适配器为当前列表项绑定的Cursor(或一行记录)Cursor cursor = (Cursor) getListAdapter().getItem(position);/反过来获取Cursor中的列“_id”的值,与info.id对比String _id = cursor.getString(cursor.getColumnInde

52、x(_id);Log.v(TAG, _id at position + position + , id + id + is + _id);对比会发现,无论对列表项进行新增、删除、排序等任何操作,id与_id均相同;相反,position表示的只是当前列表项在列表ListView中的下标,与id或_id没有直接的关系。以上问题是困扰作者本人在内的许多开发者许久的问题。通过一定的分析和实验,结果是可知的。这或许也是做开发的乐趣之所在。2.4.2 Android平台的数据同步Android终端同Web服务器、Android终端与终端之间的数据同步,可以采用同Android系统中谷歌帐户应用(Gmai

53、l、Google Calendar等)类似的方法,通过SampleSyncAdapter,利用Android框架中的帐户管理器和同步管理器实现。这里不再赘述。本文将讨论的,是基于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直接的设备上,然后与之进行比蓝牙距离更远的高

54、速通信。基于该技术,我们构想出了两种多终端通信方式:1)C/S单向同步。2)对等双向同步。鉴于实验条件不允许,我们仅对逻辑的实现作理论的分析。相信经过这一分析,在Android API 14实现起来是不难的。(1)C/S单向同步在该同步方式中,指定一台设备作为服务器,或才最先启动同步服务的设备自动作为服务器;其他设备作为客户机;首先轮流上传各自的数据,服务器负责数据的新增、更新与合并;然后轮流从服务器下载最新的数据。作为服务器的设备(服务设备)首先启动同步服务,其他设备(请求设备)搜寻到该设备,发送同步请求。服务设备在用户的协助的对请求设备进行身份认证,并允许保存身份信息(即配对)以供下次免认

55、证连接。服务设备上启用一个服务,或为每个设备启用一个服务,响应所有设备发送过来的通知(包含对数据变更的描述和数据本身)。响应操作包括:备份同步前的数据;新增设备新增的记录,缓存设备的修改和删除请求并在最后提示用户确认(修改或删除),最后标记版本。全部设备的变更上传完成后,服务设备转而向所有请求设备发送指令,备份并删除其同步前数据,并下载同步后的数据。(2)对等双向同步在该同步方式中,设备间对等通信,向其他配对设备播送自身数据的变化,同时接收与处理其他配对设备数据变化的通知。该方式与C/S单向同步的不同之处在于,设备同时扮演两种角色:服务设备和请求设备;无需下载同步后数据。两种同步方式都希望所有

56、设备在当时当地可用,否则每一部设备上的数据都不是严格意义上“最新”的数据。但在实际应用中,对“最新”的要求并不高;相反,每周一次的同步(比如在例会与工作总结时同步工作数据),在同步时展示与统计每一部终端的数据变更,反而有得于对工作的评价。3 Android平台上的车牌识别车牌识别这里特指自动车牌识别,即运用计算机视觉技术,从包含车牌的图像中自动探测到车牌区域,提取该区域车牌图像进行进一步处理,使其中的车牌字符适合光学字符识别(OCR)引擎识别,最后返回完整的车牌号字符串的过程。该过程包含的三大核心环节对识别率起到了至关重要的作用:1)车牌探测;2)车牌字符分割;3)车牌字符识别。下面对其分别进

57、行描述并加以实现。3.1 图像处理在图像学中,图像处理是对输入图像的任何形式的信号处理;其输出可以是一幅图像,或与之相关的字符集或参数19。本课题中包含大量的图像处理,因此我们研究并采用了开源图像处理库OpenCV。3.1.1 OpenCVOpenCV(开源计算机视觉)是一个用于实时计算机视觉的程序函数库。它在BSD许可下发布,学术和商业上均可免费使用。它拥有能运行在Windows、Linux、Android以及Mac上的C+、C、Pythoon和Java的接口。该库拥有超过2500个算法的优化。使用者遍布全球,拥有2,500,000以上的下载量和40,000用户组成员。使用范围从交互艺术到矿

58、物探测,再到Web图形检索等领域20。OpenCV由英特尔公司于1999年起开发,用C/C+写成,包含了500多个函数。OpenCV的构成如图2。CXCORE基本结构和算法,XML支持,绘图函数CV图像处理和视觉算法HighGUIGUI,图像和视频 I/O图2 OpenCV的构成3.1.2 JavaCVJavaCV是一个OpenCV的Java接口。它为计算机视觉领域调查者们常用的库提供了封装。这些库包括:OpenCV,FFmpeg,libdc1394,PGR FlyCapture,OpenKinect,videoInput,和ARToolKitPlus等。com.googlecode.java

59、cv.cpp包命名空间下的类便展示出了完整的API。并且,实用类还使自身的功能在Java平台包括Android平台上更加可用21。JavaCV开源项目的负责人samuel,即前述JavaCPP项目的负责人。JavaCV正是利用JavaCPP技术实现的OpenCV的Java接口。编译或生成javacpp.jar和javacv.jar,作为本项目的引用包;将javacv-android-arm.jar和OpenCV-2.4.0-android-arm.zip中所有的库文件解压至项目根目录下的libs/armeabi文件夹中,即完成了对JavaCV库引用。项目目录结构如图3。具体请参照项目主页的介绍

60、。图3 AndroidVIQ项目目录结构3.2 车牌探测在图像处理技术中,Haar特征提取技术常用于从图像中提取物体22。该技术涉及神经网络等算法,限于知识水平,暂不研究。边缘检测作为一种简单的物体检测方法,特别适合于矩形外框的车牌。本课题采用基于边缘检测的车牌探测技术。原始车辆图像如图4。图4 原始车辆图像3.2.1 将原始图像转化为灰阶图像cvCvtColor(mVehicleImage, vehicleImageGray, CV_BGR2GRAY);图5 灰阶图像3.2.2 灰阶图像的平滑与增强处理cvSmooth(vehicleImageGray, vehicleImageGray,

61、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 = cvFindContours(vehicleImageBinary, cvCreateMemStorage(0),

62、 contours, Loader.sizeof(CvContour.class), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);图8 轮廓图像(黑色背景上的白色轮廓线,不易观察)3.2.5 基于边缘检测的车牌探测经检测,提取的图像轮廓中有约1800个独立轮廓区域。我们这样来找到车牌轮廓区域:用指定精度逼近曲线轮廓,形成一个多边形轮廓;如果多边形为四边形,面积足够大,且宽高比介于2.8到3.4之间(普通车牌外廓尺寸为440mm140mm,宽高比为3.14),则可初步判断它为车牌轮廓,接下来的工作将围绕该区域展开。示例代码如下:/获得多边形轮廓CvSeq polyContours = cvApproxPoly(contours, Loader.sizeof(CvContour.class), cvCreateMemStorage(0), CV_POLY_APPROX_DP, cvContourPerimeter(contours) * 0.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!