基于Dlib进行人脸特征点检测的Python代码实现

一.Python代码实现

import sys
import os
import glob
import dlib
import numpy as np
import cv2
#把imread中的路径修改为自己的图片路径,图片格式为jpeg格式
img=cv2.imread("/home/kd/PycharmProjects/python-pro/datasets/8.jpeg")
detector= dlib.get_frontal_face_detector()
#检测出有几张脸在图片中
dets = detector(img, 1)
img_faces=[]
#加载模型
#把dlib.shape_predictor("path")中的path修改为自己存储的.dat文件的路径
predictor = dlib.shape_predictor('/home/kd/PycharmProjects/python-pro/dlib_model/shape_predictor_68_face_landmarks.dat')
for i,face in enumerate(dets):
    x = dlib.rectangle.left(dets[i])
    y = dlib.rectangle.top(dets[i])
    h = dlib.rectangle.height(dets[i])
    w = dlib.rectangle.width(dets[i])
    img_faces.append([x, y, w, h])
    length = len(img_faces)
    for i in range(length):
        cv2.rectangle(img, (img_faces[i][0], img_faces[i][1]),
             (img_faces[i][0] + img_faces[i][2], img_faces[i][1] + img_faces[i][3]), (0, 0, 255))

    #提取出每一张脸的特征点
    face_feature = predictor(img,face)
    for i,pt in enumerate(face_feature.parts()):
        pt_pos=(pt.x,pt.y)
        cv2.circle(img,pt_pos,2,(255,255,255),1)
    cv2.namedWindow("face feature",cv2.WINDOW_AUTOSIZE)
    cv2.imshow("face feature",img)

cv2.waitKey(0)

 二.使用Dlib提取人脸特征(68维)

脸是由眼睛、鼻子、嘴、下巴等局部构成,这些局部之间的结构关系,便是作为人脸的重要特征。人脸特征的提取,是对人脸进行特征建模的过程。

使用Dlib可提取人脸的68个特征点,这些特征点描述了眉毛、眼睛、鼻子、嘴巴,以及整个脸部的轮廓,如下图所示:

 三.Dlib人脸特征模型的下载:

下载地址:http://dlib.net/files/

5个特征点的模型:shape_predictor_5_face_landmarks.dat.bz2

68个特征点的模型:shape_predictor_68_face_landmarks.dat.bz2

猜你喜欢

转载自blog.csdn.net/u014285910/article/details/84677586