張 璘,黃一彬,唐瑞寒
廈門理工學(xué)院光電與通信工程系,福建 廈門 361024
隨著人民生活水平和對高層次生活方式認(rèn)知水平的不斷提高,旅游度假已經(jīng)成為人們放松休閑的主要形式。因此,當(dāng)下的旅游行業(yè)日益成熟,旅游景點(diǎn)的設(shè)施也日漸完備;但是,對于用戶體驗(yàn)和服務(wù)等軟環(huán)境的發(fā)展和建設(shè)還有待加強(qiáng),而軟環(huán)境卻恰恰是提升景區(qū)服務(wù)質(zhì)量的重中之重。在經(jīng)過大量的調(diào)研后發(fā)現(xiàn),游客在景區(qū)面臨的較普遍問題如下:1)環(huán)境陌生,易迷路。即使景區(qū)內(nèi)存在指示牌,但是并非隨處可見,從而導(dǎo)致游客無法隨時辨別位置,甚至導(dǎo)致與親友走失;2)對于國外旅游者,普遍存在語言不通的問題。導(dǎo)致游客無法了解景區(qū)概況和路線規(guī)劃;3)現(xiàn)有服務(wù)系統(tǒng)無法解決多場景、多語言所引發(fā)的諸多特定場景問題。
為了解決以上問題,本系統(tǒng)主要解決對國內(nèi)外景點(diǎn)的綜合路徑規(guī)劃、多語種介紹文字的拍照識別翻譯及音頻解說功能,開發(fā)一款綜合類的智能導(dǎo)覽系統(tǒng),將多種問題進(jìn)行統(tǒng)一管理,為旅客出行帶來便利。
系統(tǒng)采用Android 5.0.1平臺,使用Java編程語言、Eclipse作為開發(fā)工具,下載谷歌提供的軟件開發(fā)工具包(Software Development Kit,SDK)以及安裝(Android Developer Tools,ADT)插件來搭建環(huán)境。本系統(tǒng)主要是客戶端,建立包括城市簡介、景點(diǎn)查詢、附近搜索與路線查詢、景點(diǎn)導(dǎo)覽語音講解、景點(diǎn)介紹拍照識別翻譯和足跡記錄等菜單選項(xiàng);建立動態(tài)數(shù)據(jù)庫SQlite將用戶的行走路線坐標(biāo)和景點(diǎn)介紹文字及音頻文件存儲在客戶端;通過調(diào)用百度地圖服務(wù)器的接口完成定位及路線規(guī)劃[1],具體系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)總體框架圖Fig.1 General framework diagram of system
旅游導(dǎo)覽系統(tǒng)主要是建立在Android平臺下,其功能主要分為城市簡介、附近搜索、公交線路查詢、景點(diǎn)導(dǎo)覽語音講解、拍照識別翻譯、足跡記錄。
1)城市簡介:為用戶介紹旅游城市的基本情況,為游客提供城市基本概況及講解。
2)附近搜索:根據(jù)用戶定位所在位置,查詢所處位置附近服務(wù)信息,例如查詢附近的景點(diǎn)、餐廳、酒店等位置及概況,為用戶提供便捷的規(guī)劃指引。
3)公交線路查詢:自動定位“我的位置”,用戶自主選擇目的地,系統(tǒng)自動篩選最佳路線并進(jìn)行導(dǎo)航,步行、公交、自駕三種規(guī)劃隨心切換。其精準(zhǔn)程度,可至步行米數(shù)。
4)景點(diǎn)導(dǎo)覽語音講解:細(xì)致規(guī)劃景區(qū)內(nèi)地圖,用戶到達(dá)任意地點(diǎn),點(diǎn)擊指定航標(biāo)即可查看景點(diǎn)介紹,同時支持語音輸出,提供雙重交互方式。
5)拍照識別翻譯:對于需翻譯的非中文語言,只需對其文字進(jìn)行圖片拍攝,系統(tǒng)將自動識別語言并將其進(jìn)行翻譯;
6)足跡記錄:當(dāng)用戶使用景點(diǎn)導(dǎo)覽語音講解功能時,系統(tǒng)會記錄下用戶所去過的景點(diǎn)并在足跡界面顯示。
歡迎界面為MainActivity類,首先是在res/lay?out中創(chuàng)建一個相對布局,然后在布局中設(shè)置圖片背景,背景資源放在res/drawable中,在布局中放置button 和 editText,在 editText中加入 android:text=“旅游導(dǎo)覽”。該類通過集成Activity并且重寫on?Create方法,在其中使用setContentView(R.layout.activity_main)用來在屏幕中加載XML界面。通過findViewById找到button控件,然后通過setonclick?listene對button設(shè)置點(diǎn)擊監(jiān)聽,在監(jiān)聽方法中實(shí)例化一個intent,intent綁定跳轉(zhuǎn),通過StartActivity(intent)執(zhí)行界面跳轉(zhuǎn)。
從歡迎界面就可以進(jìn)入菜單選擇界面。該界面的類為StartActivity類,其界面使用的是線性布局。使用自定義的
2.3.1 百度地圖API Key的獲取 為了能更加直觀的在手機(jī)屏幕上顯示地理信息,在該旅游導(dǎo)覽軟件中使用的是百度地圖應(yīng)用程序編程接口(application programming interface,API),用以實(shí)現(xiàn)對地理信息的可視化開發(fā)。百度公司為了防止百度地圖API中的接口被過度使用,從而要求開發(fā)者去其官網(wǎng)申請一個應(yīng)用程序的Key,否則將不能在程序中看到百度地圖[2]。
第一步:需在電腦中運(yùn)行cmd;
第二步:定位到.android文件夾下,輸入cd.an?droid;
第三步:輸入keytool-list-v-keystore debug.keystore,會得到三種指紋證書,選取SHA1類型的證書(密鑰口令是android),其中keytool為jdk自帶工具;keystorefile為Android簽名證書文件,就可以在cmd界面中查看到Android簽名證書的SHA1值,然后在百度API控制臺中輸入安全碼,點(diǎn)擊“下一步”即可獲取到Key。
2.3.2 百度地圖的顯示 若使Android手機(jī)中顯示百度地圖不僅僅需要Key,也需一定相應(yīng)的操作流程:包括配置工程—添加密鑰—添加百度地圖顯示所需要的各種權(quán)限—添加地圖控件—初始化全局變量,配置完以上步驟即可加載百度地圖。
2.3.3 附近搜索和路線規(guī)劃 旅游過程中離不開住宿、餐飲,想要查看景點(diǎn)周邊感興趣的場所、大型設(shè)施,就需要用到城市的興趣點(diǎn)(point of interest,POI)數(shù)據(jù)庫,這里使用的是百度地圖的搜索方法[3-4]。
路徑規(guī)劃實(shí)現(xiàn)類為RouteAcitvity類,系統(tǒng)首先例化一個路線規(guī)劃檢索[5-6],使用 OnGetRoutePlan?Result Listener設(shè)置路徑檢索監(jiān)聽,當(dāng)輸入目標(biāo)起始 點(diǎn)時,使用 DrivingRoutePlanOption()、Transi?tRoutePlanOption()、WalkingRoutePlanOption()完成自駕、公交、步行三種路徑規(guī)劃檢索,百度地圖會自動返回結(jié)果,監(jiān)聽會獲取到結(jié)果并通過onGet?DrivingRouteResult()、onGetTransitRouteResult()、onGetWalking RouteResult()在地圖上顯示線路;同時使用DrivingRouteLine.DrivingStep()獲取繪制路線節(jié)點(diǎn),當(dāng)用戶點(diǎn)擊節(jié)點(diǎn)時pop彈窗自動顯示具體路線走向,代碼流程如圖2所示。
附近搜索實(shí)現(xiàn)類為SearchActivity類,先初始化百度地圖的搜索模塊[7-8],通過 PoiSearch.newIn?stance()創(chuàng) 建 POI 檢 索 實(shí) 例[9],調(diào) 用 setOnGet?PoiSearchResultListener完成附近興趣點(diǎn)(POI)監(jiān)聽,接著使用searchInCity方法發(fā)起檢索請求,百度地圖會自動返回結(jié)果,監(jiān)聽會獲取到結(jié)果,并且通過onGetPoiResult函數(shù)在地圖上顯示出來,完成附近興趣點(diǎn)搜索功能[10-12],代碼流程如圖3所示。
圖2 路徑規(guī)劃流程圖Fig.2 Flowchart of route planning
圖3 附近搜索流程圖Fig.3 Flowchart of searching nearby places
系統(tǒng)設(shè)置一個類用來實(shí)現(xiàn)語音講解以及文字說明。實(shí)現(xiàn)類為VoiceActivity類[5],在ExpainActivity類中通過SDK接口完成定位初始化,通過在百度地圖獲取景點(diǎn)的經(jīng)緯度設(shè)置坐標(biāo)點(diǎn)[13-14]。當(dāng)用戶走到景點(diǎn)所在位置時,使用mBaiduMap.setOnMarkerClickListener方法對標(biāo)記點(diǎn)監(jiān)聽,通過判斷標(biāo)記的名字使用 intent.putExtra(“l(fā)ocation”,“l(fā)igong”)將地點(diǎn)名稱放入intent中進(jìn)行跳轉(zhuǎn)到VoiceActivity類中;在VoiceActivity類中通過intent.getStringExtra(“l(fā)ocation”)讀取地點(diǎn)位置信息,對信息進(jìn)行解析判斷出所點(diǎn)擊的標(biāo)記是,然后使用mediaPlayer= MediaPlayer.create( )以 及mediaPlayer.start()實(shí)現(xiàn)語音講解的播放,同時根據(jù)信息對TextView顯示景點(diǎn)簡介。
實(shí)現(xiàn)光學(xué)字符識別(optical character recogni?tion,OCR)識別系統(tǒng),首先,需要將用手機(jī)拍攝的圖片進(jìn)行轉(zhuǎn)換成黑白圖像,接著將圖像進(jìn)行切割識別,然后對識別的文字進(jìn)行分析和使用,節(jié)省了后期人力修改的時間。實(shí)現(xiàn)OCR識別從圖像到文本輸出,需要經(jīng)歷圖像二值化、文字切割、特征提取、對比識別,最后人工校正輸出識別結(jié)果[7]。
該功能的實(shí)現(xiàn)類為OCRActivity類,通過Cam?eraButtonListener方法對拍照動作進(jìn)行監(jiān)聽,通過使用 intent.putExtra(“path”,“name”)設(shè)定拍照圖片的路徑和名稱,跳轉(zhuǎn)到Android自帶函數(shù)startAc?tivityForResult()實(shí)現(xiàn)拍照功能,拍攝結(jié)束后,在on?ActivityResult方法重新開辟新的線程進(jìn)行使用ImgPretreatment類來進(jìn)行圖片的處理,ImgPretreat?ment類使用Bitmap converyToGrayImg方法用來轉(zhuǎn)化圖像為灰度圖,Bitmap doPretreatment方法進(jìn)行預(yù)處理,Bitmap selectBinarization方法進(jìn)行二值化處理。處理完圖片后,調(diào)用doOcr方法從而使用谷歌公司的一個開源OCR引擎Tesseract對處理完的圖像進(jìn)行識別,該開源的OCR引擎需要將識別數(shù)據(jù)庫放置在手機(jī)SD卡中[15],代碼流程如圖4所示。
OCR引擎識別后,可得到文本,然后對文本進(jìn)行翻譯。調(diào)用fanyi.setOnClickListener監(jiān)聽,同時將識別后文本通過intent.putExtra(“fanyiwen?ben”,textResult)傳遞到 intent,跳轉(zhuǎn)到 TransActivi?ty類里,通過 intent.getStringExtra(“fanyiwenben”)取得識別后文本。點(diǎn)擊翻譯按鈕,進(jìn)入百度翻譯提供的接口,通過URL向百度翻譯提交JSON數(shù)據(jù)報(bào),經(jīng)由百度翻譯后臺處理,發(fā)送數(shù)據(jù)報(bào)給該系統(tǒng),系統(tǒng)通過解析數(shù)據(jù)報(bào)得到其中翻譯的結(jié)果,提取出所需要的結(jié)果將其顯示在手機(jī)界面上。流程如圖5所示,景點(diǎn)日文和英文介紹的翻譯結(jié)果如圖6、圖7所示。
圖4 拍照識別流程圖Fig.4 Flowchart of OCR
圖5 翻譯流程圖Fig.5 Flowchart of language interpretation
圖6 日文翻譯界面Fig.6 Interface of Japanese interpretation
圖7 英文翻譯界面Fig.7 Interface of English interpretation
綜上所述,系統(tǒng)針對旅游景點(diǎn)導(dǎo)覽開發(fā)的基于Android 5.0.1平臺,使用eclipse開發(fā)工具、Java開發(fā)語言,調(diào)用百度地圖SDK,實(shí)現(xiàn)了城市介紹、附近搜索及路線規(guī)劃、語音講解、拍照翻譯等功能。實(shí)驗(yàn)表明在手機(jī)客戶端安裝apk安裝包,完全可以實(shí)現(xiàn)上述功能,特別適用于游客在多語種國外景點(diǎn)觀光情況下的一站式旅游服務(wù),可以對景點(diǎn)介紹文字及菜單進(jìn)行實(shí)時翻譯,且文字識別準(zhǔn)確率達(dá)到95%以上。但同時本系統(tǒng)還有一些不足之處有待后續(xù)開發(fā),如旅游導(dǎo)覽不能根據(jù)位置自動播放語音,需要手工點(diǎn)擊標(biāo)記,后續(xù)可以調(diào)用位置管理器的靠近提醒技術(shù)自動觸發(fā)景點(diǎn)的文字語音播報(bào)。
[1] 楊盼,萬隆君,徐軼群.基于Android和Openlayers的旅游導(dǎo)覽系統(tǒng)[J]. 集美大學(xué)學(xué)報(bào),2014(19):236-240.
[2] 張國平,王建璽,董桂林.基于Android平臺的手機(jī)地圖服務(wù)設(shè)計(jì)[J]. 計(jì)算技術(shù)與自動化,2015,34(1):111-115.
[3] RICARDO A,LINO F,ALMEIDA A,et al.Mobile application to provide personalized sightseeing tours[J].Journal of Network and Computer Applications,2014(41):56-64.
[4] 宋永生.基于Android的導(dǎo)游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù),2012(4):107-112.
[5] 賈文杰,孫志峰.基于Android平臺的智能導(dǎo)游系統(tǒng)[J]. 機(jī)電工程,2012,28(10):1257-1259.
[6] CHU T H,LIN M L,CHANG C H.mGuiding(mobile guiding) -usingamobileGIS app forguiding[J].Scandinavian Journal of Hospitality and Tourism,2012,12(3):269-283.
[7] 劉淼,楊鎮(zhèn)豪,謝韻玲,等.Android圖文同步識別系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2014,35(6):2207-2213.
[8] 張笑冬.基于mAppWidget的Android平臺景區(qū)導(dǎo)覽系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].天津:天津大學(xué)軟件學(xué)院,2015.
[9] 姚林邑.基于RFID的景點(diǎn)導(dǎo)覽機(jī)設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué)通信與信息工程學(xué)院,2016.
[10] 富佳鑫.基于嵌入式GIS的智能導(dǎo)游系統(tǒng)研究與設(shè)計(jì)[D].北京:中國地質(zhì)大學(xué)計(jì)算機(jī)學(xué)院,2013.
[11] 劉建林.景區(qū)智慧旅游管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].長沙:湖南大學(xué)軟件學(xué)院,2016.
[12] 黃開建.基于GPS定位技術(shù)的智能導(dǎo)覽系統(tǒng)關(guān)鍵技術(shù)硏究[D].揚(yáng)州:揚(yáng)州大學(xué)信息工程學(xué)院,2015.
[13] SAGNIK B,PANBU M B.Design and development of mobile campus,an Android based mobile application for university campus tour guide[J].International Journal of Innovative Technology and Exploring Engineering,2013,2(3):25-29.
[14] REDDY B S N,PRAVEEN S.Mobile location-based tour guide system [J].International Journal of Computer Trends and Technology,2013,4(5):1287-1290.
[15] SANCHEZ M C R,ALVAREZ M A M,MARTIN E,et al.Accessible smartphones for blind users:A case study for a wayfinding system[J].Expert Systems with Applications,2014,41:7210-7222.