openface 人臉對齊 基本原理

2021-08-19 02:56:56 字數 1640 閱讀 9522

具體**請參考:

vector

arguments = get_arguments(argc, argv);

faceanalysis::faceanalyserparameters face_analysis_params(arguments);

face_analysis_params.optimizeforimages();

faceanalysis::faceanalyser face_analyser(face_analysis_params);

face_analyser.predictstaticausandcomputefeatures(captured_image, face_model.detected_landmarks);

人臉對齊主要為上面的predictstaticausandcomputefeatures函式,輸入引數為人臉影象及提取的68個人臉關鍵點。

函式內部和人臉對齊有關的有兩個函式,分別為:

1.

cv:

:vec6f params_global;

cv::mat_ params_local;

pdm.calcparams(params_global, params_local, detected_landmarks);

函式的作用是根據在當前人臉影象上的提取的關鍵點來估計旋轉、平移、縮放係數。

具體過程為:根據當前人臉關鍵點的位置可以得到人臉影象的寬高,將openface定義的68個標準3維人臉關鍵點投影到2維以獲取基準模型的二維寬高,計算兩者之間的大小係數得到影象的縮放係數;

設定平移量為當前人臉roi影象的中心座標;

根據當前初始的旋轉及平移量將基準3d人臉關鍵點座標對映到2維,計算對映後的2維基準點與當前人臉關鍵點之間的誤差歐氏距離,然後設定最大迭代次數,以減小前述歐氏距離為參考,迭代優化r和t,當誤差歐氏距離值基本不變或者達到最大迭代次數時停止迭代,得到當前人臉影象與基準人臉影象之間的最優旋轉矩陣r和平移量t。

2.

alignfacemask(aligned_face_for_au, frame, detected_landmarks, params_global, pdm, triangulation, true, align_scale_au, align_width_au, align_height_au);
執行該函式得到對齊後新增掩模之後的人臉影象。

各引數含義:aligned_face_for_au為對齊後人臉影象;frame為輸入影象;detected_landmarks為檢測到人臉關鍵點;params_global為pdm.calcparams函式得到的最優旋轉和平移、縮放係數;pdm, triangulation, true, align_scale_au, align_width_au, align_height_au為openface預設量,從模型中讀取得到。

函式的計算過程為對於3維基準點乘以縮放係數,忽略掉z軸,計算68個關鍵點中左右面部邊緣、鼻子、左右眼睛相關的基準點與當前人臉上提取的對應關鍵點之間的旋轉矩陣,使用了方法。計算出平移量,然後將區域向上移動至包含眉毛區域,然後基於triangulation來判斷對應掩模中每乙個點是否應該保留。然後將掩模與變換後的影象進行與,得到對齊後的人臉掩模影象。

本部分內容看的比較粗糙,歡迎批評指正。

使用OpenFace進行人臉識別 1

input image detect 輸入 原始的可能含有人臉的影象。輸出 人臉位置的bounding box。這一步一般我們稱之為 人臉檢測 face detection 在openface中,使用的是dlib opencv現有的人臉檢測方法。此方法與深度學習無關,使用的特徵是傳統計算機視覺中的方...

人臉對齊介紹

1 五官定位 2 表情識別 3 人臉漫畫 素描生成 4 增強現實 5 換臉 6 3d建模 給定人臉區域 i,從該區域出發,根據一定的規則 f,找到特徵點位置 x。即 x f i 所以,人臉對齊演算法便是設計函式 規則 f,f的優劣變體現在擬合效果 執行效率 引數儲存空間 泛化能力 即適應資料集以外的...

自動人臉識別基本原理

特徵臉方法利用主分量分析進行降維和提取特徵。主分量分析是一種應用十分廣泛的資料降維技術,該方法選擇與原資料協方差矩陣前幾個最大特徵值對應的特徵向量構成一組基,以達到最佳表徵原資料的目的。因為由主分量分析提取的特徵向量返回成影象時,看上去仍像人臉,所以這些特徵向量被稱為 特徵臉 在人臉識別中,由一組特...