pythonopencv做界面 python基于opencv的人臉識別

0前言當前基于深度學習的人工智能的換臉技術比較多 , 但實際上 , 對于一些相同角度、相似膚色換臉場景其實無須通過深度學習模型即可達到比較好的效果 。本文基于OpenCV針對相同臉部角度、相似膚色場景實現完美換臉 。最終效果如下所示(下圖為動態圖 , 讀者可以仔細
0 前言當前基于深度學習的人工智能的換臉技術比較多 , 但實際上 , 對于一些相同角度、相似膚色換臉場景其實無須通過深度學習模型即可達到比較好的效果 。本文基于OpenCV針對相同臉部角度、相似膚色場景實現完美換臉 。最終效果如下所示(下圖為動態圖 , 讀者可以仔細觀察臉部變化過程):

pythonopencv做界面 python基于opencv的人臉識別

文章插圖

1 原理原理如下:
  1. 查找臉部關鍵點
  2. 獲取關鍵點凸包 , 并對凸包點計算delanauy三角形 。
  3. 每個對應的delanauy三角形做仿射變換
  4. 人臉融合
2 查找臉部關鍵點臉部關鍵點可以通過dlib庫獲?。?br /> pip install dlib
如果安裝失敗 , 可以嘗試一下將Python版本降到3.6 。
dlib可以檢測人臉68個關鍵點 , 如下所示:
pythonopencv做界面 python基于opencv的人臉識別

文章插圖
68個關鍵點
3 delanauy三角形得到68個關鍵點后無法直接貼臉 , 因為每個人的臉型大小不一致 。為了適配不同大小的臉型 , 我們將人臉區域劃分為多個delanauy三角形 , 每個三角形區域單獨做仿射變換 。
首先獲取人臉關鍵點凸包 , 即得到處于外圍的關鍵點 , 直接調用opencv函數cv2.convexHull即可 。得到如下所示:
pythonopencv做界面 python基于opencv的人臉識別

文章插圖

對凸包點計算delanauy三角形 , 每個三角形區域單獨仿射變換 。如下所示:
【pythonopencv做界面 python基于opencv的人臉識別】
pythonopencv做界面 python基于opencv的人臉識別

文章插圖
仿射變換實現如下:
def apply_affine_transform(src, src_tri, dst_tri, size):
\\\'\\\'\\\' 應用仿射變換
src: 輸入圖像
src_tri: 輸入圖像中的三個點
dst_tri: 輸入圖像三個點對應輸出圖像中三個點
size: 輸出圖像大小
return: 返回輸入圖像按照兩個三角形對應點的仿射變換得到的圖像
\\\'\\\'\\\'
# 得到仿射矩陣

推薦閱讀