文章目錄
- 一、什么是人臉關鍵點定位?
- 二、關鍵點模型的下載及關鍵信息的理解
- 三、dlib關鍵點定位的簡單實現
- (1)導入必要的庫
- (2)從指定路徑讀取圖像文件
- (3)創建dlib的正面人臉檢測器對象
- (4)使用檢測器在圖像上檢測人臉
- (5)加載dlib預訓練的人臉關鍵點定位模型
- (6)遍歷檢測到的每個人臉區域
- (7)顯示處理后的圖像(包含人臉關鍵點標記)
- 四、人臉關鍵點定位的主要作用和應用
- 五、主要技術方法
- 總結
一、什么是人臉關鍵點定位?
人臉關鍵點定位(Facial Landmark Detection),也稱為人臉特征點檢測或人臉對齊,是計算機視覺領域的一項基礎任務。它的核心目標是在一張包含人臉的圖像中,自動地、精確地定位出人臉上一系列預定義的關鍵解剖點的位置坐標(通常是二維像素坐標)。
二、關鍵點模型的下載及關鍵信息的理解
關鍵點模型下載:
官網下載:http://dlib.net/files/
關鍵點: 這些點是經過精心選擇的,代表了人臉的重要結構和特征。常見的點包括:
眉毛的輪廓點(例如,左右眉峰、眉梢)眼睛的輪廓點(例如,眼角、眼瞼)鼻子的輪廓點(例如,鼻尖、鼻翼)嘴巴的輪廓點(例如,嘴角、唇峰、唇谷)臉部的輪廓點(例如,下巴尖、臉頰邊緣)有時還包括瞳孔中心、臉頰點等。
定位: 算法需要輸出每個關鍵點的精確坐標 (x, y),這些坐標對應于它們在輸入圖像中的像素位置。
預定義模型: 關鍵點的數量和位置通常是預先定義好的標準模型。最常見的模型有:
68點模型: 這是最經典和廣泛使用的模型,包括眉毛(每邊5點)、眼睛(每邊6點)、鼻子(9點)、嘴巴(20點)和臉部輪廓(17點)。5點模型: 更簡單,通常定位兩個眼睛中心、鼻尖和兩個嘴角。常用于快速粗略對齊。106點模型 / 稠密關鍵點模型: 包含更多點(如臉頰、額頭),能更精細地描述人臉形狀,常用于高級特效和3D重建。
三、dlib關鍵點定位的簡單實現
(1)導入必要的庫
import cv2 # OpenCV庫,用于圖像處理和計算機視覺任務
import numpy as np # NumPy庫,用于數值計算和數組操作
import dlib # dlib庫,提供強大的機器學習工具,特別擅長人臉檢測和特征點定位
(2)從指定路徑讀取圖像文件
img = cv2.imread('../data/man.png')
(3)創建dlib的正面人臉檢測器對象
# get_frontal_face_detector()使用HOG特征+SVM分類器檢測人臉
detector = dlib.get_frontal_face_detector()
(4)使用檢測器在圖像上檢測人臉
# 參數0表示不進行上采樣(原始圖像大小檢測)
# 返回值faces是一個包含所有檢測到的人臉區域的矩形對象列表
faces = detector(img, 0)
(5)加載dlib預訓練的人臉關鍵點定位模型
# 該模型可以定位人臉上的68個關鍵點(shape_predictor_68_face_landmarks.dat)
predictor = dlib.shape_predictor("../data/shape_predictor_68_face_landmarks.dat")
(6)遍歷檢測到的每個人臉區域
for face in faces:# 使用關鍵點定位模型預測當前人臉的68個關鍵點# shape是一個包含68個關鍵點坐標的對象shape = predictor(img, face)# 將關鍵點轉換為NumPy數組格式,便于處理# 每個關鍵點表示為[x, y]坐標landmarks = np.array([[p.x, p.y] for p in shape.parts()])# 遍歷所有68個關鍵點及其索引for idx, point in enumerate(landmarks):# 獲取當前關鍵點的坐標pos = [point[0], point[1]]# 在圖像上繪制關鍵點(綠色實心圓)# 參數說明:# img: 目標圖像# pos: 圓心坐標# 2: 圓的半徑(像素)# (0,255,0): 顏色(BGR格式,綠色)# thickness=-1: 實心圓cv2.circle(img, pos, 2, color=(0, 255, 0), thickness=-1)# 在關鍵點旁邊繪制其索引編號(白色文本)# 參數說明:# img: 目標圖像# str(idx): 要繪制的文本(當前點的索引)# pos: 文本左下角位置# cv2.FONT_HERSHEY_SIMPLEX: 字體類型# 0.45: 字體縮放比例# (255,255,255): 文本顏色(白色)# 1: 文本線寬# cv2.LINE_AA: 抗鋸齒線型cv2.putText(img, str(idx), pos, cv2.FONT_HERSHEY_SIMPLEX, 0.45, (255, 255, 255), 1, cv2.LINE_AA)
(7)顯示處理后的圖像(包含人臉關鍵點標記)
cv2.imshow('img', img)# 等待鍵盤輸入(0表示無限等待)
cv2.waitKey(0)#)銷毀所有OpenCV創建的窗口
cv2.destroyAllWindows()
效果展示
同樣此處依然可以引入攝像頭,實時對人臉進行關鍵點定位。
四、人臉關鍵點定位的主要作用和應用
人臉對齊: 這是最基礎也是最重要的應用。通過定位關鍵點,可以將不同姿態、尺度、位置的人臉圖像“矯正”到一個標準姿態(通常是正面朝前),極大地提高后續人臉識別、表情識別等任務的準確性和魯棒性。
人臉識別/驗證: 對齊后的人臉特征更容易進行比較和匹配。
表情識別: 關鍵點位置的變化(如嘴角上揚、眉毛皺起)是分析面部表情的關鍵線索。
人臉姿態估計: 根據關鍵點的分布和相對位置,可以估計人臉在三維空間中的朝向(偏航角、俯仰角、翻滾角)。
人臉美化/美顏: 瘦臉、大眼、美妝等濾鏡效果需要精確知道眼睛、嘴巴、臉型的位置才能精準施加效果。
虛擬化妝/試妝: 在嘴唇、眼瞼等部位疊加虛擬妝容需要精確定位。
增強現實: 在臉上疊加虛擬面具、眼鏡、貼紙或特效(如動物鼻子、胡子)需要關鍵點作為錨點。
人機交互: 通過跟蹤關鍵點的運動(如眨眼、張嘴)實現非接觸式控制。
3D人臉重建: 稠密的關鍵點是構建高精度3D人臉模型的重要輸入。
醫學分析: 輔助分析某些面部特征或表情(如某些疾病的早期面部表征)。
疲勞駕駛檢測: 通過檢測眼睛開合程度、打哈欠(嘴部動作)等關鍵點狀態判斷駕駛員狀態。
動畫與游戲: 驅動虛擬角色的面部表情。
五、主要技術方法
傳統方法:
主動形狀模型: 通過迭代調整一個初始的平均人臉形狀模型來擬合圖像特征。主動外觀模型: 在ASM基礎上,不僅考慮形狀,還考慮紋理(外觀)信息。約束局部模型: 為每個關鍵點訓練獨立的局部檢測器,并利用形狀約束來優化整體結果。
深度學習方法 (主流):
使用卷積神經網絡直接學習從輸入圖像到關鍵點坐標的映射,通常視為一個回歸問題。常見網絡架構:各種定制的CNN、Hourglass網絡、HRNet等。通常輸出一個包含所有關鍵點坐標的向量,或者一個關鍵點位置的熱力圖。訓練需要大量標注好關鍵點位置的人臉圖像數據集。
總結
人臉關鍵點定位是讓計算機“看懂”人臉結構的基礎技術。它通過精確定位一系列預定義的面部特征點,為眾多上層應用(人臉識別、表情分析、美顏濾鏡、AR特效等)提供了至關重要的幾何結構信息。雖然深度學習方法極大地提升了定位的精度和魯棒性,但在處理極端姿態、嚴重遮擋和復雜光照等場景時仍存在挑戰,是計算機視覺領域持續研究的重要方向。