基于dlib的人脸检测(68关键点)(代码片段)

陈子迩 陈子迩     2023-03-29     785

关键词:

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目

目录

文章目录

前言

一、背景

(1)环境搭建

(2)下载开源数据集

二、具体实现

效果展示:

效果展示:

总结


前言

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


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

一、背景

(1)环境搭建

题主使用的环境配置:python3.9.13+cuda11.3+anaconda3   

pip install dlib

其中 dlib下载方法(本文仅提供py3.9版本下载)

首先安装

pip install cmake

pip install boost

下载dlib-19.23.0-cp39-cp39-win_amd64.whl

下载后在对应文件夹下执行(这个如果不清楚  剋以私聊)

pip install dlib-19.23.0-cp39-cp39-win_amd64.whl

其他版本dlib中下载

(2)下载开源数据集

shape_predictor_68_face_landmarks.dat

二、具体实现

(1)图片检测

import dlib
import cv2

# 与人脸检测相同,使用dlib自带的frontal_face_detector作为人脸检测器
detector = dlib.get_frontal_face_detector()

# 使用官方提供的模型构建特征提取器
predictor = dlib.shape_predictor('E:data/shape_predictor_68_face_landmarks.dat')
# cv2读取图片
img = cv2.imread("E:data/jujingyi.jpg")
cv2.imshow('img2', img)

# 与人脸检测程序相同,使用detector进行人脸检测 dets为返回的结果
dets = detector(img, 1)

# 使用enumerate 函数遍历序列中的元素以及它们的下标
# 下标k即为人脸序号
# left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离
# top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离
for k, d in enumerate(dets):
    print("dets".format(d))
    print("Detection : Left:  Top:  Right:  Bottom: ".format(
        k, d.left(), d.top(), d.right(), d.bottom()))

    # 使用predictor进行人脸关键点识别 shape为返回的结果
    shape = predictor(img, d)
    # 获取第一个和第二个点的坐标(相对于图片而不是框出来的人脸)
    print("Part 0: , Part 1:  ...".format(shape.part(0), shape.part(1)))

    # 绘制特征点
    for index, pt in enumerate(shape.parts()):
        print('Part : '.format(index, pt))
        pt_pos = (pt.x, pt.y)
        cv2.circle(img, pt_pos, 1, (255, 0, 0), 2)
        # 利用cv2.putText输出1-68
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img, str(index + 1), pt_pos, font, 0.3, (0, 0, 255), 1, cv2.LINE_AA)

cv2.imshow('img', img)
k = cv2.waitKey()
cv2.destroyAllWindows()

效果展示:

接下来我们将代码稍作修改,改为检测视频

mport cv2
import dlib

predictor_path = "E:data/shape_predictor_68_face_landmarks.dat"

# 初始化
predictor = dlib.shape_predictor(predictor_path)

# 初始化dlib人脸检测器
detector = dlib.get_frontal_face_detector()

# 初始化窗口
win = dlib.image_window()

# cap = cv2.VideoCapture('H:/2.mp4')
cap = cv2.VideoCapture(0)
# cap = cv2.VideoCapture(0)
while cap.isOpened():
    ok, cv_img = cap.read()
    if not ok:
        break

    img = cv2.cvtColor(cv_img, cv2.COLOR_RGB2BGR)  # 转灰

    dets = detector(img, 0)
    shapes = []
    for k, d in enumerate(dets):
        print("dets".format(d))
        print("Detection : Left:  Top:  Right:  Bottom: ".format(
            k, d.left(), d.top(), d.right(), d.bottom()))

        # 使用predictor进行人脸关键点识别 shape为返回的结果
        shape = predictor(img, d)
        # shapes.append(shape)
        # 绘制特征点
        for index, pt in enumerate(shape.parts()):
            print('Part : '.format(index, pt))
            pt_pos = (pt.x, pt.y)
            cv2.circle(img, pt_pos, 1, (0, 225, 0), 2)
            # 利用cv2.putText输出1-68
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(img, str(index + 1), pt_pos, font, 0.3, (0, 0, 255), 1, cv2.LINE_AA)

    win.clear_overlay()
    win.set_image(img)
    if len(shapes) != 0:
        for i in range(len(shapes)):
            win.add_overlay(shapes[i])
    # win.add_overlay(dets)

cap.release()

效果展示:

 

 如果需要检测视频,只需要将

cap = cv2.VideoCapture(0)

括号里的0 改为视频路径即可

opencv+dlib实现疲劳检测(代码片段)

目录(1)锁定眼睛部分关键点(2)EAR(2)设置参数(3)对视频的每一帧进行判断本文基于OpenCV并利用dlib工具包,通过实时计算EAR值来统计眨眼次数实现了疲劳检测。步骤:首先对对检测到的人脸进行关键点定位并锁定眼睛部分的关键点... 查看详情

基于tensorflow2.x从零训练15点人脸关键点检测模型(代码片段)

一、人脸关键点检测数据集在计算机视觉人脸计算领域,人脸关键点检测是一个十分重要的区域,可以实现例如一些人脸矫正、表情分析、姿态分析、人脸识别、人脸美颜等方向。人脸关键点数据集通常有5点、15点、68点... 查看详情

dlib库的68特征原理人脸关键点检测原理

...ls/80441556shape_predictor_68_face_landmarks.dat是已经训练好的人脸关键点检测器。dlib_face_recognition_resnet_model_v1.dat是训练好的ResNet人脸识别模型。(说明:ResNet是何凯明在微软的时候提出的深度残差网络,获得了ImageNet2015冠军,通过让网... 查看详情

基于dlib进行人脸识别demo(代码片段)

...:实现人脸识别(输入几张图片,人脸检测、关键点检测、人脸关键点进行编码存储起来,再传进来一张图片,判断新传来来这张图片属于哪一个人)如果dlib安装不成功请参 查看详情

基于dlib进行人脸识别demo(代码片段)

...:实现人脸识别(输入几张图片,人脸检测、关键点检测、人脸关键点进行编码存储起来,再传进来一张图片,判断新传来来这张图片属于哪一个人)如果dlib安装不成功请参 查看详情

dlib+opencv库实现疲劳检测(代码片段)

文章目录1.关键点检测2.算法实现的核心点3.算法实现(1)人脸的关键点集合(2)加载人脸检测库和人脸关键点检测库(3)绘制人脸检测的框(4)对检测之后的人脸关键点坐标进行转换(5)... 查看详情

基于tensorflow2.x从零训练15点人脸关键点检测模型(代码片段)

一、人脸关键点检测数据集在计算机视觉人脸计算领域,人脸关键点检测是一个十分重要的区域,可以实现例如一些人脸矫正、表情分析、姿态分析、人脸识别、人脸美颜等方向。人脸关键点数据集通常有5点、15点、68点... 查看详情

基于tensorflow2.x从零训练15点人脸关键点检测模型(代码片段)

一、人脸关键点检测数据集在计算机视觉人脸计算领域,人脸关键点检测是一个十分重要的区域,可以实现例如一些人脸矫正、表情分析、姿态分析、人脸识别、人脸美颜等方向。人脸关键点数据集通常有5点、15点、68点... 查看详情

基于dlib人脸检测(图像视频)demo(代码片段)

1、Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口2、由于Dlib对于人脸特征提取支持很好,很多训练好的人脸特征提取模型提供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发官网... 查看详情

基于dlib人脸检测(图像视频)demo(代码片段)

1、Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口2、由于Dlib对于人脸特征提取支持很好,很多训练好的人脸特征提取模型提供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发官网... 查看详情

山东大学项目实训四——face_recognition使用opencv和dlib实现基于视频的人脸识别(代码片段)

...特征库文件6、Resources\\shape_predictor_68_face_landmarks.dat人脸关键点标记模型文件7、Resources\\dlib_face_recognition_resnet_model_v1.dat面部识别模型文件8、face_recognition.mp4待检测的视频9、face_recognition.py人脸识别代码文件10、detection.py人脸检测... 查看详情

dlib实现人脸的68点检测

Dlib实现68点标定效果图展示:主要是通过68点的模型进行提取脸部的68点的特征值。(相应细节都已经注释)//设置人脸的标记点#include<dlibopencv.h>#include<opencv2opencv.hpp>#include<dlibimage_processingfrontal_face_detector.h>#include< 查看详情

opencv+openvino实现人脸landmarks实时检测(代码片段)

...模型基于自定义的卷积神经网络实现,取35个人脸各部位关键点。人脸检测模型使用OpenCVDNN模块人脸检测的tensorflow量化8位模型opencv_face_detector_uint8.pb权重文件opencv_face_detector.pbtxt配 查看详情

图片人脸检测——dlib版

上几篇给大家讲了OpenCV的图片人脸检测,而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库。点击查看往期:《图片人脸检测——OpenCV版(二)》《视频人脸检测——OpenCV版(三)》dlib与OpenCV对比识别精准... 查看详情

用dlib进行简单的人脸特征提取特征向量到csv文件中,用knn进行预测识别(代码片段)

目标要求:基于收集的全班人脸数据实现分类识别,要求基于图片进行比对识别。任务流程大致分为以下过程:1)模型准备:下载并部署一个人脸特征提取模型(功能包括人脸检测、人脸特征提取,不限算法,比... 查看详情

dlib代码解读人脸关键点检测器的训练

1.源代码先给出测试的结果,关键点并不是特别准,原因是训练样本数据量太少。以下给出完整的人脸关键点检测器训练代码。详细的代码解读请看第二部分。/*faceLandmarksTrain.cppfunction:借助dlib训练自己的人脸关键点检测器(参考dl... 查看详情

给定 dlib 的 68 点面部标志,确定它们有多好

...间】:2018-05-0614:52:48【问题描述】:我正在使用dlib进行人脸检测,然后进行68点面部地标检测。一般来说,这很有效。但是,dlib的人脸检测器有时会检测到(例如)只有一只眼睛可见或人的嘴巴不可见(或在极少数情况下是非... 查看详情

opencv图像融合(给人脸添加一个眼镜)(代码片段)

基于dlib68点人脸检测的小功能实现图像旋转找的现成的方法,稍稍麻烦点的地方就是mask处理,虽然目的达到了,但是效果一般1importnumpyasnp2importcv2ascv3importdlib4importmath56#做一个戴眼镜的滤镜效果78detector=dlib.get_frontal_face_detector()9pr... 查看详情