網紅直播時的瘦臉、磨皮等美顏功能是如何實現的?

  • 2020 年 3 月 17 日
  • 筆記

背景

隨著移動設備的發展,美顏已成為多媒體內容生成鏈路中不可缺少的一種基本能力,尤其是在來瘋直播秀場業務的場景下,主播的顏值就意味著生產力,直接影響主播及平台的收入。

美顏的目的就是要讓人看起來更美,包括皮膚細膩、白皙、光滑,臉部各個器官及臉型可以進行細緻的調整,通過美妝調節可以達到快速上妝的效果。為達成上述人臉美顏效果的訴求,我們從技術上主要通過如下四個關鍵步驟來實現:

技術實現

1. 獲取人臉關鍵點資訊

美顏處理依賴於人臉關鍵點,基於這些關鍵點,我們可以精準的知道臉部各個器官的位置資訊,從而進行美化處理:

首先,我們基於AliFace實現人臉關鍵點基本資訊的獲取,主要包括眉毛、眼睛、鼻子、嘴巴、臉部外輪廓這106個關鍵點;

其次,基於檢測出的106個關鍵點,我們需要對臉部關鍵點進行稠密化處理,插入額外的關鍵點,如額頭區域和臉部外圍限制區域,使其能夠覆蓋整個臉部區域;

最後,基於稠密化以後的人臉關鍵點,對其構建整張臉的三角網格,實現對整個臉部區域的三角剖分(Delaunay Triangulation),三角剖分將人臉切分成多個無重疊的三角區域,進而可以使用openGL或者D3D進行繪製渲染處理,從而實現對臉部器官的各種美化處理。基礎人臉關鍵點、稠密後人臉關鍵點、三角網格圖片分別見下圖:

2. 皮膚美化處理

皮膚美化處理主要包括磨皮和美白,磨皮需要把臉部皮膚區域處理得細膩、光滑,美白則需要將皮膚區域處理得白皙、紅潤。具體的處理模組見下圖:

其主要包含如下幾個關鍵步驟:

1)影像平滑

磨皮主要是通過使用保邊濾波器對臉部非器官區域進行平滑,達到臉部皮膚區域光滑的效果。一般來說常用的保邊濾波器主要有雙邊濾波、導向濾波、表面模糊濾波、局部均值濾波等,考慮到性能和效果的平衡,一般都採用雙邊濾波或者導向濾波。

雙邊濾波考慮了窗口區域內像素的歐式距離和像素強度差異這兩個維度,使得其在進行平滑時具有保護邊緣的特性。其優點是在GPU側計算量小,資源消耗低,其缺點是無法去除色差較大的孤立點,如痘痘、黑痣等,且磨皮後的效果較為生硬。

而導向濾波則是根據窗口區域內紋理的複雜程度來進行平滑程度的調節,在平坦區域趨近於均值濾波,在紋理複雜的區域則趨近於原圖,窗口區域內紋理的複雜程度跟均值和方差強相關,既能夠很好地處理平坦區域的各種噪點,又能較完整的保存好輪廓區域的資訊,且在GPU側的計算並不複雜,所以結合我們的業務需求,我們採用了引導濾波作為磨皮處理的保邊濾波器。導向濾波(Guide Filter)的演算法如下圖所示:

在磨皮這種場景下,導向濾波的引導圖即為原圖本身,並且其均值濾波的中間結果可用於後續的銳化處理以提升性能。

2)人臉ROI(Region of interest)處理

為了解決磨皮效果的精度和品質,我們標定了一個人臉美顏的遮罩圖片,該圖片的rgb三個通道分別對應臉部器官(眼睛、眉毛、鼻子、嘴等)區域的Mask1,法令紋區域和眼袋區域的遮罩Mask2,臉部高、低光區域的遮罩Mask3,高、低光遮罩的Mask3如下圖所示

通過人臉關鍵點資訊結合該遮罩圖片,利用三角剖分的方法實時生成與當前人臉所對應的臉部遮罩Mask,對經過平滑後的影像和原圖進行融合處理。Mask1會保護臉部各個器官不被平滑,保證了臉部磨皮區域的精準性,Mask2增強了法令紋區域和眼袋區域的磨皮程度,達到去除法令紋和眼袋的目的,Mask3則通過高、低光的處理使得磨皮後的五官更為立體。

之所以將上述三個遮罩mask合併成一張圖片,是為了降低在GPU側獲取像素值的頻次以達到提升性能的目的。與此同時,在非臉部區域通過膚色檢測實現對膚色區域磨皮,不是膚色的區域則拒絕被平滑,從而實現對整圖的磨皮處理。

3)紋理增強及膚色映射

磨皮後的影像在整體上被模糊化處理,使得整個影像不夠通徹透亮,所以需要再對其進行銳化處理。為提升性能,我們結合導向濾波過程中的均值濾波結果和人臉ROI區域mask,採用近似USM銳化的方式對影像進行增強,從而實現對紋理細節的凸顯。

為實現膚色美白,我們通過採用顏色查找表的方式來將膚色映射到理想的顏色範圍。顏色查找表基本原理如下所示:

其本質上相當於一個離散函數,給定任意的rgb顏色值,都可以在顏色查找表圖片中找到對應的顏色值內插出相應的轉換結果。美白顏色查找表的生成需要設計師根據膚色所處的大致顏色範圍,基於基準顏色查找表經過一系列的色彩調整後生成一張新的顏色查找表的圖片,如下圖所示左邊為基準顏色查找表,右邊為調色後的膚色美白顏色查找表。

上述就是皮膚美化的幾個重要步驟,經過皮膚美化後的效果對比圖如下:

3. 臉部器官美型處理

臉部美型處理主要包括臉型調整和臉部器官調整,實現上述功能的核心步驟是基於人臉關鍵點通過影像形變的形式來實現臉部各個器官的形狀調整。我們所採用的影像形變演算法主要是局部扭曲演算法和三角剖分,局部扭曲演算法一般包括局部縮放、局部平移、局部旋轉等,如大眼功能即可通過局部縮放來實現。三角剖分的方法則是通過對三角網頂點進行平移,再將平移後的頂點更新到對應的紋理坐標,通過openGL或者D3D進行繪製渲染,從而實現整個關聯三角網的變形。具體的臉部美型效果如下圖所示:

4. 美妝處理

美妝效果的好壞強依賴於素材模板精準的標定數據和準確的人臉關鍵點數據,具體的實現流程主要包括如下幾個步驟:

1)妝容素材的管理及解析。結合各種妝容及貼紙素材,我們構建了一套完整的繪製機制,根據對妝容效果描述文件(Json)的解析,結合頂點繪製規則對各個類型的素材進行繪製處理及融合。

2)素材模板和當前人臉器官進行對齊。素材的描述文件中存有相應的標定資訊,結合當前影像的人臉關鍵點,採用三角剖分的方式實現對素材模板的變形,達到與當前人臉器官對齊的目的。

3)不同器官的訂製化處理。由於不同器官的處理流程不一樣,需要針對不同的器官採用不同的處理方式。如美齒時需要結合牙齒區域的mask模板通過美齒顏色查找表實現牙齒區域顏色的調整;眉毛的處理則需先將當前影像的眉毛結合當前眉毛模板的素材進行眉毛區域的形變調整,同時將當前影像的眉毛部分進行減弱,再和對齊後的眉毛模板進行融合。

4)影像融合。由於素材模板和臉部器官的差異性,我們需要採取不同的融合方式來實現圖層的融合處理。如腮紅我們可以直接基於素材的半透明通道進行融合,修容處理則需採用高反差演算法進行融合處理。

當然,上述美妝處理的流程也適用於人臉2D貼紙。

結果及落地

性能方面,在iphone6p等中低端機型上,可實現720p 24fps 實時人臉美顏;效果方面,通過對皮膚的處理,可使人臉皮膚達到白皙細膩的效果,同時主播可按照自己的喜好對臉部的任意器官進行調整。目前人臉美顏功能已在來瘋直播(移動端和PC端)、優來播移動端及淘寶直播PC端落地,來瘋移動端主播日均開播人數實現一倍增長。具體的人臉美顏效果如下圖所示:

一些思考

1. 結合業務特性,建立"美"的標準。什麼是「美」,在人類的普世觀裡面是有個基礎標準的,但針對不同的歷史時期、地域、場景會有所差別,例如,東方人的審美觀點集中在:「三庭五眼」、「四高三低」、「中軸豐字布局」等,而在表演類的秀場場景下,則更會突出:「大眼」、「瘦臉」、「尖下巴」 、「膠質感皮膚」等,因此,結合我們的業務場景,用數學的方式定義「秀場」類的「美學」標準客觀評價體系,一方面幫助我們的用戶更簡單、快捷的進行美化處理。另一方面,為我們後續的迭代優化、完善研發工作提供數據支撐。

2. 妝容遷移。目前的美妝都是基於多個素材來實現,其開發成本相對較高。而妝容遷移可脫離對美妝素材的強依賴,降低開發成本。用戶只需選取一張好看的效果圖即可實現美妝,這是我們後續努力的方向。

參考文獻

【1】 https://www.ti.inf.ethz.ch/ew/Lehre/CG13/lecture/Chapter%206.pdf

【2】 http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html

【3】 http://kaiminghe.com/eccv10/index.html

【end】

Tags: