基于GPS旅游景点导览APP的设计

随着人民生活水平和对高层次生活方式认知水平的不断提高,旅游度假已经成为人们放松休闲的主要形式。因此,当下的旅游行业日益成熟,旅游景点的设施也日渐完备;但是,对于用户体验和服务等软环境的发展和建设还有待加强,而软环境却恰恰是提升景区服务质量的重中之重。在经过大量的调研后发现,游客在景区面临的较普遍问题如下:1)环境陌生,易迷路。即使景区内存在指示牌,但是并非随处可见,从而导致游客无法随时辨别位置,甚至导致与亲友走失;2)对于国外旅游者,普遍存在语言不通的问题。导致游客无法了解景区概况和路线规划;3)现有服务系统无法解决多场景、多语言所引发的诸多特定场景问题。为了解决以上问题,本系统主要解决对国内外景点的综合路径规划、多语种介绍文字的拍照识别翻译及音频解说功能,开发一款综合类的智能导览系统,将多种问题进行统一管理,为旅客出行带来便利。

一、系统总体架构

系统采用 Android 5.0.1 平台,使用 Java编程语言、Eclipse 作为开发工具,下载谷歌提供的软件开发工具包(Software Development Kit,SDK)以及安装(Android Developer Tools,ADT)插 件 来 搭 建 环境。本系统主要是客户端,建立包括城市简介、景点查询、附近搜索与路线查询、景点导览语音讲解、景点介绍拍照识别翻译和足迹记录等菜单选项;建立动态数据库 SQlite将用户的行走路线坐标和景点介绍文字及音频文件存储在客户端;通过调用百度地图服务器的接口完成定位及路线规划。

二、系统各模块实现

旅游导览系统主要是建立在 Android 平台下,其功能主要分为城市简介、附近搜索、公交线路查询、景点导览语音讲解、拍照识别翻译、足迹记录。 1)城市简介:为用户介绍旅游城市的基本情况,为游客提供城市基本概况及讲解。 2)附近搜索:根据用户定位所在位置,查询所处位置附近服务信息,例如查询附近的景点、餐厅、酒店等位置及概况,为用户提供便捷的规划指引。 3)公交线路查询:自动定位“我的位置”,用户自主选择目的地,系统自动筛选最佳路线并进行导航,步行、公交、自驾三种规划随心切换。其精准程度,可至步行米数。 4)景点导览语音讲解:细致规划景区内地图,用户到达任意地点,点击指定航标即可查看景点介绍,同时支持语音输出,提供双重交互方式。 5)拍照识别翻译:对于需翻译的非中文语言,只需对其文字进行图片拍摄,系统将自动识别语言并将其进行翻译; 6)足迹记录:当用户使用景点导览语音讲解功能时,系统会记录下用户所去过的景点并在足迹界面显示。

2.1 欢迎界面模块

欢迎界面为 MainActivity 类,首先是在 res/lay⁃ out 中创建一个相对布局,然后在布局中设置图片背景,背景资源放在 res/drawable中,在布局中放置 button 和 editText,在 editText 中加入 android:text= “旅游导览”。该类通过集成 Activity 并且重写 on⁃ Create 方法,在其中使用 setContentView(R.layout. activity_main)用来在屏幕中加载 XML 界面。通过 findViewById找到 button控件,然后通过 setonclick⁃ listene 对 button 设置点击监听,在监听方法中实例化 一 个 intent,intent 绑 定 跳 转 ,通 过 StartActivity (intent)执行界面跳转。

2.2 选择界面模块

从欢迎界面就可以进入菜单选择界面。该界 面的类为 StartActivity 类,其界面使用的是线性布 局 。 使 用 自 定 义 的 控 件 实 现 布 局 中 滚 动 图 片 显 示 : SlidingSwitcherView 实现类中,在继承 RelativeLay⁃ out 类的基础上实现 OnTouchListener 接口,使得可 以对视图的触摸滑动进行监听,控件中所使用的 图片存放在 res/drawable 中,通过在布局文件 but⁃ ton 中的 background 设置;同时在布局中的菜单选 项代码是通过 button 中的 RadioButton 设置来实 现。在 StartActivity 类中,通过 findViewById 方法 找到对应的按钮选项,并且绑定 intent,监听按钮 是否被点击,从而进行界面的跳转。

2.3 附近搜索与路线查询模块实现

2.3.1 百度地图 API Key 的获取

为了能更加直观的在手机屏幕上显示地理信息,在该旅游导览软件中使用的是百度地图应用程序编程接口(application programming interface,API),用以实现对地理信息的可视化开发。百度公司为了防止百度地图 API中的接口被过度使用,从而要求开发者去其官网申请一个应用程序的 Key,否则将不能在程序中看到百度地图。第一步:需在电脑中运行 cmd;第二步:定位到.android 文件夹下,输入 cd.an⁃ droid;第 三 步 :输入 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)数据库,这里使用的是百度地图的搜索方法、。路径规划实现类为 RouteAcitvity类,系统首先例化一个路线规划检索,使用 OnGetRoutePlan⁃ Result Listener 设置路径检索监听,当输入目标起始 点 时 ,使用 (DrivingRoutePlanOption)、(Transi⁃ tRoutePlanOption)、(WalkingRoutePlanOption)完成自驾、公交、步行三种路径规划检索,百度地图会自动返回结果,监听会获取到结果并通过( onGet⁃ DrivingRouteResult)、(onGetTransitRouteResult)、 (onGetWalking RouteResult)在地图上显示线路;同时使用 (DrivingRouteLine.DrivingStep)获取绘制路线节点,当用户点击节点时 pop弹窗自动显示具体路线走向,代码流程如图 2所示。附近搜索实现类为 SearchActivity 类,先初始化百度地图的搜索模块,通过(PoiSearch.newIn⁃ stance)创 建 POI 检索实例,调用 setOnGet⁃ PoiSearchResultListener 完成附近兴趣点(POI)监听,接着使用 searchInCity方法发起检索请求,百度地图会自动返回结果,监听会获取到结果,并且通过 onGetPoiResult 函数在地图上显示出来,完成附近兴趣点搜索功能。

2.4 语音讲解

系统设置一个类用来实现语音讲解以及文字说明。实现类为VoiceActivity类,在ExpainActivity 类中通过 SDK 接口完成定位初始化,通过在百度地图获取景点的经纬度设置坐标点。当用户走 到 景 点 所 在 位 置 时 ,使 用 mBaiduMap. setOnMarkerClickListener 方法对标记点监听,通过判断标记的名字使用 intent.putExtra(“location”, “ligong”)将 地 点 名 称 放 入 intent 中 进 行 跳 转 到 VoiceActivity类中;在 VoiceActivity类中通过 intent. getStringExtra(“location”)读取地点位置信息,对信息进行解析判断出所点击的标记是,然后使用 (mediaPlayer = MediaPlayer.create ) 以 及( mediaPlayer.start)实现语音讲解的播放,同时根据信息对 TextView显示景点简介。

2.5 拍照识别景点图片文字说明

实现光学字符识别(optical character recogni⁃ tion,OCR)识别系统,首先,需要将用手机拍摄的图片进行转换成黑白图像,接着将图像进行切割识别,然后对识别的文字进行分析和使用,节省了后期人力修改的时间。实现 OCR 识别从图像到文本输出,需要经历图像二值化、文字切割、特征提取、对比识别,最后人工校正输出识别结果。该功能的实现类为 OCRActivity 类,通过 Cam⁃ eraButtonListener 方法对拍照动作进行监听,通过使用 intent.putExtra(“path”,“name”)设定拍照图片的路径和名称,跳转到 Android自带函数 (startAc⁃ tivityForResult)实现拍照功能,拍摄结束后,在 on⁃ ActivityResult 方 法 重 新 开 辟 新 的 线 程 进 行 使 用 ImgPretreatment类来进行图片的处理,ImgPretreat⁃ ment 类使用 Bitmap converyToGrayImg 方法用来转化图像为灰度图,Bitmap doPretreatment 方法进行预处理,Bitmap selectBinarization 方法进行二值化处理。处理完图片后,调用 doOcr方法从而使用谷歌公司的一个开源 OCR 引擎 Tesseract对处理完的图像进行识别,该开源的 OCR 引擎需要将识别数据库放置在手机 SD 卡中。

2.6 翻译实现

OCR 引擎识别后,可得到文本,然后对文本进行翻译。调用 fanyi.setOnClickListener 监听,同时将 识 别 后 文 本 通 过 intent.putExtra(“fanyiwen⁃ ben”,textResult)传递到 intent,跳转到 TransActivi⁃ ty 类里,通过 intent.getStringExtra(“fanyiwenben”)取得识别后文本。点击翻译按钮,进入百度翻译提供的接口,通过 URL 向百度翻译提交 JSON 数据报,经由百度翻译后台处理,发送数据报给该系统,系统通过解析数据报得到其中翻译的结果,提取出所需要的结果将其显示在手机界面上。

三、结 语

综上所述,系统针对旅游景点导览开发的基于 Android 5.0.1 平台,使用 eclipse 开发工具、Java 开发语言,调用百度地图 SDK,实现了城市介绍、附近搜索及路线规划、语音讲解、拍照翻译等功能。实验表明在手机客户端安装 apk安装包,完全可以实现上述功能,特别适用于游客在多语种国外景点观光情况下的一站式旅游服务,可以对景点介绍文字及菜单进行实时翻译,且文字识别准确率达到 95%以上。但同时本系统还有一些不足之处有待后续开发,如旅游导览不能根据位置自动播放语音,需要手工点击标记,后续可以调用位置管理器的靠近提醒技术自动触发景点的文字语音播报