人臉識別Dlib 68個特徵點

2021-09-08 07:46:47 字數 3400 閱讀 3625

前面說了怎麼開啟攝像頭框出人臉,接下來學習了一下人臉的68個特徵點

直接**

import dlib

import cv2

# 與人臉檢測相同,使用dlib自帶的frontal_face_detector作為人臉檢測器

detector = dlib.get_frontal_face_detector()

# 使用官方提供的模型構建特徵提取器

predictor = dlib.shape_predictor('e:data/shape_predictor_68_face_landmarks.dat/shape_predictor_68_face_landmarks.dat')

# cv2讀取

# 與人臉檢測程式相同,使用detector進行人臉檢測 dets為返回的結果

dets = detector(img, 1)

# 使用enumerate 函式遍歷序列中的元素以及它們的下標

# 下標k即為人臉序號

for k, d in enumerate(dets):

print("dets{}".format(d))

print("detection {}: left: {} top: {} right: {} bottom: {}".format(

k, d.left(), d.top(), d.right(), d.bottom()))

# 使用predictor進行人臉關鍵點識別 shape為返回的結果

shape = predictor(img, d)

# 獲取第乙個和第二個點的座標(相對於而不是框出來的人臉)

print("part 0: {}, part 1: {} ...".format(shape.part(0), shape.part(1)))

# 繪製特徵點

for index, pt in enumerate(shape.parts()):

print('part {}: {}'.format(index, pt))

pt_pos = (pt.x, pt.y)

cv2.circle(img, pt_pos, 1, (255, 0, 0), 2)

#利用cv2.puttext輸出1-68

font = cv2.font_hershey_******x

cv2.puttext(img, str(index+1),pt_pos,font, 0.3, (0, 0, 255), 1, cv2.line_aa)

cv2.imshow('img', img)

k = cv2.waitkey()

cv2.destroyallwindows()

參考該博主的**,可識別一張上的人臉,下面放一張穎寶和峰峰某劇裡面的一張**

執行**後,為了不影響美觀,我已經把人臉框去掉了,只剩下特徵點和編碼

好精緻的五官吶!~~

import cv2

import dlib

predictor_path = "e:data/shape_predictor_68_face_landmarks.dat/shape_predictor_68_face_landmarks.dat"

#初始化

predictor = dlib.shape_predictor(predictor_path)

#初始化dlib人臉檢測器

detector = dlib.get_frontal_face_detector()

#初始化視窗

win = dlib.image_window()

cap = cv2.videocapture('h:/2.mp4')

#cap = cv2.videocapture(0)

while cap.isopened():

ok, cv_img = cap.read()

if not ok:

break

img = cv2.cvtcolor(cv_img, cv2.color_rgb2bgr)#轉灰

dets = detector(img, 0)

shapes =

for k, d in enumerate(dets):

print("dets{}".format(d))

print("detection {}: left: {} top: {} right: {} bottom: {}".format(

k, d.left(), d.top(), d.right(), d.bottom()))

# 使用predictor進行人臉關鍵點識別 shape為返回的結果

shape = predictor(img, d)

#繪製特徵點

for index, pt in enumerate(shape.parts()):

print('part {}: {}'.format(index, pt))

pt_pos = (pt.x, pt.y)

cv2.circle(img, pt_pos, 1, (0,225, 0), 2)

# 利用cv2.puttext輸出1-68

font = cv2.font_hershey_******x

cv2.puttext(img, str(index+1),pt_pos,font, 0.3, (0, 0, 255), 1, cv2.line_aa)

win.clear_overlay()

win.set_image(img)

if len(shapes)!= 0 :

for i in range(len(shapes)):

win.add_overlay(shapes[i])

# win.add_overlay(dets)

cap.release()

效果圖

# cap = cv2.videocapture('h:/2.mp4')

cap = cv2.videocapture(0)

這樣就可以直接進行實時動態監測臉部特徵了。

在實驗的過程中,我把人臉框的**注釋掉了(主要是太醜o(╥﹏╥)o),想嘗試的朋友可以將倒數第二行的注釋去掉,人臉框就出來啦~

還要感謝另一位博主啦,這些都是在他們的基礎上完成的。

dlib讀取68個人臉特徵點

可以讀取到人臉上的68個特徵點,可以利用這些特徵點做點有意思的事 coding utf 8 created on thu jan 14 16 49 37 2021 author yuyanchuan import dlib import cv2 import os predictor path sh...

基於Dlib庫的人臉68個特徵點檢測

利用dlib.get frontal face detector 獲取人臉框 利用dlib.shape predictor shape predictor 68 face landmarks.dat 獲取人臉68個特徵點 import numpy as np import cv2 import dl...

dlib人臉68特徵點檢測提速 毫秒級

參考文章 把原本低速的dlib人臉檢測換成了高速的haar檢測,提速明顯,但是精度下降 include include include include include include include include include include include include include us...