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

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;

具体可参考smoke检测代码

参考文章:

  • https://www.cnblogs.com/aarond/p/dlib.html
  • https://blog.csdn.net/weixin_44613063/article/details/107105690?%3E
  • https://blog.csdn.net/James_Ray_Murphy/article/details/79209172
  • https://blog.csdn.net/ai_girl/article/details/86165960
  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值