使用dlib,OpenCV和Python進行人臉識別--檢測眼睛,鼻子,嘴唇和下巴
前期文章我們分享瞭如何使用python與dlib來進行人臉識別,本期我們就來更細的來了解一下人臉識別的內容
如下圖,dlib人臉數據把人臉分成了68個數據點,從圖片可以看出,人臉識別主要是識別:人眉,人眼,人鼻,人嘴以及人臉下顎邊框,每個人臉的部位都有不同的數據標籤從1-68
當我們識別出人臉的這68個點,可以通過訪問不同的數據點來檢測到人臉的部分數據
- · 口可以訪問 [48,68]
- · 右眉可以訪問 [17,22]
- · 左眉可以訪問 [22,27]
- · 右眼可以訪問 [36,42]
- · 左眼 可以訪問 [42,48]
- · 鼻可以訪問 [27,35]
- · 下巴邊框可以訪問 [0,17]
通過訪問不同的數據點,來進行人臉上的部位檢測
我們可以建立一個數組來訪問不同的人臉部分
FACIAL_LANDMARKS_IDXS = OrderedDict([
("mouth", (48, 68)),
("right_eyebrow", (17, 22)),
("left_eyebrow", (22, 27)),
("right_eye", (36, 42)),
("left_eye", (42, 48)),
("nose", (27, 35)),
("jaw", (0, 17))
])
第三方庫from imutils import face_utils中的face_utils已經集成了人臉部分的數據以及格式化代碼,我們可以直接來使用它來進行人臉部分的檢測
· 導入我們所需的Python包(第1-5行)
· 實例化dlib 面部檢測器並加載面部界標預測器(第8行和第10行)。
· 加載和預處理我們的輸入圖像(第13-17行)。
·
· 在輸入圖像中檢測人臉(第20行)
· 循環檢測到的人臉,格式化人臉數據(第22-26行)
· 循環人臉部分,把人臉部分的標籤顯示在圖片上(29-34行)
·
單獨顯示人臉部分的數據點(37-38行)
提取人臉部分的圖片來進行顯示(41-43行)
最後顯示圖片
通過以上的代碼循環,可以來檢測人臉部分,首先檢查到的是人嘴,如下圖
然後是左右眉毛
然後是左右人眼
然後是人鼻子
最後是人臉的邊框
人臉檢測完成後使用mask來進行人臉的顯示
使用mask來進行人臉部分的顯示(51-53行)
通過以上步驟,我們便可以分別檢測到人臉的部分地方,當然也可以檢測到人眼,在人臉識別中,有一個比較困難的地方便是如何區分這個人臉是一個人正常的或者說不是一個照片,以免別人拿到照片也可對人臉進行檢測,我們使用支付寶或者微信時,進行人臉識別時,有時候要求進行眨眼睛,通過此方法便可以有效的識別不是人臉照片,如何進行人臉的眨眼睛,我們後期分享
閱讀更多 人工智能研究所 的文章