王曉鋒,付東翔
(上海理工大學(xué) 光電信息與計算機工程學(xué)院,上海 200093)
隨著互聯(lián)網(wǎng)購物的普及,增強用戶的購物體驗已經(jīng)成為計算機應(yīng)用的一個熱門課題。虛擬試戴眼鏡的應(yīng)用允許用戶在網(wǎng)上選擇眼鏡進行試戴,不需要去線下實體店,提高了用戶的購物體驗。
目前,虛擬佩戴技術(shù)根據(jù)輸入眼鏡和人臉形式主要分為4類。第1類技術(shù)基于二維圖像,例如文獻[1]將眼鏡圖像佩戴到人臉圖像上。這種方法相對簡單,佩戴效果可接受,但只能處理正視角的人臉圖像,不能真實反映用戶真實的動態(tài)佩戴效果。第2類技術(shù)是將三維眼鏡模型佩戴到人臉圖像上,例如文獻[2]使用三維眼鏡模型代替眼鏡圖像,可以幫助系統(tǒng)處理多個視角的人臉圖像,但需要解決鏡腿的遮擋問題。第3類是將三維眼鏡模型佩戴到重建的三維人臉模型,例如文獻[3~5]解決了鏡腿的遮擋問題,但重建三維人臉[6]是一個挑戰(zhàn),而且重建的三維人臉模型缺乏現(xiàn)實感。第4類是基于視頻流的現(xiàn)實增強技術(shù),例如文獻[7~8],但試戴者必須配備攝像頭,靈活性和便捷性欠佳。
本文結(jié)合人臉關(guān)鍵點檢測和凸包算法提出了一種新的鏡腿遮擋方法,能解決三維眼鏡模型試戴到人臉圖像上鏡腿的遮擋問題?;谠缙谘芯咳藛T的研究成果,本文提出了一種基于特征點檢測和姿態(tài)估計的虛擬佩戴技術(shù),實現(xiàn)了真實的虛擬佩戴。本文所提系統(tǒng)的總體流程圖如圖1所示。
圖1 虛擬試戴系統(tǒng)流程圖Figure 1. Flow chart of virtual trial system
構(gòu)建人臉形狀的三維模型是基于人臉關(guān)鍵點檢測來實現(xiàn)的。通過對人臉關(guān)鍵點進行凸包運算,得到人臉的凸多邊形,再通過平移掃描得到人臉形狀的三維模型。
本文中,人臉關(guān)鍵點檢測采用級聯(lián)的回歸樹[9]來實現(xiàn)人臉對齊。這種方法屬于回歸級聯(lián)方法,將圖像稀疏的像素強度子集作為特征,用回歸樹集合從中直接估計出人臉特征點的位置,進而對輸入的圖像進行人臉檢測[10];然后標(biāo)記出人臉的外輪廓、眼睛、鼻子、嘴巴、眉毛區(qū)域的關(guān)鍵點。如圖2所示,用圓點標(biāo)注的點即為檢測出的關(guān)鍵點。
圖2 人臉關(guān)鍵點Figure 2. Key points of the face
該關(guān)鍵點檢測算法使用級聯(lián)回歸來建立數(shù)學(xué)模型,其迭計算式為
S′(t+1)=S′(t)+rt(I,S′(t))
(1)
式中,S是形狀向量,存儲著臉部所有關(guān)鍵點的位置信息;S′(t)表示對形狀向量的估計;rt是一個回歸器;t是級聯(lián)序號。
在rt內(nèi)部的回歸過程中,采用梯度樹提升法[11]得到一系列的回歸樹來完成回歸。
在回歸訓(xùn)練中,數(shù)據(jù)集合是(I1,S1),…,(In,Sn),其迭代為
S′i(t+1)=S′i(t)+rt(Iπi,S′i(t))
(2)
ΔS′i(t+1)=Sπi-S′i(t+1)
(3)
本文將包含一個平面散點集的最小凸多邊形(區(qū)域內(nèi)任意兩點的連線總在區(qū)域內(nèi))稱為點集的凸包。本文采用Graham掃描法[12]對人臉關(guān)鍵點集合求運算,該算法運行速度快,得到的人臉的凸多邊形效果較好。根據(jù)章節(jié)1.1中求得的人臉檢測的關(guān)鍵點,本文選擇人臉外輪廓的關(guān)鍵點作為輸入。Graham掃描法的運算步驟如下,其中n是輸入的人臉關(guān)鍵點數(shù),Q為關(guān)鍵點點集,St為堆棧,存儲凸包上的關(guān)鍵點:
步驟1在平面關(guān)鍵點點集中找出縱坐標(biāo)最小的點,記為q0,已知該點是凸包上的一個點;
步驟2將點集Q中除q0以外的點以q0為坐標(biāo)原點,轉(zhuǎn)化剩余點的坐標(biāo);
步驟3以q0作為原點,計算剩余點對于q0點的幅角;
步驟4按照幅角大小的升序,重新排序點集Q后,記為Q′={q0,q1,…,qn-1};
步驟5初始化堆棧St,其中令St(0)=qn-1,St(1)=q0;初始化棧頂指針Stp指向第2個元素q0,點集Q’中元素的下標(biāo)記為m,令m=0;
步驟6若m≥n,算法結(jié)束;
步驟7假設(shè)當(dāng)掃描到Q′中下標(biāo)為k的點Q′[k]時,此時St[j]是棧頂?shù)脑?,St[i]是其上一個的元素,判斷St[i]、St[j]、Q′[k]這3個關(guān)鍵點形成的路徑是左旋還是右旋。若為左旋,說明Q′[k]是凸包上的點,把這個點壓入棧中,繼續(xù)掃描點集Q′的下一個點,令Stp = Stp+1,St[Stp]=Q′[k],m=m+1,然后跳轉(zhuǎn)到步驟6。若為右旋,說明St[j]不是凸包上的點,把St[j]彈出堆棧,此時掃描點仍為Q′[k],令Stp = Stp-1,跳轉(zhuǎn)到步驟6。
經(jīng)過以上的Graham算法步驟,得到人臉形狀的凸多邊形,將凸多邊形輪廓內(nèi)的區(qū)域作為填充區(qū)域,進行圖元填充后得到凸多邊形平面。本文采用掃描表示法[13]來構(gòu)造人臉形狀的三維模型。掃描表示法是一種通過平移、旋轉(zhuǎn)及其他對稱變換來構(gòu)造三維模型的方法。通過指定一個二維圖像,在空間區(qū)域內(nèi)移動該圖像的掃描可以表示一個三維模型。例如,把一個圓形圖像作為輸入,輸出的是一個圓柱體的三維模型。根據(jù)以上得到的人臉形狀的平面,把其作為輸入,執(zhí)行一次平移掃描,即沿垂直平面的直線路徑移動一定距離。在沿這條路徑的區(qū)間上,復(fù)制平面的形狀,并在掃描的方向上畫出連線,得到了人臉形狀的三維模型。如下圖3所示為人臉形狀三維模型生成的結(jié)果,其中圖3(a)是輸入的人臉圖像,圖3(b)是人臉形狀凸多邊形,圖3(c)是人臉形狀三維模型。
圖3 人臉形狀三維模型的結(jié)果(a)圖像 (b)凸包 (c)模型Figure 3. Result of 3D model of face shape(a)Image (b)Convex hull (c)Model
頭部姿態(tài)估計是以人臉圖像作為輸入,對頭部姿態(tài)參數(shù)進行估計的方法。姿態(tài)角的形式是一個三維矢量,其值代表繞3個軸(x、y、z)的旋轉(zhuǎn)角度,稱為滾動、俯仰、偏航。
姿態(tài)估計的算法大致可以分為兩類:第1類是基于外觀的算法;第2類是基于模型的算法[14]?;谕庥^的方法是將新的頭部姿勢圖像與模板聯(lián)系起來,利用深度圖像[15]確定實時的頭部姿態(tài)估計。但該方法需要像kinect的深度相機[16]來獲取深度圖像,深度相機價格昂貴,適用的范圍小,不適合虛擬眼鏡試戴的應(yīng)用。基于模型的算法需要三維標(biāo)準(zhǔn)的人臉模型,其原理是旋轉(zhuǎn)三維標(biāo)準(zhǔn)人臉模型,使模型上的三維體征點投影盡可能與輸入圖像的特征點重合。本文采用是基于模型的姿態(tài)估計算法,在章節(jié)1.1中,已經(jīng)求得人臉上的關(guān)鍵點,選取其中如圖4所示的關(guān)鍵點(外眼角、鼻尖、嘴巴的兩側(cè)、下巴的最下端),采用非線性最小二乘法進行建模,計算式為
圖4 人臉姿態(tài)估計關(guān)鍵點Figure 4. Key points of face pose estimation
(4)
式中,α、β、γ分別代表面部姿態(tài)角的3個分量;n代表特征點數(shù);qi是待測人臉的特征點;pi是人臉特征點在三維人臉模型上對應(yīng)的特征點;R是旋轉(zhuǎn)矩陣;t是平移向量;C是收縮因子。
為了增強虛擬試戴的真實感和現(xiàn)實感,本文采用的3D眼鏡模型是fbx格式的。fbx模型由3ds Max軟件生成,通過3ds Max軟件的繪制,可以得到各式各樣的3D眼鏡模型。本文的工作是3D眼鏡模型的虛擬試戴,從3ds Max中構(gòu)建的三維眼鏡模型如圖5所示。
圖5 3ds Max中的眼鏡模型(a)模型1 (b)模型2 (c)模型3 (d)模型4Figure 5. Models of glasses in 3ds Max(a)Mode l (b)Mode 2 (c)Model 3 (d)Model 4
將fbx格式的眼鏡模型導(dǎo)入到虛擬試戴系統(tǒng)時,需要對眼鏡模型進行解析和重構(gòu),將模型中的頂點、線、面、紋理坐標(biāo)、材質(zhì)信息等數(shù)據(jù)傳輸?shù)较到y(tǒng)中,可以準(zhǔn)確地繪制出3D眼鏡模型。
眼鏡模型若要準(zhǔn)確地佩戴到人臉圖像上,則需要對齊到空間中的一個位置和做相應(yīng)的變換,其中變換包括旋轉(zhuǎn)變換和縮放變換。由于人臉圖像是一個二維圖像,不包含深度信息,因此將眼鏡模型與人臉圖像的佩戴問題轉(zhuǎn)化為眼鏡模型和人臉形狀的三維模型之間的關(guān)系?;谌四橁P(guān)鍵點檢測的結(jié)果,本文選擇人臉圖像上鼻子根部的一個關(guān)鍵點的垂直方向向上兩個單位的點Fn(如圖6(a))作為佩戴點,同時選擇眼鏡模型中的Gn(如圖6(b))作為支撐點,如圖6所示。
圖6 眼鏡試戴定位點(a)人臉關(guān)鍵點 (b)眼鏡關(guān)鍵點Figure 6. Registration point for fitting glasses(a)Key point of face (b)Key point of glasses
在三維空間中對物體的旋轉(zhuǎn)變換有多種表達方式,例如歐拉角、旋轉(zhuǎn)矩陣、四元數(shù)、旋轉(zhuǎn)向量等。其中,歐拉角是最直觀的表達方式,其含義是繞眼鏡模型自身的3個軸(x、z、y)分別旋轉(zhuǎn)某個角度。基于人臉姿態(tài)估計的結(jié)果,得到人臉圖像在6個自由度上的偏轉(zhuǎn)歐拉角(滾動、俯仰、偏航)。根據(jù)歐拉角,旋轉(zhuǎn)眼鏡模型,設(shè)定滾動角是α,俯仰角是β,偏航角是γ,旋轉(zhuǎn)變換如式(5)所示。在虛擬試戴過程中,根據(jù)人臉大小來縮放三維眼鏡模型,縮放計算式如式(6)所示。
R(α,β,γ)=Rx(α)Ry(β)Rz(γ)
(5)
其中
(6)
式中,Sx、Sy、Sz分別是x、y、z軸的縮放參數(shù);P′是變換后的三維模型矩陣;P是原來三維模型矩陣。
在真實的三維空間中,眼睛看到的畫面是沿著視線投影的結(jié)果,物體間存在著互相遮擋的關(guān)系,例如從側(cè)面觀察佩戴眼鏡者,佩戴者另一側(cè)的眼鏡鏡腿是被遮擋的,是看不見的。但是,在虛擬試戴的系統(tǒng)中,由于人臉圖像不包含深度信息,當(dāng)試戴三維眼鏡模型的時,被頭部遮擋的眼鏡模型不會被消隱,自然的投影不能實現(xiàn)遮擋眼鏡的作用。
目前較好地解決鏡腿遮擋問題的方法是根據(jù)人臉圖像實時渲染出一個三維的人臉模型,利用深度緩沖檢測[12]消隱鏡腿,但是構(gòu)造三維人臉模型計算復(fù)雜且對設(shè)備的要求較高。本文中構(gòu)造的人臉形狀三維模型代替了人臉模型,實現(xiàn)了鏡腿遮擋的佩戴效果。
首先,創(chuàng)建一個三維的空間場景,依次導(dǎo)入人臉圖像、人臉形狀的三維模型、三維眼鏡模型,將人臉形狀的三維模型貼合到人臉圖像上,根據(jù)人臉關(guān)鍵點定位和三維眼鏡模型的變換進行佩戴工作,并利用深度緩沖檢測消隱眼鏡被遮擋的部分;然后設(shè)置人臉形狀的三維模型透明度為0,通過攝像機的投影輸出虛擬試戴效果圖。實驗結(jié)果證明,上述遮擋處理方法可靠,佩戴效果逼真。遮擋處理的實驗如圖7所示,圖7(a)是未進行鏡腿遮擋處理的實驗結(jié)果圖,圖7(b)是進行鏡腿遮擋處理的實驗結(jié)果圖。
圖7 鏡腿遮擋前后對比圖(a)遮擋問題 (b)解決遮擋Figure 7. Comparison of mirror leg before and after occlusion(a)Occlusion problem (b)Occlusion is handled
實驗中的人臉圖像是相機從多個角度拍攝而來的,包含人臉的多個視角,其偏航角度范圍控制在-58°~65°,俯仰角度范圍在-74°~76°,翻滾角度范圍在-38°~45°。角度過大易導(dǎo)致人臉關(guān)鍵點檢測失敗,無法進行虛擬試戴的工作。因此,本文在求人臉凸多邊形時,舍去了人臉輪廓內(nèi)的關(guān)鍵點,僅計算人臉外輪廓的關(guān)鍵點的凸包。實驗表明,人臉圖像在水平方向上的角度范圍在-26°~26°時,通過外輪廓關(guān)鍵點求得的凸包形狀和人臉全部關(guān)鍵點求得的凸包形狀一致。當(dāng)人臉?biāo)浇嵌炔辉谶@個范圍時,眼睛和眉毛部位的關(guān)鍵點和外輪廓的關(guān)鍵點較近,導(dǎo)致凸包形狀和人臉全部關(guān)鍵點求得的凸包形狀有小范圍的偏差,但是不影響最后的佩戴結(jié)果。以下是不同大小的人臉圖像虛擬試戴實驗數(shù)據(jù),其中凸包運算時間、人臉形狀的三維模型構(gòu)建的平均消耗時間如下表1所示。
表1 系統(tǒng)運行平均消耗時間表Table 1. Average cost schedule for system operation
為了測試鏡腿遮擋效果的效果,實驗中將輸入人臉圖像分為3組:第1組偏航角度在-5°~5°,作為人臉正臉圖組;第2組偏航角在-58°~-5°,作為右臉圖組;第3組偏航角在5°~65°,作為左臉圖組。實驗中定義遮擋誤差率為輸出圖像中被遮擋鏡腿的水平偏差像素與實際應(yīng)露出鏡腿的水平像素之比。實驗數(shù)據(jù)如下表2所示。
表2 鏡腿遮擋準(zhǔn)確度Table 2. Mirror leg occlusion accuracy
由表1可知,在舍去人臉內(nèi)輪廓的關(guān)鍵點之后,獲得的人臉凸包和人臉形狀的三維模型運行速度都有所提高。
由表2可知,本實驗方法的遮擋誤差小,遮擋精度高,符合虛擬試戴的要求。
實驗中,將本文的姿態(tài)估計方法與其他方法例如PRNet[6]進行運算速度比較。如表3所示,本文姿態(tài)估計算法具有明顯的速度優(yōu)勢。
表3 不同方法的頭部姿態(tài)估計運行速度Table 3. Running speed of different head pose estimation methods
為了驗證本文方法的效果,將本文所提出方法的虛擬試戴結(jié)果和其他虛擬試戴方法的結(jié)果進行比較。文獻[3~5]涉及到人臉三維重建的技術(shù),計算量大而且不容易實現(xiàn),重建出來的三維人臉缺少真實的紋理信息,使得佩戴效果不具有真實感。文獻[1]是根據(jù)二維圖像的操作,不能實現(xiàn)多角度的人臉圖像的佩戴功能,而且鏡腿的遮擋問題沒有得到有效解決。本文不需要進行復(fù)雜的三維人臉重建,而且針對多角度的人臉圖像解決了鏡腿的遮擋問題,實現(xiàn)了眼鏡的真實佩戴效果。圖8和表4是本文實驗結(jié)果和其他方法的結(jié)果對比。其中圖8(a)是文獻[2]的實驗結(jié)果圖,圖8(b)是文獻[8]的實驗結(jié)果圖,圖8(c)是文本實驗結(jié)果圖。
表4 不同方法的虛擬試戴對比Table 4. Virtual try - on comparison of different methods
圖8 (a)雖然沒有出現(xiàn)鏡腿遮擋人臉的情況,但人臉圖像的另一側(cè)不能看到露出的部分鏡腿(圖8(a)左側(cè)圖片中沒有露出左邊的部分鏡腿,右側(cè)圖片中沒有露出右邊的部分鏡腿),并沒有解決鏡腿的遮擋問題。圖8(b)中,眼鏡大小不夠精準(zhǔn),出現(xiàn)了鏡框遮擋鼻子的問題,而且人臉另一側(cè)的鏡腿完全消失,沒有解決鏡腿遮擋問題。本文的實驗結(jié)果表明,在虛擬試戴眼鏡過程中解決了鏡腿遮擋的問題,人臉另一側(cè)的鏡腿露出適當(dāng)長度,增加了虛擬試戴的真實感。
(a)
(b)
(c)圖8 實驗對比 (a)文獻[2]方法 (b)文獻[8]方法 (c)本文方法Figure 8. Comparison of experiments(a)Method from reference[2] (b)Method from reference [8] (c)The proposed method
實驗中采用不同眼鏡模型對虛擬試戴系統(tǒng)進行測試,測試結(jié)果如圖9所示。
圖9 試戴不同眼鏡的效果圖(a)效果1 (b)效果2 (c)效果3Figure 9. Result of trying on different glasses(a)Result 1 (b)Result 2 (c)Result 3
本文基于人臉圖像的關(guān)鍵點檢測,提出了一種新的鏡腿遮擋方法,根據(jù)人臉關(guān)鍵點生成人臉形狀的凸多邊形,通過平移掃描得到人臉形狀的三維模型,在空間中對眼鏡模型做相應(yīng)變換,并將其佩戴到人臉上,利用深度緩沖檢測實現(xiàn)鏡腿消隱的作用。實驗結(jié)果表明,虛擬試戴中鏡腿的遮擋精度高,虛擬試戴效果逼真,并且對多視角的人臉圖像完成佩戴工作有較好的動態(tài)展示效果。實驗中利用圖形學(xué)方法生成的人臉凸包和人臉三維模型速度較快,能較好地滿足虛擬試戴的要求,使線上用戶有較好的購物體驗,因此本文研究具有一定的應(yīng)用價值。本文方法也適用于其他虛擬試戴場景,例如虛擬試戴帽子、頭戴式耳機、頭巾等物品,試戴過程中能對物品起到遮擋的效果,使得佩戴效果更具有真實感和現(xiàn)實感。當(dāng)前虛擬試戴領(lǐng)域研究較少,下一步的研究工作將集中在以下3個方面:(1)提高人臉圖像的關(guān)鍵點檢測精度,進而提高佩戴眼鏡的精準(zhǔn)度;(2)提高人臉檢測視角的范圍,使得人臉在大角度偏轉(zhuǎn)的情況下,仍然實現(xiàn)虛擬試戴工作;(3)將本文方法推廣到更廣泛的應(yīng)用場景,發(fā)揮更大的應(yīng)用價值。