2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 人工智能

基于Dlib——人脸识别68个特征点

时间:04-17来源:作者:点击数:35

imutils 这个图像处理工具包,除了简化 opencv 的一些操作之外,还有专门配合 dlib 处理人脸数据的工具 face_utils。dlib 提取人脸数据后,五官都是用一些特征点来表示的,每个部位的点的索引是固定的,想要进一步操作就得对这些点进行处理,而 face_utils 就是简化这些点的表现方式:

在这里插入图片描述

dlib 提取人脸特征点是用 68 个点包围每个部位,如上图,例如第 37 个点到第 42 个点就代表右眼,在图片上这几个点若显示出来就是把右眼那块区域包围着,可以通过这些点之间距离的变化来判断人脸的变化,比如是否眨眼等操作

imutils 通过 OrderedDict 把这些点的索引与其表示的区域直接通过字典形式联系起来,之后再提取某个部位的点时,就不用去查点的索引分布了,例如想提取嘴部特征点,其索引可以通过:

(mStart, mEnd) = face_utils.FACIAL_LANDMARKS_68_IDXS[“mouth”]

  • from imutils import face_utils
  • import dlib
  • import imutils
  • import cv2
  • import os
  • import math
  • import time
  • import numpy as np
  • def write_img(img):
  • cv2.imwrite('./capsave/'+str(time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()))+'.jpg',img)
  • def det_68():
  • detector = dlib.get_frontal_face_detector()
  • predictor = dlib.shape_predictor("./shape_predictor_68_face_landmarks.dat")
  • pics="images/"
  • all_list=os.listdir(pics)
  • for e in all_list:
  • # image = cv2.imread(pics+e)
  • image = cv2.imread("./4.jpg")
  • # image = imutils.resize(image, width=112)
  • gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  • rects = detector(gray, 1)
  • # enumerate()方法用于将一个可遍历的数据对象(列表、元组、字典)组合
  • # 为一个索引序列,同时列出 数据下标 和 数据 ,一般用在for循环中
  • for(i, rect) in enumerate(rects):
  • shape = predictor(gray, rect) # 标记人脸中的68个landmark点
  • shape = face_utils.shape_to_np(shape) # shape转换成68个坐标点矩阵
  • (mStart, mEnd) = face_utils.FACIAL_LANDMARKS_68_IDXS["mouth"]
  • (x, y, w, h) = face_utils.rect_to_bb(rect) # 返回人脸框的左上角坐标和矩形框的尺寸
  • cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
  • cv2.putText(image, "Face #{}".format(i + 1), (x - 10, y - 10),
  • cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
  • # landmarksNum = 0;
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门