人臉美顏技術

2021-09-28 16:13:38 字數 3481 閱讀 3807

「美顏」是乙個深度學習+影象處理+圖形學的技術。「美顏」牽涉到這些技術包括:人臉檢測、人臉關鍵點定位、瘦臉、磨皮、美白等。其中,人臉檢測、人臉關鍵點定位是用深度學習技術來做的;而瘦臉、磨皮和美白就牽涉到計算機圖形學裡的技術,使用opengl,metal來對檢測到的人臉進行渲染。

人臉檢測技術指的是對中的人臉進行檢測,並定位到中人臉的位置。人臉檢測主要的技術難點在於,人臉在一張中可能存在人臉區域光照條件,人臉姿態變化、人臉表情變化、遮擋等問題。準確的檢測出人臉相對來說是一件困難的事情。

人臉檢測也可分為兩個時期:乙個是深度學習之前的時期,另乙個是深度學習時期。在深度學習之前,人們做人臉檢測,主要使用人工設計好的特徵,根據人工特徵來訓練檢測器檢測人臉。當深度學習在計算機視覺領域佔據絕對主導地位之後,人們開始嘗試用深度神經網路來做人臉檢測,目前,主流的人臉檢測方法大概有這麼兩種:一種是使用通用的目標檢測網路來訓練人臉檢測模型,如faster-rcnn(一種目標檢測網),ssd (single shot multibox detector),yolo (you only look once) 等等;另一種是使用專門的人臉檢測網路,如cascadecnn(convolutional neural network cascade for facedetection,級聯結構的卷積神經網路,一種目標檢測網路),mtcnn(multi-task cascaded convolutional neural network,多工級聯卷積神經網路)等等。             

人臉關鍵點定位技術同人臉檢測技術一樣,在實際應用中,也存在人臉的尺度、光照、表情、姿態、遮擋等問題。要對絕大多數獲得準確的人臉關鍵點,也是乙個比較難的任務。   

下圖展示了人臉檢測技術和人臉關鍵點定位技術的應用。

有了關鍵點以後,便可以對中人臉區域做瘦臉、磨皮、美白等「美顏」操作。這些演算法一般應用在移動裝置上:在android上可以使用opengl es(opengl for embedded systems,嵌入式系統的opengl),在ios上可以使用metal根據人臉關鍵點的位置,對人臉進行瘦臉、磨皮、美白之類的渲染。

在opengl或metal環境下,在shader(紋理)中通過對畫素位置進行偏移來實現對臉部區域的放大縮小:由變形前座標,根據變形對映關係,得到變形後坐標。這其中變形對映關係是最關鍵的,不同的對映關係,將得到不同的變形效果。平移、縮放、旋轉,對應的是不同的對映關係,即不同的變換公式。當然實際在計算過程中,用的是逆變換,即由變形後坐標,根據逆變換公式反算變形前座標,然後插值得到該座標rgb畫素值,將該rgb值作為變形後坐標對應的畫素值。這樣才能保證變形後的影象是連續、完整的。             

膚色檢測可分兩大類,一類是用顏色空間統計資訊,來計算出**所在的區域,另一類是基於機器學習的方法。傳統方法是基於ycrcb顏色空間cr,cb範圍篩選法。深度學習方法有cnn、fcn、unet、densenet,文獻中用的較多的就是unet(convolutional networks for biomedical image segmentation)。   濾波演算法一般可以使用高斯濾波或者雙邊濾波等。   

的美白,是操作這個上的所有畫素點,獲得畫素點的r、g、b、a的值然後獲取到的值進行一定數目的增量。在影象處理領域中,一張會使用三原色 red、green、blue來儲存的顏色資訊,三個值的取值範圍是0-255:越靠近0,影象就越黑,等於0的時候就是純黑色;越靠近255,影象就越白,等於255的時候就是白色。的美白就是利用的這個原理。   

如下是我使用ycrcb顏色空間cr範圍篩選法方法進行膚色檢測,一次雙線性插值進行磨皮,調整畫素值進行美白後得到的美顏後的,cpu耗時33ms。

# 對cr通道分量進行高斯濾波

img_cr = cv2.gaussianblur(img_cr, (5, 5), 0)

# 膚色檢測

_, skin = cv2.threshold(img_cr, 0, 255, cv2.thresh_binary + cv2.thresh_otsu)

# 美白

image[np.where(skin)] = np.clip((whi * image[np.where(skin)] + 10), 0, 255)

#雙線性濾波 磨皮

image = cv2.bilateralfilter(image, 20, 50, 50)

white = np.uint8(image)

print(time.time()-st)

cv2.imshow('bai',white)

cv2.waitkey(0)

真正要做好美顏演算法,需要用到深度學習裡面的人臉檢測、人臉關鍵點定位(最少68個關鍵點)、人臉膚色檢測(unet等,傳統的膚色檢測演算法不夠細膩)這三個模型,目前已有人臉檢測模型(mtcnn)。人臉關鍵點定位用於瘦臉、大眼等操作。膚色檢測用於磨皮和美白階段,防止對非**進行模糊。   

研究者們不侷限於美顏,研究美妝演算法,增強使用者體驗。代表性的研究有psgan(pose-robust spatial-aware gan for customizable makeup transfer),ladn(local adversarial disentangling network for facial makeup and de-makeup)等。親測可用的美妝**具體效果如下圖。           

部落格:github:

人臉識別在美顏相機的應用

如今智慧型手機的不斷普及更新,也有越來越多的軟體加入各種人工智慧技術,讓人們在使用時有更好的體驗。比如說,在美顏相機中應用人臉識別技術,增加使用者的互動。智慧型相簿管理 使用人臉識別技術對相簿裡的人臉進行檢測識別分類,可以自動分類,便於使用者查詢以及刪除。智慧型美顏 可通過對人的五官進行精準定位,為...

機器視覺之AR美顏人臉識別專案設計

3 資料的反饋 在部分標註過程後,交於演算法同事訓練模型調節引數,期間將測試後的資料 精確率和召回率的計算,來反映資料的標註結果 反饋給還在標註的人員,有時可能造成過擬合有時可能造成欠擬合等方便對資料進行重新操作。4 專案流程跟蹤 1 產品立項後,每天的任務管理,流程進度跟蹤,產出時間管理,開會反饋...

人臉技術瓶頸

人臉識別之所以沒有的到廣泛運用,主要原因是對技術要求和裝置成本投入非常高,加之國外已經對相關技術形成壟斷,以及傳統的人臉識別技術無法適應使用環境的變化例如 光線 姿態 表情等不同的變化因素,導致人臉識別長時間無法普及應用。所以在實際應用中,要注意以下幾個重要問題 年齡變化 不同年齡的人臉有較大的差別...