人脸关键点提取(dlib)

桃扇骨 2022-06-07 06:09 377阅读 0赞

作者使用开发环境Ubuntu16.04+Python3

摘要

人脸关键点识别在机器视觉领域已经发展的相当成熟。比如商汤科技人脸关键点定位
毫秒级别眼、口、鼻轮廓等人脸21、106、240个关键点定位。本文将使用一个人脸识别开源库Dlib进行演示人脸关键点提取。

1.环境搭建

参见《机器视觉开发环境搭建》

安装Dlib库,19.04版本之前,安装该库时需要编译,走过的坑不少。现在安装的话,直接pip安装,默认版本是19.15。切换至我们建立的python环境

  1. workon cv
  2. pip install dlib

2.应用阶段

2.1.人脸关键点提取

关键点提取需要一个特征提取器(predictor),构建特征提取器可以训练模型。当然我们也可以使用官方提供的一个模型‘shape_predictor_68_face_landmarks.dat’,可以去官网也可以在我的网盘里下载: https://pan.baidu.com/s/1dF7z26H 密码: 54i9

如下提供一张dlib提取到的关键点参考图
这里写图片描述

下面可以看一张效果图,作者进行了灰度转换
这里写图片描述

代码实现

  1. # -*- coding:utf-8 -*-
  2. import cv2
  3. import dlib
  4. import numpy as np
  5. cap = cv2.VideoCapture(0)
  6. cap.isOpened()
  7. def key_points(img):
  8. points_keys = []
  9. PREDICTOR_PATH = "shape_predictor_68_face_landmarks.dat"
  10. detector = dlib.get_frontal_face_detector()
  11. predictor = dlib.shape_predictor(PREDICTOR_PATH)
  12. rects = detector(img,1)
  13. for i in range(len(rects)):
  14. landmarks = np.matrix([[p.x,p.y] for p in predictor(img,rects[i]).parts()])
  15. img = img.copy()
  16. for idx,point in enumerate(landmarks):
  17. pos = (point[0,0],point[0,1])
  18. points_keys.append(pos)
  19. cv2.circle(img,pos,2,(255,0,0),-1)
  20. return img
  21. while(True):
  22. ret, frame = cap.read()
  23. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  24. face_key = key_points(gray)
  25. cv2.imshow('frame',face_key)
  26. if cv2.waitKey(1) & 0xFF == ord('q'):
  27. break
  28. cap.release()
  29. cv2.destroyAllWindows()

其中points_keys为收集的脸部68个特征关键点坐标

发表评论

表情:
评论列表 (有 0 条评论,377人围观)

还没有评论,来说两句吧...

相关阅读

    相关 人脸关键提取(dlib)

    作者使用开发环境Ubuntu16.04+Python3 摘要 人脸关键点识别在机器视觉领域已经发展的相当成熟。比如商汤科技人脸关键点定位 毫秒级别眼、口、鼻轮廓等人

    相关 人脸关键检测总结

    概述 人脸关键点检测也称为人脸关键点检测、定位或者人脸对齐,是指给定人脸图像,定位出人脸面部的关键区域位置,包括眉毛、眼睛、鼻子、嘴巴、脸部轮廓等。 人脸关键点检测方法