您当前的位置:首页 > 计算机 > 编程开发 > 人工智能

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

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

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;
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门