張泊平,路 凱,張云貞
(1. 河南省偏振感知與智能信號處理國際聯(lián)合實驗室,河南 許昌 461000; 2. 許昌學(xué)院 信息工程學(xué)院,河南 許昌 461000; 3. 許昌市虛擬現(xiàn)實重點實驗室,河南 許昌 461000)
眼鏡試戴系統(tǒng)最早在美國得到應(yīng)用,以Warby Parker為代表的眼鏡電商率先推出了網(wǎng)上試戴功能[1]。近年來,國內(nèi)眼鏡銷售商也開始嘗試在線試戴功能[2-4]。增強現(xiàn)實(augmented reality, AR)能夠把虛擬場景疊加到現(xiàn)實世界中,并能夠?qū)崟r互動,給虛擬眼鏡試戴提供了技術(shù)支持,其關(guān)鍵技術(shù)如在線試戴的速度、體驗感和沉浸感是近年來研究的熱點[5-6]。目前,已經(jīng)有4類虛擬眼鏡試戴技術(shù)應(yīng)用于在線購物。第1種是基于二維圖像疊加,將人臉照片和眼鏡框架圖像通過平移、縮放、旋轉(zhuǎn)等基本變換,再配合一階梯度算子(Sobel算子)提取眼鏡框架圖像邊緣,合成后呈現(xiàn)出正視圖試戴效果。文獻[7]應(yīng)用這種方法實現(xiàn)了正面視圖佩戴,但側(cè)視圖佩戴效果不佳,用戶的體驗不夠理想。第2種是將三維眼鏡模型與二維人臉圖像融合得到試戴效果。基于這種思想,文獻[8]提出了一種基于人臉和標(biāo)識物特征相互疊加的虛擬眼鏡試戴方法,并在安卓(Android)移動平臺上得到應(yīng)用。但是,當(dāng)人臉旋轉(zhuǎn)角度大于20°時,人臉特征點標(biāo)定誤差偏高,當(dāng)用戶頭部旋轉(zhuǎn)時,部分眼鏡圖像被遮擋,效果不理想。文獻[9]對頭部運動姿態(tài)進行實時跟蹤,但是佩戴過程中仿射變換效果不穩(wěn)定,眼鏡模型容易變形,使用戶的真實感和沉浸感受到影響。第3種方法是對用戶的人臉進行三維重建,三維眼鏡模型加載到人臉的三維模型上。文獻[10]和文獻[11]應(yīng)用這種技術(shù),實現(xiàn)了試戴過程自動化,允許用戶從不同的角度觀察虛擬人臉和眼鏡。該方法由于對硬件要求太高,人臉三維重建耗時較長,用戶佩戴的速度需要提高,且重建后的圖像缺乏真實感,實際應(yīng)用中效率很低。第4種方法是利用深度相機和高速配件完成試戴。文獻[12]提出的基于視頻序列的虛擬試戴技術(shù),對虛擬眼鏡由于折射效應(yīng)產(chǎn)生的畸變進行矯正,并充分考慮了反射和陰影影響,眼鏡框架能夠正確輸出,為用戶提供了一個真實感體驗。該方法需要借助深度相機和其他高速配置的硬件,這種專業(yè)設(shè)備給用戶提出了更高的要求,不具有普適性,影響了系統(tǒng)更廣泛的應(yīng)用。
綜上所述,4類虛擬眼鏡試戴方法各具優(yōu)勢,又都存在一定的不足。二維圖像疊加的真實感和沉浸感稍差,三維人臉重建又耗時太長,實時性要求不足。因此,研究一種試戴效果真實自然又能被普通用戶接受的虛擬試戴技術(shù),實現(xiàn)更加準(zhǔn)確的跟蹤和匹配,對在線購物具有重大的意義。
本文研究了一種移動平臺上的增強現(xiàn)實虛擬眼鏡試戴技術(shù)。采用單目攝像頭作為輸入設(shè)備,采集人臉信息,建立支持向量機(support vector machine, SVM)分類器進行人臉檢測,利用尺度不變特征變換(scale-invariant feature transform, SIFT)算法進行人臉局部特征提取,再通過監(jiān)督下降算法(supvised descent method, SDM)對齊特征點,經(jīng)過多次迭代找出最優(yōu)對齊方案。為了解決眼鏡與頭部姿態(tài)自適應(yīng)問題,對頭部進行姿態(tài)估計,虛擬三維眼鏡模型能夠準(zhǔn)確地疊加在人臉模型上。將上述研究應(yīng)用到移動端眼鏡試戴系統(tǒng)中,完成了一個移動平臺上的增強現(xiàn)實虛擬眼鏡試戴系統(tǒng)應(yīng)用。
虛擬眼鏡試戴首先要解決的問題是人臉識別,在特定的條件下,人臉檢測失敗比例會增大,比如光照條件不適合、人體姿態(tài)不正確、光線遮擋等都會導(dǎo)致檢測失敗。為了獲得良好的試戴效果,系統(tǒng)的實時性是一個重要指標(biāo)。本文設(shè)計了一個通用的人臉識別流程[13],如圖1所示。
SVM分類器人臉檢測流程如圖2所示。
圖1 人臉識別流程
圖2 SVM分類器人臉檢測流程
圖3 支持向量機網(wǎng)絡(luò)結(jié)構(gòu)
其中,基于SVM分類器人臉檢測網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計如圖3所示。
圖2中,假設(shè)支持向量機的輸入向量為x=(x1,x2,…,xn),輸出層關(guān)于x的網(wǎng)絡(luò)輸出如式(1)所示:
(1)
使得:
(2)
將對應(yīng)于?i>0的訓(xùn)練樣本xi訓(xùn)練為支持向量,由式(3)求出最優(yōu)化參數(shù)b*:
(3)
本文利用SIFT算法進行面部特征提取[14]。關(guān)鍵點特征用位置、尺度和方向表示。關(guān)鍵點匹配分為梯度計算和梯度直方圖統(tǒng)計。由于出現(xiàn)大量的錯誤匹配點,關(guān)鍵點匹配成功后,整個算法還不能結(jié)束,需要利用Ransac算法來消除這些錯配點,并反復(fù)測試、多次迭代。
為了評估上述人臉分類與識別算法的有效性,采用Terravic公司提供的人臉紅外數(shù)據(jù)庫進行試驗。數(shù)據(jù)庫中共有20個紅外圖像序列,帶有頭部旋轉(zhuǎn)、佩戴眼鏡、佩戴帽子和光照明暗的圖片。從每個人臉中挑選3組圖像對,一共60對。圖4中顯示了挑選的部分圖像,采用經(jīng)典SIFT匹配算法作為最初的SIFT匹配方法,設(shè)定每個匹配的正確率和錯配率,用精確度和誤識度來描述匹配性能。
精確度=正確匹配數(shù)/匹配總數(shù);誤識度=(關(guān)鍵點總數(shù)-匹配點數(shù))/匹配點數(shù)。
圖4 樣本序列集合
從這120個樣本中,按照頭部旋轉(zhuǎn)角度、是否佩戴眼鏡、是否佩戴帽子以及光照的變換為變量進行抽象匹配對比,同時控制其他變量保持相同。面部特征匹配結(jié)果如圖5所示。
(a) 頭部旋轉(zhuǎn)角度匹配圖
匹配結(jié)果分析如表1所示。由表1可知:佩戴眼鏡對SIFT匹配性能更容易造成較大的影響,其次是頭部旋轉(zhuǎn)、光照明暗和佩戴帽子。由于實驗樣本的有限性,實驗結(jié)果不可避免地產(chǎn)生誤差,但總體的結(jié)果依然表現(xiàn)出較好的趨勢。
表1 匹配結(jié)果分析表
經(jīng)過人臉圖像檢測后,面部的眉毛、眼睛、鼻尖、嘴巴等特征輪廓點由SIFT算法自動定位。下一步需要根據(jù)頭部姿態(tài)定位眼鏡的位置,并將頭部姿態(tài)估計應(yīng)用到眼鏡的追蹤注冊子系統(tǒng)中,產(chǎn)生透視變換。受人臉特征點定位的影響,姿態(tài)估計會產(chǎn)生一定的估計誤差,為了提高效果,需要更高的特征點的準(zhǔn)確率。
(Ⅰ)圖像歸一化
圖像歸一化是實現(xiàn)人臉對齊的必要操作,這樣可以提高訓(xùn)練的效率。設(shè)人臉特征點最優(yōu)解為α*,初始點為α0,x(α)∈Rn×1是圖像中n個特征點的坐標(biāo),每個特征點附近的非線性特征提取函數(shù)用β表示,如果每個特征點提取128維度的SIFT特征,則β(x(α))∈R128n×1,在α*處提取的SIFT特征可以記作?*=β(d(α*))。那么,人臉特征點對齊運算就轉(zhuǎn)換成了求使得函數(shù)(4)取得最小值的Δα:
(4)
下面根據(jù)SDM求步長Δx。
αk=αk+Δαk。
(5)
若Rk和bk表示每次迭代的路徑,則函數(shù)(6)能夠把特征點從初值α0收斂到α*。
αk+1=αk-1+Rk-1?k-1+bk-1。
(6)
(7)
這樣從訓(xùn)練集中得到R0和b0,經(jīng)過多次迭代后得到Rk和bk,在后期表現(xiàn)為測試圖像的對齊結(jié)果。
圖6 SDM人臉對齊過程
(Ⅱ)SDM對齊結(jié)果
目前有很多人臉對齊算法[15]。本文利用效果較好的SDM[16],人臉對齊過程如圖6所示。
樣本訓(xùn)練時,主要使用IBUG和LFPW人臉數(shù)據(jù)庫,每一張人臉圖像上標(biāo)注71個特征點,訓(xùn)練樣本集合大小為1 006,人臉圖像為356張。正面對齊結(jié)果如圖7所示,側(cè)面對齊結(jié)果如圖8所示。
首先,對應(yīng)人臉圖像上二維坐標(biāo)標(biāo)注與三維坐標(biāo),并找出對應(yīng)的投影關(guān)系,確定相機的運動坐標(biāo)。三維人臉模型相對于相機有平移和旋轉(zhuǎn)兩種運動狀態(tài)。設(shè)相機當(dāng)前位置為(X,Y,Z),新位置為(X′,Y′,Z′),則平移后的向量τ=(X′-X,Y′-Y,Z′-Z)。旋轉(zhuǎn)運動有6個自由度,姿態(tài)估計需要確定3個平移參數(shù)和3個旋轉(zhuǎn)參數(shù)。
(Ⅰ)特征點標(biāo)定
計算1個人臉圖像對應(yīng)的三維姿態(tài),首先確定N個點的二維坐標(biāo),然后再確定這些點的三維坐標(biāo)。其中,二維坐標(biāo)選取鼻尖、下巴、左眼角、右眼角、左嘴角、右嘴角6個特征點,這些點具有剛體不變性。為獲得與選取的二維坐標(biāo)對應(yīng)的三維坐標(biāo),本文使用Surrey Face Model臉部模型庫作為實驗通用三維人臉模型[17],人工標(biāo)定模型上的6個自由度,這些是姿態(tài)估計所需要的世界坐標(biāo)(x,y,z)。
圖7 人臉正面對齊
圖8 人臉側(cè)面對齊
(Ⅱ)相機標(biāo)定
世界坐標(biāo)確定后,還需要確定相機的矩陣,主要包括相機的焦距、圖像的光學(xué)中心和徑向畸變參數(shù),這個過程就是對照相機進行配準(zhǔn)。本文采用文獻[18]的方法對相機進行標(biāo)定,以獲得相機矩陣。
圖9 3個坐標(biāo)系
(Ⅲ)特征點映射
圖9中為世界、相機、圖像3個坐標(biāo)系,相機的中心是O,二維圖像平面的光學(xué)中心是c,P是世界坐標(biāo)中的任意一點,P′是P在圖像平面上的投影,P′可以由P點的投影確定。
設(shè)P的世界坐標(biāo)為(U,V,W),旋轉(zhuǎn)矩陣R(3×3矩陣)和平移向量τ(3×1矢量)已知,則可以確定P在相機坐標(biāo)系中的位置O(X,Y,Z):
(8)
展開式(8),得到式(9):
(9)
如果有足夠數(shù)量的點(X,Y,Z)和(U,V,W)對應(yīng),上述問題可以轉(zhuǎn)化為一個線性方程組,其中,(τx′,τy′,τz′)是未知數(shù),然后可以對線性方程進行求解。
本文首先需要手工標(biāo)定三維模型上的6個點,得到它們的世界坐標(biāo)(U,V,W),通過式(10)可以確定這6個點的圖像坐標(biāo)系(X,Y):
(10)
其中:fx和fy是x和y方向上的焦距,并且(cx,cy)是光學(xué)中心;S是一個未知縮放因子。若連接P點到O點,P′就是P的像。式(10)轉(zhuǎn)換為式(11):
(11)
已知P和P′坐標(biāo),則式(10)和式(11)轉(zhuǎn)化為:
(12)
跟蹤注冊是將虛擬對象和真實世界中的事物對齊。目前有兩種跟蹤注冊方法,一種是人臉特征點跟蹤,將人臉特征點與虛擬眼鏡模型的某一點進行疊加[19];另一種是幾何變換關(guān)系跟蹤,把人臉的幾何圖形與虛擬眼鏡模型進行仿射變換,虛擬眼鏡模型隨著人頭部的運動而運動,并且做出相應(yīng)的透視變換,展現(xiàn)三維試戴效果[20]。前一種方法中,眼鏡模型不能隨用戶頭部運動而做出相應(yīng)的變化,用戶體驗效果不佳;后一種方法跟蹤效果較好,但如果頭部轉(zhuǎn)角過大,虛擬眼鏡變形失真情況比較嚴(yán)重。本文嘗試將上述兩種方法相結(jié)合,利用本文2.2節(jié)的人臉姿態(tài)估計方法得到的6個自由度,對眼鏡模型進行透視變換,并與人臉圖像疊加,得到立體變化,實現(xiàn)更為準(zhǔn)確的跟蹤。
圖10 人臉和眼鏡圖像上所取得的等腰三角形
圖10為人臉和眼鏡圖像上所取得的等腰三角形。如圖10所示,A為眼角位置,B為兩眼角間的中心位置,ABC是一個等腰直角三角形[21]。若3個點的坐標(biāo)是A(a1,a2) ,B(b1,b2)和C(c1,c2),在閾值提前通過實驗確定的情況下,眼鏡模型在臉上的位置C點的坐標(biāo)為:
C(c1,c2)=(b1-b2+a2,b1+b2-a2)。
(13)
眼鏡模型到眼部匹配通過式(14)進行仿射變換:
y′=dx+ey+f。
(14)
(15)
簡寫為?=Wλ,λ由最小二乘法計算得到:
λ=(WTW)-1。
這樣,眼鏡模型投射到臉部的位置即可確定。
圖11 人臉和眼鏡圖像上所取得的四邊形
仿射變換能夠跟蹤三維模型,但是由于仿射變換是基于3點的變換,具有平行性和平直性,跟蹤后眼鏡容易發(fā)生變形[22]。本文結(jié)合頭部姿態(tài)估計得到3個平移參數(shù)和3個旋轉(zhuǎn)參數(shù),對眼鏡實施透視變換,并與眼部特征點疊加融合,實現(xiàn)實時跟蹤效果。頭部轉(zhuǎn)動時,眼鏡的空間模型應(yīng)有一定的形變,這就需要通過對其做透視變換來實現(xiàn)。人臉和眼鏡圖像上所取得的四邊形如圖11所示。短邊AD旋轉(zhuǎn)后得到A′D′,設(shè)頭部旋轉(zhuǎn)角度為γ,r1為短邊AD平均每增大10個像素所增加的比例,r2為長邊AB平均每增大10個像素所增加的比例,則r1、r2根據(jù)式(16)確定:
(16)
本文的三維眼鏡模型在3dsMax2018軟件中建模,為了進行模型注冊,將模型導(dǎo)出為3DS格式的文件[8]。由于3DS 數(shù)據(jù)文件不能在OpenGL 中實時顯示,需要對3DS數(shù)據(jù)進行解析運算,運算結(jié)果由OpenGL的傳遞函數(shù)實時繪制[23]。
圖12 融合后的眼鏡試戴子系統(tǒng)總體結(jié)構(gòu)
虛實合成系統(tǒng)將虛擬眼鏡模型定位到現(xiàn)實世界中,本文通過標(biāo)識物和自然特征相互融合實現(xiàn)[23-24]。融合后的眼鏡試戴子系統(tǒng)總體結(jié)構(gòu)如圖12所示。
為了驗證技術(shù)的有效性,本文開發(fā)了一款移動平臺的“增強現(xiàn)實眼鏡試戴銷售系統(tǒng)”。實驗環(huán)境使用的操作系統(tǒng)是iOS9,開發(fā)環(huán)境是Xcode12,圖像庫是OpenCV和 MFC,腳本語言是Objective-C。
圖13 增強現(xiàn)實眼鏡試戴銷售系統(tǒng)軟件結(jié)構(gòu)
系統(tǒng)綜合運用了常用控件,并對控件進行重構(gòu)和優(yōu)化,提高了系統(tǒng)的運行效率;同時,大部分功能塊都經(jīng)過改造封裝,最大程度減少了第三方框架的應(yīng)用和依賴,以及維護過程的繁瑣[24]。系統(tǒng)分為8個模塊,實現(xiàn)了眼鏡商品的瀏覽、用戶注冊、登陸、收藏商品、添加購物車、用戶地址修改、購買商品、集成支付寶支付和訂單管理等功能。另外,還嵌入了眼鏡試戴、拍照、錄制視頻、上傳等功能,同時還可以分享到自己的社交平臺,供用戶瀏覽其他用戶的試戴效果,提供快速試戴同一款眼鏡等功能。增強現(xiàn)實眼鏡試戴銷售系統(tǒng)軟件結(jié)構(gòu)如圖13所示。
其中,商品瀏覽是系統(tǒng)的核心模塊,涵蓋了商品瀏覽、篩選、試戴、拍照、上傳與分享,試戴和快速試戴兩個子系統(tǒng)需要調(diào)用本文第2節(jié)和第3節(jié)的人臉識別與對齊算法。通過攝像頭捕捉到臉部數(shù)據(jù)進行處理,在捕捉人臉的時候,要求用戶將臉部放在手機前攝像頭正前方30~50 cm的位置。在試戴過程中,用戶不能背對光源,否則光線會干擾攝像頭的捕捉效果;當(dāng)攝像頭捕捉不到臉部數(shù)據(jù)的時候,系統(tǒng)會提示用戶調(diào)整臉部位置,用戶通過手勢在攝像頭的前方揮動,系統(tǒng)搭載的引擎會重新識別用戶臉部信息。
用戶通過點擊快速試戴按鈕,進入快速試戴模式,用戶將手機放在臉部前方30~50 cm的位置,讓臉部出現(xiàn)在手機屏幕中,系統(tǒng)會自動識別用戶的臉部數(shù)據(jù),給用戶戴上眼鏡,用戶通過滑動切換眼鏡,也可以點擊詳情按鈕,來查看商品詳情。眼鏡試戴詳細(xì)流程圖如圖14所示。
圖14 眼鏡試戴詳細(xì)流程圖
在實現(xiàn)眼鏡試戴時,使用了第三方oepnframeworks,并根據(jù)需求對類庫進行改造,封裝接口,增加系統(tǒng)的穩(wěn)定性,減少對第三方控件的依賴[21]。具體方法是,在openframeworks中調(diào)用其內(nèi)部封裝的Appdeleagte類,兼容iOS平臺的UIKit庫,調(diào)用引擎時初始化ofApp函數(shù),以加載眼鏡模型。試戴結(jié)果分析如表2所示。
表2 試戴結(jié)果分析表
表2中試戴次數(shù)是指不同人試戴的次數(shù),不一定是同一個人。由表2可知:當(dāng)人臉處于移動設(shè)備前方30~50 cm時,系統(tǒng)能夠自動識別用戶的臉部數(shù)據(jù),正視圖試戴正確率為100%;當(dāng)人體頭部旋轉(zhuǎn)、佩戴眼鏡、佩戴帽子等狀態(tài),或者光照不足時,匹配準(zhǔn)確率會有所降低,其原因是特征匹配準(zhǔn)確率下降導(dǎo)致試戴正確率受到影響,但總體的結(jié)果依然表現(xiàn)出較好的趨勢,說明系統(tǒng)具有一定的自適應(yīng)性。
本文研究了一種基于增強現(xiàn)實的自適應(yīng)在線虛擬眼鏡試戴技術(shù)。該技術(shù)利用移動設(shè)備自帶的單目攝像頭獲取人臉圖像信息,解決了系統(tǒng)實時性問題,也便于該技術(shù)的推廣應(yīng)用,人臉姿態(tài)估計和眼鏡透視變換解決了頭部轉(zhuǎn)動時試戴匹配問題,提高了系統(tǒng)的自適應(yīng)性。眼鏡試戴過程自然,用戶可以快速、逼真地查看鏡框樣式和顏色,提高了用戶體驗。研究結(jié)果稍加改進可應(yīng)用于服裝、發(fā)飾品、首飾、手提包、鞋類等其他商品在線銷售,未來具有更廣闊的應(yīng)用空間。