FaceSwap 是我最初為華沙理工大學「多媒體數學」學生們創建的應用程式。該應用程式是用 Python 編寫的,並使用面部對齊、高斯牛頓優化和圖像混合來將相機看到的人臉與提供的圖像中的人臉交換。
您可以在下面的影片中找到該程式功能的簡短示範(點擊即可前往 YouTube):
要啟動該程序,您必須執行名為 zad2.py 的 Python 腳本(練習 2 的波蘭語)。您需要安裝 Python 3 和一些附加程式庫。一旦 Python 安裝在您的電腦上,您應該能夠透過在儲存庫的根目錄中執行pip install -r requirements.txt
來自動安裝程式庫。
您還必須從這裡下載臉部對齊模型:http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 並將其解壓縮到主專案目錄。
Dropbox 上提供了更快、更穩定的 FaceSwap 版本。這個新版本基於深度對齊網路方法,如果在 GPU 上運行,該方法比目前使用的方法更快,並提供更穩定、更精確的臉部標誌。請參閱 Deep Alignment Network 的 GitHub 儲存庫以取得設定說明。
我希望盡快找到時間將這個更快的版本包含在儲存庫程式碼中。
該方法的概要如下:
首先,我們取得輸入影像(我們想要在自己的臉上看到的人的影像)並找到臉部區域及其標誌。一旦我們將 3D 模型擬合到這些地標(稍後會詳細介紹),投影到影像空間的模型的頂點將是我們的紋理座標。
一旦完成並且一切都初始化後,相機就開始捕捉影像。對於每個捕獲的影像,執行以下步驟:
整個過程中最關鍵的環節是3D模型的擬合。該模型本身包括:
使用以下方程式將模型投影到影像空間:
其中s是投影形狀, a是縮放參數, P是旋轉 3D 面部形狀的旋轉矩陣的前兩行, S_0是中性面部形狀, w_1-n是混合形狀權重, S_1-n是blendshapes, t是2D 平移向量, n是 Blendshape 的數量。
模型擬合是透過最小化投影形狀和局部地標之間的差異來完成的。使用高斯牛頓方法完成混合形狀權重、縮放、旋轉和平移的最小化。
程式碼獲得MIT許可,專案中的部分資料是從第三方網站下載的:
如果需要幫助或您發現該應用程式有用,請隨時告訴我。
Marek Kowalski [email protected],首頁:http://home.elka.pw.edu.pl/~mkowals6/