使用dlib库进行人脸检测+人脸关键点检测+人脸对齐

原图像:
在这里插入图片描述

■ 第一步、人脸检测

import cv2
import dlib
import matplotlib.pyplot as plt
# 获取图片
my_img = cv2.imread('my_img.jpg')
# BGR to RGB
my_img = cv2.cvtColor(my_img, cv2.COLOR_BGR2RGB)

# 使用特征提取器get_frontal_face_detector
detector = dlib.get_frontal_face_detector()

dets = detector(my_img, 1)

for det in dets:
    # 将框画在原图上
    # cv2.rectangle  参数1:图片, 参数2:左上角坐标, 参数2:左上角坐标, 参数3:右下角坐标, 参数4:颜色(R,G,B), 参数5:粗细
    my_img = cv2.rectangle(my_img, (det.left(),det.top()), (det.right(),det.bottom()), (0,255,0), 5)
    
# plt.figure(figsize=(5,5))
plt.imshow(my_img)
plt.show()

在这里插入图片描述

■ 第二步、人脸关键点检测

使用关键点模型需要提前下载此模型,并解压得到shape_predictor_68_face_landmarks.dat
下载地址:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

# 人脸检测器
predictor = dlib.shape_predictor(r'./shape_predictor_68_face_landmarks.dat')

for det in dets:
    shape = predictor(my_img, det)
    # 将关键点绘制到人脸上
    for i in range(68):
        cv2.putText(my_img, str(i), (shape.part(i).x, shape.part(i).y), cv2.FONT_HERSHEY_DUPLEX, 0.3, (0, 255, 255), 2, cv2.LINE_AA)
        cv2.circle(my_img, (shape.part(i).x, shape.part(i).y), 1, (0, 0, 255))

plt.imshow(my_img)
plt.show()

在这里插入图片描述

■ 第三步、人脸对齐

# 人脸对齐
my_img = dlib.get_face_chip(my_img, shape, size = 150)
plt.imshow(my_img)
plt.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Roaddd/article/details/111866756