一.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人脸特征模型的下载:
5个特征点的模型:shape_predictor_5_face_landmarks.dat.bz2
68个特征点的模型:shape_predictor_68_face_landmarks.dat.bz2