# 基於Javascript臉部追蹤器-clmtrackr <!-- ![](https://i.imgur.com/CyeJO1h.gif) --> 相傳有開發者基於 [OpenGL](https://www.opengl.org/) 的 [Live2D](https://www.live2d.com/en/) 的原始源代碼開發的一個小功能, <!-- 上圖為彩虹社(v企業)使用Live2D軟體臉部追蹤成效,利用優良的經營能力與精美的皮,瘋狂吸取眾多宅宅的$$$。 --> # clmtrackr是什麼: 一個用於將面部模型擬合到圖像和影片的Javascript 函式庫,可以獲取圖像或影片中面部特徵的精確位置,應用的層面包含情緒偵測、面部遮蓋和人員辨識。(BY 官方) # clmtrackr運作原理: CLMtrackr 基於 Jason Saragih 和 Simon Lucey 在[通過子空間約束均值偏移進行人臉對齊Face Alignment through Subspace Constrained Mean-Shifts](https://www.ri.cmu.edu/pub_files/2009/9/CameraReady-6.pdf)描述的演算法。 ## 定義面部模型追蹤點 而此演算法的目標是通過將近似初始化將面部模型擬合到圖像或影片面部,面部模型由70個點組成。 ![](https://i.imgur.com/sp6WqzB.png) ## 分類器抓取區域擬合 並將70個小分類器擬人臉模型,分類器會在每個點周圍搜索一個局部(小區域)以獲得更好的擬合如下圖,模型給出最佳擬合方向逐漸移動收斂到最佳。 ![](https://i.imgur.com/H8caJlU.jpg) ## 如何進行建模模型訓練 ### 標記人臉特徵點 使用[MUCT](http://www.milbo.org/muct/)數據庫中的標註(稍作修改)以及手動標註一些人臉特點 ![](https://i.imgur.com/QXN6VSW.png) ### 從特徵點建構模型 1. 使用PCA(主成分分析)計算所有註釋平均點 2. 使用PCA將人臉的變化提取為向量的分量的線性組合,按重要性順序提取,每個分量可以分析面部變化 3. PCA提取第一個組件涵蓋姿勢的基本變化:張開嘴包與微笑等 4. 將面部姿勢建模為平均點加上加權與標準差 > [PCA](https://medium.com/ai%E5%8F%8D%E6%96%97%E5%9F%8E/preprocessing-data-%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90-pca-%E5%8E%9F%E7%90%86%E8%A9%B3%E8%A7%A3-afe1fd044d4f):一種數據降維算法,其目的為了抽象化特徵減少冗餘得資訊 ### 總之 模型總共有70個分類器,會在帶註釋的面部圖像以參考點標註位置為中心裁減 X x X 補丁,然後再將補丁用作訓練分類器的輸入 ![](https://i.imgur.com/tAVmhqV.png) 作者採用[SVM](https://ithelp.ithome.com.tw/articles/10270447)分類器以及[MOSSE篩選](https://www.twblogs.net/a/5bddcf5e2b717720b51ad9bb),而在使用這些分類器擬合模型時,在每個初始位置周圍裁剪一個搜索窗口,並將相應的分類器應用在搜索窗口內的 Y x Y像素網格得到像素中每個作為對齊特珍點的概率。 ### 初始化和檢查訓練模型 ``` 需要注意:使用的搜索框很小,如果模型超出範圍則模型框就無法適應人臉 ``` Step 1:人臉偵測器找到人臉的初略邊界框 Step 2:通過相關濾波器識別眼睛和鼻子的大致位置 Step 3:使用procrustes 分析將平均面部模型大致擬合到找到的眼睛和鼻子的位置作為模型的初始位置 Step 4:使用補釘相同的分類器進行檢查模型是否偏離圖像人臉太遠,若模型不在臉上將初始化人臉偵測。 總之過程如: ![](https://i.imgur.com/w1ziUN0.gif) # 程式碼展示Time! [歡迎git pull](https://github.com/MING-CHUNLee/2Dlive.git) 資料來源 [函式庫的Github](https://github.com/auduno/clmtrackr) [原文網址](https://www.auduno.com/2014/01/05/fitting-faces/) ###### tags: `分享`!