東方世界楊瀟:AR開發(fā)技術(shù)點探索
原創(chuàng)【51CTO.com原創(chuàng)稿件】據(jù)市場調(diào)研公司Digi-Capital數(shù)據(jù):到2020年,AR市場規(guī)模將達到1200億美元。AR發(fā)展如此迅猛,自然少不了背后技術(shù)的支持。東方世界3D研發(fā)中心副主任楊瀟在WOT2018全球軟件與運維技術(shù)峰會上進行了主題為《AR開發(fā)中的主要技術(shù)點探索》的演講,楊老師從AR應(yīng)用中視頻處理、人臉特征點識別應(yīng)用等幾部分入手,對AR技術(shù)進行了詳細的講解。
圖1 東方世界3D研發(fā)中心副主任楊瀟
一、AR技術(shù)概述
AR技術(shù)是將真實世界信息和虛擬世界信息“無縫”集成的一種技術(shù),它把虛擬世界信息疊加到真實世界中,從而實現(xiàn)超越現(xiàn)實的感官體驗,廣義上的信息疊加,包含視覺、聲音、觸覺等,這次演講的主要內(nèi)容是視覺信息方向。AR一般通過一個攝像頭來捕捉現(xiàn)實世界,然后在現(xiàn)實世界的基礎(chǔ)上加一些虛擬世界的內(nèi)容,構(gòu)成增強后的虛擬融合世界,理想狀態(tài)就是人們無法區(qū)分后疊加的虛擬物體。AR主要有三個特征:虛實結(jié)合、實時交互和三維定位。
1、虛實結(jié)合和實時交互
圖2 虛實結(jié)合及實時交互
攝像頭在捕捉到現(xiàn)實世界的視頻圖像后,需要利用3D引擎技術(shù)將三維虛擬物體疊加到現(xiàn)實世界中,但是,這時的虛擬世界和真實世界相比,還是會存在失真的問題。如果想要把AR世界做的更加真實,還需要根據(jù)真實世界的光量增加光照,從而讓虛擬世界的物體根據(jù)現(xiàn)實環(huán)境明暗增減亮度。但上述只是一些機械的疊加,整體缺乏真實感,所以,在整個世界的渲染完成后,可以利用實時交互技術(shù),讓疊加的虛擬世界跟真實世界互動,人們才能在感官上認為虛擬物體是真實存在的。實時交互,既有傳統(tǒng)的觸屏交互,也有比較新穎的交互技術(shù),如微軟的HoloLens手勢交互或者語音識別。
2、三維定位
三維定位技術(shù)在AR中也是關(guān)鍵的一環(huán),常用的三維技術(shù)有以下幾種:
掃描二維圖片:掃描特定的二維圖片,識別出圖片內(nèi)容后,在圖片內(nèi)容的基礎(chǔ)上疊加3D物體,早期的很多AR應(yīng)用都采用這種形式,讓人們誤以為AR就是掃描一張圖片,在圖片處出來些虛擬物體。
掃描三維物體:通過掃描三維物體,可以展示出物體的詳細信息。比如:支付寶可以識別花朵,通過AR掃描花朵可以知道花的名字以及花朵簡介。
SLAM(Simultaneous Localization and Mapping,即時定位與地圖構(gòu)建):通俗的說就是估算相機的位置和朝向,以便后續(xù)在疊加虛擬場景時把虛擬物體疊加到合適的位置,以增加真實感。其核心就是要解決“我在哪”的問題。這是一個非常復(fù)雜的問題,HoloLens上用了4個環(huán)境感知攝像頭、1個深度攝像頭、1個慣性測量單元,通過多個傳感器提供冗余數(shù)據(jù),以實現(xiàn)部分攝像頭被遮擋時定位的魯棒性。在無人駕駛領(lǐng)域一般還要結(jié)合激光雷達進行定位,移動應(yīng)用中不需要很高的精度,一般通過單目攝像頭進行SLAM定位即可。但是需要借助圖像的特征點,特征點一般是紋理變化明顯的位置,如瓷磚的邊界點或是拐角點,對于攝像機獲得的兩幀圖像很容易把特征點匹配起來,然后根據(jù)圖像的變化反算相機的運動,從而定位出相機的位置并構(gòu)建平面。
圖3 三維定位
AR開發(fā)其實主要分兩層,一層是AR相關(guān)的SDK(Software Development Kit,軟件開發(fā)工具包),另一層是應(yīng)用層。AR SDK層提供了底層支持,包括獲取視頻流,獲取特征點重建平面等方面,而應(yīng)用層,可以根據(jù)底層的提供的視頻流和特征點構(gòu)建自己好玩的應(yīng)用。
圖4 AR相關(guān)SDK
3、AR相關(guān)SDK
這里列舉了幾個常用的AR SDK。
Vuforia(可掃描識別圖片):后臺上傳需要識別2D圖片,通過SDK掃描即可識別,可以增加一些物體,實現(xiàn)簡單的AR效果及其應(yīng)用。
Wikitude(可掃描構(gòu)建平面):是一款應(yīng)用比較廣泛的SDK,目前全球已有10萬的開發(fā)者,遍布100多個國家。它本身集成了單攝像頭SLAM功能可以定位出相機的位置和檢測平面,同時支持iOS和Android系統(tǒng),擁有Unity開發(fā)插件,開發(fā)者使用起來比較簡單。但是在使用過程中也出現(xiàn)了平面的跟蹤不夠穩(wěn)定,平面容易丟失等問題,后來東方世界運用了偽AR效果解決了這些問題。即在空間中構(gòu)建虛擬平面(非真實跟蹤的平面),根據(jù)手機陀螺儀獲取手機的旋轉(zhuǎn)信息來驅(qū)動虛擬相機的旋轉(zhuǎn),讓人感覺手機轉(zhuǎn)動的同時,虛擬物體(虛擬相機)的位置也發(fā)生了轉(zhuǎn)動,感覺虛擬物體存在于真實世界中,一定程度上也達到了AR效果。
ARInterface:在Unity2017.2.1以上版本中已經(jīng)提供,它的底層是ARKit和ARCore,進行了統(tǒng)一的封裝,減輕了開發(fā)者的工作量,而且開發(fā)者仍然可以通過ARKitInterface訪問ARCore和ARKit的接口。
4、應(yīng)用層
應(yīng)用層主要包括基于視頻的應(yīng)用和基于特征點的應(yīng)用兩部分。
基于視頻的應(yīng)用:AR SDK通過攝像頭將真實世界傳給應(yīng)用,應(yīng)用自身可以對視頻進行處理,得到自己的特殊應(yīng)用。例如,可以通過綠幕摳圖獲得自己感興趣的部分圖像,這樣就可以把真實的人疊加到虛擬場景中,來一個大雪山上的直播等等。
基于特征點的應(yīng)用:通過AR SDK可以獲得3D平面,可以將3D虛擬物體疊加到平面上實現(xiàn)AR Dragon(App Store中有該應(yīng)用)那種效果。另外也可以通過OpenCV等提取臉部特征點,利用臉部特征點可以實現(xiàn)變臉、換臉等效果,或其他好玩的效果。
***R技術(shù)應(yīng)用場景
AR應(yīng)用不僅限于計算機領(lǐng)域,也可以應(yīng)用到其他領(lǐng)域:
·情感分析,可以根據(jù)表情分析情緒;
·在路口利用面部識別,記錄闖紅燈的人群;
·在工業(yè)領(lǐng)域,可以利用目標識別,解決檢修問題;
·信息增益可以在攝像頭識別出來感興趣的目標或者人臉之后,疊加需要的顯示;
·AR顯示還停留在2D屏幕顯示或頭盔式階段,目前還缺少觸屏之于智能手機那種革命性的變化;
·處理、傳感、掃描,AR的***解決方案是重建出三維場景,這樣將虛擬物體疊加到真實場景時才能解決視頻中真實物品遮擋的問題,也有利于系統(tǒng)對場景的理解。
二、AR應(yīng)用中視頻處理
1、AR視頻直播應(yīng)用系統(tǒng)架構(gòu)
圖***R應(yīng)用中視頻處理
如圖5所示,在一個典型的AR直播系統(tǒng)架構(gòu)中,上層是和視頻相關(guān)的內(nèi)容,下層是3D 虛擬物體顯示引擎。通過普通的相機、3D相機或者全景相機獲得視頻,其中3D相機由左右兩個普通相機構(gòu)成,可以模擬人的左右眼,將兩路視頻合成后,拼接成左右格式的視頻,全景相機由多個相機構(gòu)成,每個相機拍攝不同的角度形成360度拍攝,通過軟件拼接形成一路視頻。所以后續(xù)的處理三種相機是相同的。經(jīng)過普通相機、3D相機和全景相機拍攝出視頻后,將視頻進行解碼壓縮、推流、CDN分發(fā)操作,通過播放器拉視頻流進行播放,三種視頻的播放方式不同,需要在播放器中特殊處理,比如全景視頻將畫面投影到球面上,人站在球心進行觀察,同時獲取手機陀螺儀朝向,驅(qū)動視頻的渲染,看起來的效果就是人朝向不同的方向看到不同的畫面。播放器層進行播放的同時,通過3D引擎層疊加虛擬物體作為道具以實現(xiàn)虛實疊加的效果。
對于3D相機部分,東方視界使用的是裸眼3D設(shè)備,播放器層要做特殊的交織處理,即在裸眼3D的屏幕上不用戴VR眼鏡就可以看到3D效果。同樣的,下面的虛擬物體層,也可以通過特殊的架構(gòu)處理,達到裸眼3D的效果。
2、AR融合及偽AR處理
圖6 AR融合及偽AR處理
AR融合的核心是平面檢測和跟蹤,這部分AR SDK已經(jīng)提供了,它是現(xiàn)實世界和虛擬世界的一個橋梁,可以把虛擬物體放在這個平面上,這樣看起來就像是真實世界的地面上確實有個物體一樣。
由于平面跟蹤的不穩(wěn)定性,部分應(yīng)用采用了偽AR處理技術(shù),它構(gòu)建的是虛擬平面,將物體放到虛擬平面上,在相機旋轉(zhuǎn)時獲取陀螺儀數(shù)據(jù),用陀螺儀的數(shù)據(jù)來驅(qū)動虛擬相機來進行旋轉(zhuǎn)操作,人眼看起來和物體在虛擬空間里的感覺實際差不多。其技術(shù)關(guān)鍵點是用陀螺儀數(shù)據(jù)來驅(qū)動虛擬相機實現(xiàn)偽AR的效果。
3、綠幕二次摳圖
視頻處理中還有一個實用的技術(shù)就是綠幕摳圖。綠幕摳圖其實在影視里面用的比較多,影視里面的摳圖是離線處理,效果會更好。綠幕摳圖是將人物摳出之后替換背景,或者將人物摳出之后放在虛擬的場景里。這方面前人有很多研究,但東方世界通過測試發(fā)現(xiàn)基于顏色的二次摳圖比較有效,方法是給定背景顏色閾值,然后摳除背景,但人的頭發(fā)等邊緣往往有綠邊,不容易摳干凈,這時提高背景顏色的閾值,進行第二次摳圖。
三、人臉特征點識別應(yīng)用
建軍70周年時,人民日報推出了一款軍裝照,可以將自己的臉替換到不同時期的軍裝上,引起了一番“換臉”浪潮。還有像FaceU激萌等軟件,也可以實現(xiàn)在臉上增加一些特殊裝飾或者在素顏的臉上上妝。這些應(yīng)用主要是運用了特征點識別技術(shù)實現(xiàn)的,但如何運用這些特征點進行識別并應(yīng)用,主要從以下幾方面入手。
1、特征點的來源
圖7 人臉特征點的應(yīng)用
首先,在開發(fā)特征點應(yīng)用前需要先獲得特征點,基于OpenCV和Dlib特征點識別庫可以提取一些穩(wěn)定的特征點,還有其他的收費特征點識別庫,如Face++等。例如圖7中,在小貓的鼻子、眼睛、嘴部分都識別出了特征點,而且這些特征點是有序號標記的,便于后續(xù)在應(yīng)用中使用,具體特征點數(shù)量會根據(jù)不同的特征點識別庫有所不同,比如,OpenCV或者是OpenCV+Dlib特征點擁有68個特征點模板,而Face++擁有超過100個特征點模板,特征點越多識別的越精細。
2、3D視頻掛接
擁有了識別出的特征點,可以進行哪些應(yīng)用呢?其中之一就是可以進行3D飾品掛接。3D飾品掛接可以在識別出人臉以后,增加一些頭飾或眼鏡,或者是進行換臉,甚至可以估算頭部姿態(tài),然后增加一些3D物體、裝飾、頭盔等。基于這些特征點,可以直接將虛擬相機的位置、朝向估算出來,再疊加3D物體的時候就可以基于虛擬相機讓整個AR場景看起來更真實。
圖8 3D飾品掛接
3D飾品掛接最重要的是需要定位3D相機,通過2D特征點的位置和虛擬的3D物體,可以反算出虛擬3D相機位置。具體的反算過程比較復(fù)雜,簡單來說就是相機定標和相機外參數(shù)的計算,實際應(yīng)用的時候OpenCV可以解決反算的問題,在Calib3d與solvePnP之間可以進行調(diào)用。在獲取3D相機具體位置之后,直接在頭部模型的合適位置疊加3D眼鏡或其他飾品,基于特征點的3D 人頭模型和3D飾品是不動的,但是基于2D特征點計算出來合適的相機位置。相機的位置移動,模擬出的3D飾品也會跟隨移動,仿佛3D飾品確實貼在真實的人臉上一樣。
3、換臉應(yīng)用原理
3D飾品掛接是基于人臉特征點的應(yīng)用,另一個重要應(yīng)用是換臉,換臉應(yīng)用的背后有哪些原理作支撐呢?下面來看一下?lián)Q臉應(yīng)用的處理流程。
圖9 換臉應(yīng)用原理
如圖9所示,臉部圖像1是攝像頭獲取的真實圖像,臉部圖像2是想換取的虛擬圖像,臉部區(qū)域識別可以通過OpenCV等特征點識別庫提供,并且OpenCV可以實現(xiàn)多臉識別,識別之后會出現(xiàn)臉部區(qū)域1和臉部區(qū)域2,然后進行簡單歸一化,就可以基于特征點做一些選擇性互換。
圖10 換臉應(yīng)用
舉一個基礎(chǔ)“換臉”的例子,如圖10所示。 如果想實現(xiàn)“換臉”就要先建立一個基于特征點的換臉模型,然后使提取的臉部特征點(眉毛、鼻子等)與模型相匹配,取區(qū)域2中的紋理來替代區(qū)域1中對應(yīng)特征點位置的紋理,這樣就可以實現(xiàn)“換臉”。需要注意的是:眉毛以上沒有特征點,眉毛以下才存在特征點,但是為了避免模型替換之后過渡部分突兀,東方世界采取了增加眉毛上面部分模型的方法,眉毛上面新增的部分作為額頭,再做一些漸變處理,這樣的做法會使整個臉看上去比較自然。
那么,如果想替換照片里的人臉,也就像人民日報的軍裝照一樣,需要用到什么方法呢?首先,需要建立一個標準模型,模型中有一張人臉,然后將想要換臉的真實人臉特征點粘貼到標準模型上,***再利用紋理影射就可以實現(xiàn)建模替換人臉的應(yīng)用了。
以上內(nèi)容是51CTO記者根據(jù)東方世界楊瀟在WOT2018全球軟件與運維技術(shù)峰會的演講內(nèi)容整理,更多關(guān)于WOT的內(nèi)容請關(guān)注51cto.com。