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