face3d: 3D人臉處理Python開源工具


簡介

3D 人臉是非常有趣的研究領域。face3D 是一個基於 Python 的開源項目(https://github.com/YadiraF/face3d),實現了 3D 人臉研究的眾多功能。它可以處理網格數據,用形變模型生成 3D 人臉,從單張二維人臉圖片和關鍵點重建三維圖像,渲染不同光照條件的人臉。

face3D 非常輕量化,最開始完全是基於 Numpy 寫的。但有些函數(比如光柵化)不能用向量化進行優化,在 Python 中非常慢。這部分函數作者改用 C++ 編寫,沒有調用 OpenCV、Eigen 等大型的庫,再用 Cpython 編譯以供 Python 調用。

項目作者考慮到初學者剛開始學習時應該聚焦在算法本身,同時讓研究人員能夠快速修改和驗證他們的想法,Numpy 版本也被保留下來。此外,作者也盡量在每個函數中添加了引用的公式,以方便初學者學習基礎知識、理解代碼。更多的 3D 人臉研究信息,包括論文和代碼,也可以在項目Github中找到。

結構

克隆項目倉庫后,可以看到有examplesface3d兩個文件夾。

example文件夾提供了不同例子,包括代碼、圖像數據。

face3D 中有mesh、mesh_numpy 和 morphable_model 3個文件夾,mesh 是網格處理的主要部分,mesh_numpy 是 mesh 的純 Numpy 版本,morphable_model 提供了 3DMM 方法的實現。3DMM 是非常流行的3D人臉生成和重建的一個方法,具體可以參考《Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network》這篇論文。

開始使用

環境要求

  • Python 2 或 3
  • Python包:
    • numpy
    • skimage
    • scipy
    • matplotlib
    • Cython

開始使用

  1. 克隆倉庫:
git clone https://github.com/YadiraF/face3d
cd face3d
  1. 如果不是使用numpy版,需要編譯c++文件:
cd face3d/mesh/cython
python setup.py build_ext -i
  1. 如果要使用3DMM模型,需要准備 BFM 文件,可參考 https://github.com/YadiraF/face3d/blob/master/examples/Data/BFM/readme.md

接下來,就可以嘗試一些例子。

例子

進入example文件夾,直接運行一些例子:

3DMM

直接輸入python 2_3dmm.py就能看到3dmm的運行示例。

3DMM生成的隨機例子:

使用了68個關鍵點生成的例子:

變換

python 3_transform.py

修復相機位置並使用正交投影;然后變換人臉(縮放,改變pitch、yaw、roll 姿態角):

修復obj position並使用透視投影 (fovy = 30);然后移動相機位置並旋轉相機(從遠到近,向下和向上,向左和向右,旋轉相機):

Image map

python 4_light.py

渲染圖像像素中的不同屬性,深度、pncc和uv坐標:

uv map

python 7_uv_map.py

在uv坐標中渲染不同的屬性,顏色(紋理貼圖)、位置(2D面部圖像和相應的位置圖):

結語

嘗試完一些例子,如果要進行更深入的研究,建議按順序閱讀例子的代碼,然后閱讀 mesh_numpy 的代碼和原理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM