馬永輝 解佺 葛萌
摘要:近年來,Android操作系統(tǒng)功能日益完善,移動終端的地圖應用也為人們的日常出行帶來了極大的便利,而增強現(xiàn)實是一種通過計算機系統(tǒng)提供的信息增加用戶對現(xiàn)實世界感知的新興技術(shù),在增加人機交互能力方面有卓越的效果。因此,文章主要在Android平臺上,就增強現(xiàn)實技術(shù)在地圖導航領域的應用可能性和相關原理及應用前景進行探討。
關鍵詞:Android;基于位置的服務;增強現(xiàn)實
近年來,伴隨著各種定位技術(shù)的快速發(fā)展,基于位置的服務(Location Based Services,LBS)[1]技術(shù)也隨之愈發(fā)完善與強大,因此,地圖應用在實時定位與導航方面給人們的生活、工作帶來了更多的便利,但是同時卻存在著可視性差、人機交互功能弱等難題。不過,在移動終端研發(fā)的最新突破中,LBS的增強現(xiàn)實技術(shù)(Augmented Reality,AR)卻能夠為用戶提供對周圍環(huán)境重新感知的功能,用戶將移動端攝像頭所攝入的當前實景畫面與計算機生成的虛擬信息疊加在一起,幫助用戶以全新的視覺感知周圍環(huán)境,體驗傳統(tǒng)數(shù)字地圖導航不能提供的互動感受。
本文在位置服務的基礎上引入AR技術(shù),以Android操作系統(tǒng)[2]為研究平臺,探討AR技術(shù)在地圖導航領域的應用可能性和相關原理及應用前景。
1 關鍵技術(shù)闡述
1.1 LBS概念詳解
LBS是一種獲取移動終端用戶的位置信息進而在地理系統(tǒng)平臺上為用戶提供額外服務的派生業(yè)務,該服務通常采用電信移動運營商的通信網(wǎng)絡,如全球移動通信系統(tǒng)GlobalSystem for Mobile Communication,GSM)網(wǎng)、碼分多址(Code Division Multiple Access,CDMA)網(wǎng)或外部定位方式(如GPS)來獲取移動終端用戶的位置信息。
此技術(shù)主要實現(xiàn)了兩種功能:(1)獲取移動終端用戶的詳細經(jīng)祎坐標;(2)提供與位置相關的各類信息服務。現(xiàn)如今移動終端應用市場中類似的應用APP層出不窮,例如高德地圖、百度地圖等各種地圖應用,首先定位用戶及移動終端的所在位置,然后可提供附近一定范圍以內(nèi)的所有飯店、旅館、停車場等相關信息,方便人們的日常生活。所以說位置服務(Location Based Services,LBS)技術(shù)就是要通過互聯(lián)網(wǎng)或無線網(wǎng)絡,在固定用戶或移動用戶之間,完成定位和服務兩項業(yè)務。
1.2 高德開放平臺提供的Android開發(fā)SDK
高德地圖Android SDK[3]是一款Android操作系統(tǒng)的應用程序接口。可以使用該套軟件開發(fā)工具包(Software Development Kit,SDK)開發(fā)相應的移動終端應用,我們只需要申請一個密鑰,獲取其使用權(quán)限,通過調(diào)用其接口,訪問高德地圖服務和數(shù)據(jù),并結(jié)合全面精準的路網(wǎng)信息與實時路況,憑借其自主強大的路線算法規(guī)劃路線并引導用戶至目的地。
1.3 AR簡述及開發(fā)平臺介紹
1.3.1 AR 簡述
AR[4]技術(shù)旨在通過實時地計算攝影機影像的位置及角度并疊加相應計算機虛擬圖像、視頻、3D模型來實現(xiàn)人機交互功能的一種技術(shù)。這種技術(shù)是通過將現(xiàn)實世界的實景信息和計算機世界的虛擬信息無縫連接,進而在屏幕上將虛擬世界和現(xiàn)實世界疊加,并且可以實時互動,從而給用戶帶來更好的沉浸感、體驗感。
跟蹤注冊技術(shù)是AR系統(tǒng)中的核心技術(shù),其目的在于實時地判斷攝像機坐標系與實景標識物坐標系兩者之間的關系,從而將虛擬圖像融入現(xiàn)實場景對應的位置上。目前應用程序中較多使用的是基于視覺的跟蹤注冊方法,其方法可分為基于標識物的跟蹤注冊方法和基于自然特征的跟蹤注冊方法兩大類。同時,在某些應用程序中,還有一部分采用的是基于傳感器的跟蹤注冊方法,這兩種算法均屬于AR技術(shù)中的主要算法,其優(yōu)劣各有千秋。
目前,隨著處理器技術(shù)和計算機視覺領域所取得的一個又一個革命性突破,AR技術(shù)以更成熟的姿態(tài)展現(xiàn)在世人面前,并且在人工智能、遙感、模擬訓練等許多領域更是帶來了革命性的變化,移動導覽中AR的應用也成了一個新的研究熱點。
1.3.2 EasyAR開發(fā)平臺概述及原理介紹
本文選擇浙江大學計算機輔助設計與圖形學國家重點實驗室開發(fā)的EasyAR[5]快速開發(fā)開源軟件工具作為AR的實現(xiàn)平臺,EasyAR支持使用平面目標的AR,支持1 000個以上本地目標的流暢加載和識別,支持基于硬解碼的視頻(包括透明視頻和流媒體)的播放,支持二維碼識別,支持多目標同時跟蹤,市面上的許多其他類似開發(fā)工具本文不予討論。EasyAR具體工作原理簡述如下。
(1)EasyAR的數(shù)據(jù)流。
EasyAR的組件基本上是互相獨立的。所以在EasyAR可以工作之前需要連接這些組件。為了建立完整的EasyAR場景,一個CameraDevice需要被ImageTracker所attached然后周期性讓Augmenter從ImageTracker獲取新的Frame。attach和newFrame操作讓整個AR鏈條開始運行,而數(shù)據(jù)則在這個鏈條上進行傳遞。
在CameraDevice中產(chǎn)生的Image會逐幀進入ImageTracker,同時推進Tracker工作。這些Image被Frame送入 Augmenter。
Target被圖像和json文件構(gòu)造,可以被載入到ImageTracker中。當它被Tracker識別或跟蹤到,將會被Frame送入Augmenter。最終傳遞到AugmentedTarget。如圖1 所示。
(2)EasyAR的內(nèi)存模型。
EasyAR 的 C++對象與 C++ 的 std::shared_ptr 行為類似,它是一個對真實對象的非常薄的封裝。C所引用的內(nèi)存是引用計數(shù)的,并且以類似于std::shared_ptr的方式管理。同時,C的線程安全性與std::shared_ptr相同。EasyAR的對象通常是延遲初始化的,也就是說在特定方法被調(diào)用之前,對象是無效(operator bool()返回false)的。如果camera產(chǎn)生的Image被newFrame所識別,它將會一直駐留在內(nèi)存中,除非Frame得到釋放。
ImageTracker會保持加載到自身的Target的引用。這個引用可以通過從Tracker卸載或銷毀Tracker來移除。Frame和AugmentedTarget也會保持被跟蹤到的Target的引用。加載之后的Target在這些引用被移除之前將不會被釋放。如圖2所示。
2 Android APP主要實現(xiàn)
2.1 應用設計
此產(chǎn)品為Android客戶端APP形態(tài),可進行精確的位置定位,并在后臺數(shù)據(jù)庫中錄入商戶(包括店鋪、標志性建筑、街道名稱等)相關信息。用戶進入應用后,獲取移動終端的位置服務,直接顯示普通平面地圖,點擊定位按鈕,系統(tǒng)實現(xiàn)定位功能;用戶在地圖中選定目的地后,點擊導航按鈕進入導航模式選擇——普通導航和AR導航;選擇普通導航實施二維地圖導航功能,在界面顯示導航路線;選擇AR導航,移動終端進入移動終端攝像機錄入身邊現(xiàn)實場景信息,與后臺數(shù)據(jù)庫信息匹配后在道路上顯示朝向箭頭,用戶按照箭頭方向進行移動即可,AR朝向?qū)Ш娇芍^是不區(qū)分東西南北用戶的一大福利。
2.2 地圖加載
高德地圖Android SDK下載完成后在官網(wǎng)上申請開發(fā)者密鑰,將高德地圖Android SDK復制到APP應用libs文件夾中,在工程的“AndroidMainfest.xml”添加開發(fā)者密鑰和相關權(quán)限。
密鑰添加:
〈application
android:name:” com. amap.api.v2. apikey”
android:value:” key 值 ” />