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

文章目

目录

文章目录

前言

一、背景

(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-68font = cv2.FONT_HERSHEY_SIMPLEXcv2.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 dlibpredictor_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:breakimg = 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-68font = cv2.FONT_HERSHEY_SIMPLEXcv2.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 改为视频路径即可

基于 dlib 的人脸检测(68关键点)相关推荐

  1. 基于dlib进行人脸检测

    1.dlib的基本概念 1. Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口. 2. 由于Dlib对于人脸特征提取支持很好,有很多训练好的人脸特征提取模型供开发者使用,所以 ...

  2. 基于opencv的人脸检测(图片、视频、摄像头)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.检测图片中的人脸 二.检测视频与摄像头中的人脸 总结 前言 人脸检测识别一直是个热门的研究问题,同时也是opencv中 ...

  3. 《数字图像处理》dlib人脸检测获取关键点,delaunay三角划分,实现人脸的几何变换warpping,接着实现两幅人脸图像之间的渐变合成morphing

    这学期在上<数字图像处理>这门课程,老师布置了几个大作业,自己和同学一起讨论完成后,感觉还挺有意思的,就想着把这个作业整理一下 : 目录 1.实验任务和要求 2.实验原理 3.实验代码 3 ...

  4. 基于Dlib的疲劳检测系统

    需要源码的朋友可以私信我 基于Dlib的疲劳检测系统 1.设计背景及要求 2.系统分析 3.系统设计 3.1功能结构图 3.2基于EAR.MAR和HPE算法的疲劳检测 3.2.1基于EAR算法的眨眼检 ...

  5. Opencv项目实战:基于dlib的疲劳检测

    文章目录 一.项目简介 二.算法原理 三.环境配置 3.1.dlib人脸检测器:dlib.get_frontal_face_detector() 3.2.dlib关键点定位工具:shape_predi ...

  6. 人脸检测,关键点识别,人脸对齐

    import cv2 import dlib import numpy as np import math PREDICTOR_PATH = "E:/Testcomptition/shape ...

  7. 【Dlib】人脸检测、特征点检测、人脸对齐、人脸识别

    本文是利用dlib库,进行人脸检测.特征点检测.人脸对齐.所有前提是假设已经安装了dlib. 参考链接: 1.http://developer.51cto.com/art/201801/564529. ...

  8. python人脸识别毕业设计-Python基于Dlib的人脸识别系统的实现

    之前已经介绍过人脸识别的基础概念,以及基于opencv的实现方式,今天,我们使用dlib来提取128维的人脸嵌入,并使用k临近值方法来实现人脸识别. 人脸识别系统的实现流程与之前是一样的,只是这里我们 ...

  9. 工程详细记录:超准确人脸检测(带关键点)YOLO5Face C++

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨DefTruth 编辑丨极市平台 导读 本文主要记录一下YOLO5Face C++工程相关的问 ...

最新文章

  1. 生产环境一次诡异的NPE问题,反转了4次
  2. 洛谷P1194 买礼物
  3. VC++ VS2010 error LNK1123 转换到 COFF 期间失败 怎么办
  4. utf8 bom 去掉 java_utf-8-BOM删除bom
  5. c语言 数组指针,C语言数组名及指向数组指针的小结
  6. 围住浮动元素(消除浮动)的三种方法
  7. 【5】Java内存访问重排序vs volatile
  8. 安卓能硬改的手机机型_这款iPhone手机专属特效AR相机,我真的爱了
  9. R 语言 iris 数据集的可视化
  10. VBM法MRI图像处理——记第一次使用cat12
  11. Xshell上传文件
  12. 中国余数定理解题步骤
  13. 制作一款app系统软件大概需要多少钱
  14. 为什么我玩游戏那么卡?
  15. 省钱钱~~~~~~青龙脚本
  16. 【考研数学】六. 三重积分
  17. windows中 mysql修改密码
  18. 【开发工具】SVN断网续传、续下解决办法
  19. php写火车头采集接口,火车头discuz6.1完美采集的php接口文件
  20. 我们的Web3创业项目,黄了

热门文章

  1. C# •MouseDown •MouseDown •MouseUp 的先后顺序
  2. 系统学习-----NFS协议
  3. SNS3(satellite)怎么装,NS-3.37
  4. 使用css+js制作选项卡
  5. 记录chrom不同版本对前端兼容代码差异
  6. Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
  7. 如何将AI转换为JPG
  8. vant Ui 网址
  9. 数据库常用关系运算与程序初学
  10. 巴渝工匠杯html5,巴渝工匠杯重庆市第十二届高职院校.PDF