《武汉工程大学学报》  2018年01期 98-102   出版日期:2018-02-25   ISSN:1674-2869   CN:42-1779/TQ
基于GPS旅游景点导览APP的设计


随着人民生活水平和对高层次生活方式认知水平的不断提高,旅游度假已经成为人们放松休闲的主要形式。因此,当下的旅游行业日益成熟,旅游景点的设施也日渐完备;但是,对于用户体验和服务等软环境的发展和建设还有待加强,而软环境却恰恰是提升景区服务质量的重中之重。在经过大量的调研后发现,游客在景区面临的较普遍问题如下:1)环境陌生,易迷路。即使景区内存在指示牌,但是并非随处可见,从而导致游客无法随时辨别位置,甚至导致与亲友走失;2)对于国外旅游者,普遍存在语言不通的问题。导致游客无法了解景区概况和路线规划;3)现有服务系统无法解决多场景、多语言所引发的诸多特定场景问题。为了解决以上问题,本系统主要解决对国内外景点的综合路径规划、多语种介绍文字的拍照识别翻译及音频解说功能,开发一款综合类的智能导览系统,将多种问题进行统一管理,为旅客出行带来便利。1 系统总体架构系统采用Android 5.0.1平台,使用Java编程语言、Eclipse作为开发工具,下载谷歌提供的软件开发工具包(Software Development Kit,SDK)以及安装(Android Developer Tools,ADT)插件来搭建环境。本系统主要是客户端,建立包括城市简介、景点查询、附近搜索与路线查询、景点导览语音讲解、景点介绍拍照识别翻译和足迹记录等菜单选项;建立动态数据库SQlite将用户的行走路线坐标和景点介绍文字及音频文件存储在客户端;通过调用百度地图服务器的接口完成定位及路线规划[1],具体系统框图如图1所示。2 系统各模块实现旅游导览系统主要是建立在Android平台下,其功能主要分为城市简介、附近搜索、公交线路查询、景点导览语音讲解、拍照识别翻译、足迹记录。1) 城市简介:为用户介绍旅游城市的基本情况,为游客提供城市基本概况及讲解。2) 附近搜索:根据用户定位所在位置,查询所处位置附近服务信息,例如查询附近的景点、餐厅、酒店等位置及概况,为用户提供便捷的规划指引。3) 公交线路查询:自动定位“我的位置”,用户自主选择目的地,系统自动筛选最佳路线并进行导航,步行、公交、自驾三种规划随心切换。其精准程度,可至步行米数。4) 景点导览语音讲解:细致规划景区内地图,用户到达任意地点,点击指定航标即可查看景点介绍,同时支持语音输出,提供双重交互方式。5)拍照识别翻译:对于需翻译的非中文语言,只需对其文字进行图片拍摄,系统将自动识别语言并将其进行翻译;6) 足迹记录:当用户使用景点导览语音讲解功能时,系统会记录下用户所去过的景点并在足迹界面显示。2.1 欢迎界面模块欢迎界面为MainActivity类,首先是在res/layout中创建一个相对布局,然后在布局中设置图片背景,背景资源放在res/drawable中,在布局中放置button和editText,在editText中加入android:text=“旅游导览”。该类通过集成Activity并且重写onCreate方法,在其中使用setContentView(R.layout.activity_main)用来在屏幕中加载XML界面。通过findViewById找到button控件,然后通过setonclicklistene对button设置点击监听,在监听方法中实例化一个intent,intent绑定跳转,通过StartActivity(intent)执行界面跳转。2.2 选择界面模块从欢迎界面就可以进入菜单选择界面。该界面的类为StartActivity类,其界面使用的是线性布局。使用自定义的控件实现布局中滚动图片显示:SlidingSwitcherView实现类中,在继承RelativeLayout类的基础上实现OnTouchListener接口,使得可以对视图的触摸滑动进行监听,控件中所使用的图片存放在res/drawable中,通过在布局文件button中的background设置;同时在布局中的菜单选项代码是通过button中的RadioButton设置来实现。在StartActivity类中,通过findViewById方法找到对应的按钮选项,并且绑定intent,监听按钮是否被点击,从而进行界面的跳转。2.3 附近搜索与路线查询模块实现2.3.1 百度地图 API Key的获取 为了能更加直观的在手机屏幕上显示地理信息,在该旅游导览软件中使用的是百度地图应用程序编程接口(application programming interface,API),用以实现对地理信息的可视化开发。百度公司为了防止百度地图API中的接口被过度使用,从而要求开发者去其官网申请一个应用程序的Key,否则将不能在程序中看到百度地图[2]。第一步:需在电脑中运行cmd;第二步:定位到.android文件夹下,输入cd.android;第三步:输入keytool - list-v-keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),其中keytool为jdk自带工具;keystorefile为Android 签名证书文件,就可以在cmd界面中查看到Android签名证书的SHA1值,然后在百度API控制台中输入安全码,点击 “下一步”即可获取到Key。2.3.2 百度地图的显示 若使Android手机中显示百度地图不仅仅需要Key,也需一定相应的操作流程:包括配置工程—添加密钥—添加百度地图显示所需要的各种权限—添加地图控件—初始化全局变量,配置完以上步骤即可加载百度地图。2.3.3 附近搜索和路线规划 旅游过程中离不开住宿、餐饮,想要查看景点周边感兴趣的场所、大型设施,就需要用到城市的兴趣点(point of interest,POI)数据库,这里使用的是百度地图的搜索方法[3-4]。路径规划实现类为RouteAcitvity类,系统首先例化一个路线规划检索[5-6],使用OnGetRoutePlanResult Listener设置路径检索监听,当输入目标起始点时,使用DrivingRoutePlanOption()、TransitRoutePlanOption()、WalkingRoutePlanOption()完成自驾、公交、步行三种路径规划检索,百度地图会自动返回结果,监听会获取到结果并通过onGetDrivingRouteResult()、onGetTransitRouteResult()、onGetWalking RouteResult()在地图上显示线路;同时使用DrivingRouteLine.DrivingStep()获取绘制路线节点,当用户点击节点时pop弹窗自动显示具体路线走向,代码流程如图2所示。 附近搜索实现类为SearchActivity类,先初始化百度地图的搜索模块[7-8],通过PoiSearch.newInstance()创建POI检索实例[9],调用setOnGetPoiSearchResultListener完成附近兴趣点(POI)监听,接着使用searchInCity方法发起检索请求,百度地图会自动返回结果,监听会获取到结果,并且通过onGetPoiResult函数在地图上显示出来,完成附近兴趣点搜索功能[10-12],代码流程如图3所示。2.4 语音讲解系统设置一个类用来实现语音讲解以及文字说明。实现类为VoiceActivity类[5],在ExpainActivity类中通过SDK接口完成定位初始化,通过在百度地图获取景点的经纬度设置坐标点[13-14]。当用户走到景点所在位置时,使用mBaiduMap.setOnMarkerClickListener方法对标记点监听,通过判断标记的名字使用intent.putExtra(“location”, “ligong”)将地点名称放入intent中进行跳转到VoiceActivity类中;在VoiceActivity类中通过intent.getStringExtra(“location”)读取地点位置信息,对信息进行解析判断出所点击的标记是,然后使用mediaPlayer = MediaPlayer.create( )以及mediaPlayer.start()实现语音讲解的播放,同时根据信息对TextView显示景点简介。2.5 拍照识别景点图片文字说明实现光学字符识别(optical character recognition,OCR)识别系统,首先,需要将用手机拍摄的图片进行转换成黑白图像,接着将图像进行切割识别,然后对识别的文字进行分析和使用,节省了后期人力修改的时间。实现OCR识别从图像到文本输出,需要经历图像二值化、文字切割、特征提取、对比识别,最后人工校正输出识别结果[7]。该功能的实现类为OCRActivity类,通过CameraButtonListener方法对拍照动作进行监听,通过使用intent.putExtra(“path”, “name”)设定拍照图片的路径和名称,跳转到Android自带函数startActivityForResult()实现拍照功能,拍摄结束后,在onActivityResult方法重新开辟新的线程进行使用ImgPretreatment类来进行图片的处理,ImgPretreatment类使用Bitmap converyToGrayImg方法用来转化图像为灰度图,Bitmap doPretreatment方法进行预处理,Bitmap selectBinarization方法进行二值化处理。处理完图片后,调用doOcr方法从而使用谷歌公司的一个开源OCR引擎Tesseract对处理完的图像进行识别,该开源的OCR引擎需要将识别数据库放置在手机SD卡中[15],代码流程如图4所示。2.6 翻译实现OCR引擎识别后,可得到文本,然后对文本进行翻译。调用fanyi.setOnClickListener监听,同时将识别后文本通过intent.putExtra (“fanyiwenben”, textResult)传递到intent,跳转到TransActivity类里,通过intent.getStringExtra (“fanyiwenben”)取得识别后文本。点击翻译按钮,进入百度翻译提供的接口,通过URL向百度翻译提交JSON数据报,经由百度翻译后台处理,发送数据报给该系统,系统通过解析数据报得到其中翻译的结果,提取出所需要的结果将其显示在手机界面上。流程如图5所示,景点日文和英文介绍的翻译结果如图6、图7所示。 3 结 语综上所述,系统针对旅游景点导览开发的基于Android 5.0.1平台,使用eclipse开发工具、Java开发语言,调用百度地图SDK,实现了城市介绍、附近搜索及路线规划、语音讲解、拍照翻译等功能。实验表明在手机客户端安装apk安装包,完全可以实现上述功能,特别适用于游客在多语种国外景点观光情况下的一站式旅游服务,可以对景点介绍文字及菜单进行实时翻译,且文字识别准确率达到95%以上。但同时本系统还有一些不足之处有待后续开发,如旅游导览不能根据位置自动播放语音,需要手工点击标记,后续可以调用位置管理器的靠近提醒技术自动触发景点的文字语音播报。