人脸关键点提取(dlib)
作者使用开发环境Ubuntu16.04+Python3
摘要
人脸关键点识别在机器视觉领域已经发展的相当成熟。比如商汤科技人脸关键点定位
毫秒级别眼、口、鼻轮廓等人脸21、106、240个关键点定位。本文将使用一个人脸识别开源库Dlib进行演示人脸关键点提取。
1.环境搭建
参见《机器视觉开发环境搭建》
安装Dlib库,19.04版本之前,安装该库时需要编译,走过的坑不少。现在安装的话,直接pip安装,默认版本是19.15。切换至我们建立的python环境
workon cv
pip install dlib
2.应用阶段
2.1.人脸关键点提取
关键点提取需要一个特征提取器(predictor),构建特征提取器可以训练模型。当然我们也可以使用官方提供的一个模型‘shape_predictor_68_face_landmarks.dat’,可以去官网也可以在我的网盘里下载: https://pan.baidu.com/s/1dF7z26H 密码: 54i9
如下提供一张dlib提取到的关键点参考图
下面可以看一张效果图,作者进行了灰度转换
代码实现
# -*- coding:utf-8 -*-
import cv2
import dlib
import numpy as np
cap = cv2.VideoCapture(0)
cap.isOpened()
def key_points(img):
points_keys = []
PREDICTOR_PATH = "shape_predictor_68_face_landmarks.dat"
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(PREDICTOR_PATH)
rects = detector(img,1)
for i in range(len(rects)):
landmarks = np.matrix([[p.x,p.y] for p in predictor(img,rects[i]).parts()])
img = img.copy()
for idx,point in enumerate(landmarks):
pos = (point[0,0],point[0,1])
points_keys.append(pos)
cv2.circle(img,pos,2,(255,0,0),-1)
return img
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face_key = key_points(gray)
cv2.imshow('frame',face_key)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
其中points_keys为收集的脸部68个特征关键点坐标
还没有评论,来说两句吧...