馬永輝 解佺 葛萌


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