人脸关键点提取(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个特征关键点坐标

发布了20 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/github_35965351/article/details/78217600
今日推荐