1. 程式人生 > >Python+OpenCV實現實時視訊3D換臉

Python+OpenCV實現實時視訊3D換臉

目錄

 

開發環境

執行機制

案例效果

案例下載


  • 開發環境

  1. Python 2.X或Python3.X
  2. OpenCV
  3. NumPy
  4. DLIB
  5. pygame
  6. PyOpenGL
  7. 必須從此處下載面部對齊模型:http//sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2並將其解壓縮到主專案目錄。
  • 執行機制

首先,我們獲取輸入影象(我們想要在自己的臉上看到的人的影象)並找到面部區域及其地標。一旦我們得到了我們將3D模型擬合到那些地標(稍後更多),投射到影象空間的模型的頂點將是我們的紋理座標。一旦完成並且所有內容都已初始化,相機將開始捕獲影象。對於每個捕獲的影象,執行以下步驟:

  1. 檢測面部區域並定位面部標誌。
  2. 3D模型適用於定位的地標。
  3. 使用pygame渲染3D模型,其中初始化期間獲得紋理。
  4. 使用羽化(α混合)和非常簡單的顏色校正將渲染模型的影象與從相機獲得的影象混合。
  5. 最終影象顯示給使用者。

整個過程中最關鍵的因素是3D模型的擬合。該模型本身包括:

  1. 中性面的3D形狀(頂點集),
  2. 一些混合形狀,可以新增到中性面,以產生張口,眉毛等,
  3. 面部形狀的一組三元組,形成面部的三角形網格,
  4. 兩組索引,用於建立由界標定位器找到的界標與3D面部形狀的頂點之間的對應關係。

使用以下等式將模型投影到影象空間中:

其中s是投影形狀,a是縮放參數,P是旋轉3D表面形狀的旋轉矩陣的前兩行,S_0是中性面形狀,w_1-n是混合形狀權重,S_1-n是blendshapes,t是2D平移向量,n是混合形狀的數量。

通過最小化投影形狀和區域性標誌之間的差異來完成模型擬合。使用高斯牛頓法,相對於混合形狀權重,縮放,旋轉和平移完成最小化。

  • 案例效果

接下來使用實時視訊將愛因斯坦的臉移植到我的臉上~

原圖片如下:

移植後效果如下: 

  • 案例下載

案例Demo下載:https://download.csdn.net/download/m0_38106923/10593086