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