dlib是人脸识别与人脸特征关键点获取的常用库,最近实现了将该库集成到展示框架的实验。
其中现有的dlib常见的可获取68个关键点,当然还有5个关键点和81个关键点(包括额头)。因此编写了一个通用的小函数,如下:
该函数通过设置num_landmarks可以获取不同的关键点个数,如68,5和81,并返回facebbox(人脸框),通过该框的个数可以获取人脸的个数,并将人脸的关键点以cv2来进行绘制。
def DetectFacePoints(model_dir,data_dir,num_landmarks,filename,frame):
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('%s/cv/face/dlib/shape_predictor_%d_face_landmarks.dat' % (model_dir,num_landmarks))
dets = detector(frame, 1)
facebbox = []
# 对每个人脸进行处理
for k, d in enumerate(dets):
shape = predictor(frame, d)
# 绘制人脸矩形框
facebbox.append([d.left(), d.top(),d.right(), d.bottom()])
cv2.rectangle(frame,(d.left(), d.top()), (d.right(), d.bottom()),(55,255,155),2)
#landmarks = np.matrix([[p.x, p.y] for p in shape.parts()])
#绘制人脸关键点
for num in range(shape.num_parts):
cv2.circle(frame, (shape.parts