夏延哲
(廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣州510006)
隨著中國(guó)經(jīng)濟(jì)的快速增長(zhǎng),人們不僅僅只滿(mǎn)足于物質(zhì)上的富足,而對(duì)精神充實(shí)的追求也越來(lái)越高。從2006年起,中國(guó)文物機(jī)構(gòu)和博物館觀覽人數(shù)持續(xù)上升。博物館已經(jīng)不僅是收藏、保護(hù)、研究、展示文化遺產(chǎn)的機(jī)構(gòu),還將成為面向未來(lái)的文化服務(wù)和教育機(jī)構(gòu)。而當(dāng)游客難以找到參觀的藝術(shù)品時(shí),就會(huì)造成無(wú)序的人流流動(dòng),導(dǎo)致游客的參觀過(guò)程非常混亂。
本文提出通過(guò)ARKit技術(shù),解決傳統(tǒng)的博物館參觀中尋找目標(biāo)藝術(shù)品的途徑。針對(duì)現(xiàn)有室內(nèi)導(dǎo)航過(guò)程中存在的設(shè)備運(yùn)動(dòng)跟蹤不準(zhǔn)確、攝像頭圖像采集、圖像視覺(jué)處理、場(chǎng)景渲染等技術(shù)問(wèn)題,提出了采用ARKit結(jié)合Unity 3D平臺(tái)進(jìn)行室內(nèi)場(chǎng)景導(dǎo)航的方法;通過(guò)整合設(shè)備攝像頭圖像信息與設(shè)備運(yùn)動(dòng)傳感器(包括LiDAR)信息,在AR跟蹤穩(wěn)定性、渲染真實(shí)度、人機(jī)交互自然度上達(dá)到較好的效果。創(chuàng)建前端頁(yè)面與后端程序的交互,開(kāi)發(fā)室內(nèi)三維場(chǎng)景導(dǎo)航程序,完成定位場(chǎng)景中坐標(biāo)點(diǎn)、路徑規(guī)劃、地圖信息保存及自動(dòng)尋路等主要功能。結(jié)果證明,該方法可以實(shí)現(xiàn)室內(nèi)自動(dòng)導(dǎo)航,減少了游客尋找目標(biāo)展品的時(shí)間,提升改善了博物館的參觀游覽情況,符合現(xiàn)代化博物館建設(shè)的需求。
2017年,蘋(píng)果公司正式推出了增強(qiáng)現(xiàn)實(shí)的開(kāi)發(fā)框架ARKit。從本質(zhì)上,AR是將2D/3D元素(文字、圖片、模型、音視頻等)放置于設(shè)備攝像頭所采集的圖像中,營(yíng)造一種虛擬元素真實(shí)存在于現(xiàn)實(shí)世界中的假象。ARKit通過(guò)移動(dòng)設(shè)備(包括手機(jī)、平板電腦等)單目攝像頭采集的圖像信息(包括LiDAR采集的信息),實(shí)現(xiàn)了平面檢測(cè)識(shí)別、場(chǎng)景幾何、環(huán)境光估計(jì)、環(huán)境光反射、圖像識(shí)別、3D物體識(shí)別等功能。但一個(gè)完備的室內(nèi)導(dǎo)航系統(tǒng)還應(yīng)該包含前端頁(yè)面的操作,用戶(hù)操作流程等。因此,本文提出了將ARKit與三維集成平臺(tái)結(jié)合,設(shè)計(jì)出相應(yīng)的前端頁(yè)面,利用ARKit的強(qiáng)大功能,通過(guò)用戶(hù)選定目標(biāo)點(diǎn),采用合適的算法進(jìn)行路徑規(guī)劃,最終實(shí)現(xiàn)導(dǎo)航的功能。創(chuàng)建一個(gè)現(xiàn)實(shí)和虛擬空間之間的對(duì)應(yīng)關(guān)系,ARKit使用的技術(shù)稱(chēng)為視覺(jué)慣性測(cè)距。這個(gè)過(guò)程結(jié)合了從iOS設(shè)備的運(yùn)動(dòng)傳感硬件與設(shè)備的攝像頭獲取到的圖像[1]。ARKit識(shí)別具有顯著特征的場(chǎng)景圖像,跟蹤視頻幀之間的特征差異的位置,將該信息與運(yùn)動(dòng)傳感數(shù)據(jù)比較,從而得到一個(gè)高精度的設(shè)備位置和運(yùn)動(dòng)模型,其中包含世界跟蹤還分析和理解場(chǎng)景的內(nèi)容。使用命中測(cè)試方法找到對(duì)應(yīng)于相機(jī)圖像中某個(gè)點(diǎn)的真實(shí)世界的表面。
ARKit官方提供了Xcode開(kāi)發(fā)包,這也提高了利用其它工具進(jìn)行開(kāi)發(fā)的學(xué)習(xí)成本。在這種情況下,Unity構(gòu)建了一個(gè)AR開(kāi)發(fā)平臺(tái)-ARFoundation,該平臺(tái)架構(gòu)于ARKit和ARCore之上,其目的是利用Unity的跨平臺(tái)能力,構(gòu)建一種與平臺(tái)無(wú)關(guān)的AR開(kāi)發(fā)環(huán)境。即,ARFoundation對(duì)ARKit與ARCore進(jìn)行了再次封裝,并按照用戶(hù)的發(fā)布平臺(tái),自動(dòng)選擇合適的底層SDK版本。ARFoundation提供了一個(gè)獨(dú)立于平臺(tái)的腳本API和MonoBehaviour。因此,開(kāi)發(fā)者可以通過(guò)ARFoundation使用ARCore和ARKit共有的核心功能構(gòu)建,同時(shí)適用于iOS和Android兩個(gè)平臺(tái)的AR應(yīng)用程序。這可以讓開(kāi)發(fā)者只需開(kāi)發(fā)一次應(yīng)用,就可以部署到兩個(gè)平臺(tái)的設(shè)備上,不必做任何改動(dòng)[2]。
程序定位導(dǎo)航原理的大致流程為:首先進(jìn)行地圖信息的采集;然后對(duì)目標(biāo)特征點(diǎn)信息進(jìn)行識(shí)別和保存;選用合適的路徑規(guī)劃算法,生成導(dǎo)航路徑。
對(duì)真實(shí)環(huán)境中的掃描和測(cè)量,并且保存到后臺(tái)系統(tǒng)中是該模塊重點(diǎn)實(shí)現(xiàn)的問(wèn)題。本程序?qū)τ谌S環(huán)境動(dòng)態(tài)的實(shí)時(shí)理解,主要依賴(lài)于單目SLAM技術(shù)來(lái)實(shí)現(xiàn)。在游客移動(dòng)過(guò)程中,一方面要把攝像頭所拍到的圖像連接成地圖,另一方面將地圖的信息存儲(chǔ)到后方的數(shù)據(jù)庫(kù)中。同時(shí),針對(duì)如何識(shí)別攝像頭中的平面問(wèn)題,采取通過(guò)光學(xué)系統(tǒng)檢測(cè)到的特征計(jì)算生成。通常稱(chēng)這些點(diǎn)為“點(diǎn)云(Point cloud)”。形成稀疏點(diǎn)云之后,在少量的內(nèi)存和CPU的支持,輔以慣性系統(tǒng)的配合下可以定義成平面,即使在只有少量追蹤點(diǎn)的情況下,仍然可以有效地運(yùn)作[3]。具體操作流程如圖1所示。
此模塊的功能主要是對(duì)藝術(shù)品具體位置進(jìn)行定位,將藝術(shù)品的位置信息傳輸?shù)椒?wù)器。此時(shí)需將攝像頭中藝術(shù)品的位置創(chuàng)建三維物體對(duì)象,并且生成該對(duì)象在導(dǎo)航程序中全局坐標(biāo)系數(shù)據(jù)。只要選定設(shè)置好不同藝術(shù)品的位置,就可以實(shí)現(xiàn)相互之間的路徑生成和線(xiàn)路導(dǎo)航。三維物體在場(chǎng)景中的生成如圖2所示。
產(chǎn)生位置信息具體封裝代碼如下:



圖1 空間信息識(shí)別流程Fig.1 Spatial information identification process

圖2 位置信息采集Fig.2 Location information collection
導(dǎo)航路線(xiàn)規(guī)劃系統(tǒng)是通過(guò)兩個(gè)目標(biāo)點(diǎn)在地圖中的位置信息,來(lái)進(jìn)行規(guī)劃和確定的。如圖2所示,首先判斷兩點(diǎn)是否在同一聯(lián)通分量上。通過(guò)一次完整的dfs,可以得到一個(gè)聯(lián)通分量,只要兩點(diǎn)都被同一次dfs訪(fǎng)問(wèn)過(guò),則就存在路徑。產(chǎn)生路徑的核心算法負(fù)責(zé)從未被訪(fǎng)問(wèn)到的節(jié)點(diǎn)列表(from表)中提取節(jié)點(diǎn)的序列號(hào),從終節(jié)點(diǎn)的序列號(hào)開(kāi)始一直調(diào)用from[終節(jié)點(diǎn)]往前推,直到推出某個(gè)節(jié)點(diǎn)i的from[i]=-1,表示節(jié)點(diǎn)i沒(méi)有前節(jié)點(diǎn),即節(jié)點(diǎn)i就是起始源節(jié)點(diǎn)。雖然推出來(lái)的序列號(hào)順序是反向的路徑,但可以把這個(gè)反向的節(jié)點(diǎn)序列壓入一個(gè)棧中,然后一個(gè)一個(gè)出棧放入一個(gè)向量vec中保存,這個(gè)向量中保存的序列就是正確的順序。showPath主要調(diào)用p at h函數(shù)來(lái)準(zhǔn)備路徑數(shù)據(jù),并傳入一個(gè)向量vect o r給p at h函數(shù),用來(lái)存儲(chǔ)路徑信息。之后再控制輸出格式把節(jié)點(diǎn)一個(gè)一個(gè)輸出來(lái),就形成了一條路徑,如圖3所示。

圖3 路徑規(guī)劃示意圖Fig.3 Schematic diagram of path planning
路徑規(guī)劃中的關(guān)鍵代碼如下:

程序開(kāi)發(fā)語(yǔ)言為.NET C#,其版本為Visual Studio 2019,本程序支持在IOS平臺(tái)上進(jìn)行,兼容IOS12及以上的操作系統(tǒng)。
本程序的開(kāi)發(fā)是以Unity3D為主要開(kāi)發(fā)平臺(tái),對(duì)于程序中需要使用到的腳本文件,則利用Visual Studio 2019進(jìn)行腳本的編輯與測(cè)試,在完成腳本的編寫(xiě)與ARKit的控制器成功引入之后,將程序發(fā)布到IOS設(shè)備中,并可以正常使用。其具體實(shí)現(xiàn)步驟如下:
(1)ARKit中控制器導(dǎo)入。將ARKit提供的一些關(guān)鍵的控制器導(dǎo)入到程序的工程中。ARWorldMap控制器用來(lái)添加環(huán)境掃描,用于掃描攝像頭中的空間信息,并且將當(dāng)前環(huán)境數(shù)據(jù)保存在本地。AR Session Origin為創(chuàng)建的地圖設(shè)置本地坐標(biāo)信息。
(2)場(chǎng)景內(nèi)物體生成。通過(guò)Anchor Prefab腳本,使得用戶(hù)點(diǎn)擊攝像頭中某個(gè)已經(jīng)掃描出來(lái)的錨點(diǎn)時(shí),會(huì)在本地生成一個(gè)3D物體,并且記錄其當(dāng)前的位置信息。該3D物體的形狀和外形可以自定義。
(3)導(dǎo)航路徑規(guī)劃。在場(chǎng)景中設(shè)置Path Finder腳本,實(shí)現(xiàn)各個(gè)目標(biāo)點(diǎn)之間路徑的規(guī)劃。場(chǎng)景中的任意物體,需要去添加每個(gè)節(jié)點(diǎn)的坐標(biāo),并且在Paths中設(shè)置每條線(xiàn)路的規(guī)劃。如:A->B;A->C;B->C;C->D;D->A。
(4)導(dǎo)航線(xiàn)段的生成與渲染。該部分需要搭配Unity中的LineRenderer組件來(lái)實(shí)現(xiàn)。在線(xiàn)段的材質(zhì)和貼圖方面,需要調(diào)整幾項(xiàng)參數(shù):動(dòng)態(tài)修改Tiling參數(shù)的信息。當(dāng)路程較長(zhǎng)時(shí),則X軸的信息為總路程:MyPoint+for(int i=0;i<Each Coordinate Information)。將每個(gè)坐標(biāo)的間隔距離相加,就可以得到最終的總路程信息。
(5)程序UI界面的實(shí)現(xiàn)。在UI設(shè)計(jì)中,考慮到不同設(shè)備的機(jī)型,通過(guò)微調(diào)UI面板的寬度與高度信息,來(lái)達(dá)到系統(tǒng)的自動(dòng)適配。當(dāng)設(shè)計(jì)分辨率與設(shè)備分辨率不同時(shí),需要將UI界面經(jīng)過(guò)一定縮放投射到屏幕上。
(6)程序的調(diào)試以及bug的修改。
(7)撰寫(xiě)程序的使用說(shuō)明以及開(kāi)發(fā)文檔。
一個(gè)優(yōu)秀的導(dǎo)航程序,離不開(kāi)友好、人性化的使用界面。程序的界面和窗體設(shè)計(jì)是用戶(hù)是否能快速上手使用的重要因素。本文導(dǎo)航程序使用FairyGUI來(lái)設(shè)計(jì)前端操作頁(yè)面,通過(guò)前端清晰的操作按鈕與后臺(tái)控制器的綁定,實(shí)現(xiàn)了程序操作的簡(jiǎn)化,同時(shí)提高了易用性。程序的主要功能以及定位導(dǎo)航過(guò)程示意如圖4所示。

圖4 定位導(dǎo)航過(guò)程示意圖Fig.4 Schematic diagram of positioning and navigation process
本文根據(jù)目前博物館參覽的實(shí)際情況,在對(duì)相關(guān)技術(shù)進(jìn)行選型以及研究后,采用ARKit技術(shù)來(lái)設(shè)計(jì)導(dǎo)航系統(tǒng)。針對(duì)游客在游覽時(shí)存在的尋找藝術(shù)品位置不便的問(wèn)題,提供了線(xiàn)路和路徑導(dǎo)航的解決方案。系統(tǒng)的應(yīng)用,將在很大程度上解決了館內(nèi)人流無(wú)序的問(wèn)題,更有利于維護(hù)館內(nèi)的秩序,以及更好地利用藝術(shù)品被欣賞的文化價(jià)值。