关键词:
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目
目录
前言
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... 查看详情