使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

基于Python+OpenCV+dlib实现人脸68个关键点检测并标注 一、项目背景与意义人脸关键点检测是人脸识别、表情分析、面部特征提取等任务中的一项关键技术。通过在人脸上定位出68个关键点,我们可以更准确地获取人脸的几何特征,进一步实现人脸的对齐、标准化、特征提取等操作。在安防监控、人机交互、虚拟现实等领域,人脸关键点检测具有重要的应用价值[1][2][3][4]。二、技术原理与实现技术框架与工具:使用Python作为编程语言,其丰富的库和易于学习的特性使得项目实现更加高效。 阅读详情

今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛、鼻子、嘴巴等。我们可以将这些信息作为一个预处理步骤来完成,例如捕捉照片中人物的人脸(手动或通过机器学习),创建效果来“增强”我们的图像(类似于Snapchat等应用程序中的效果),对人脸进行情感分析等等。

今天我们将通过引入DLib和从图像中提取面部特征来将其提升到一个新的水平。

  • 相关阅读:https://towardsdatascience.com/essential-opencv-functions-to-get-you-started-into-computer-vision-743df932e60

Dlib是一个高级的机器学习库,它是为解决复杂的现实世界问题而创建的。这个库是用C++编程语言创建的,它与C/C++、Python和java一起工作。

  • Dlib:http://dlib.net/

值得注意的是,本教程可能需要对OpenCV库有一定的了解,例如如何处理图像、打开相机、图像处理和一些小技巧。

它是如何工作的?

我们的脸有几个可以识别的特征,比如眼睛、嘴巴、鼻子等等。当我们使用DLib算法检测这些特征时,我们实际上得到了每个特征点的映射。该映射由67个点(称为地标点)组成,可识别以下特征:

  • 颚点= 0–16

  • 右眉点= 17–21

  • 左眉点= 22–26

  • 鼻点= 27–35

  • 右眼点= 36–41

  • 左眼点= 42–47

  • 口角= 48–60

  • 嘴唇分数= 61–67

现在让我们来了解如何提取特征。

安装要求

与往常一样,本文将用代码演示示例,并将逐步指导你实现一个完整的人脸特征识别示例。但是在开始之前,你需要启动一个新的Python项目并安装3个不同的库:

  • opencv python

  • dlib

如果像我一样使用pipenv,可以使用以下命令安装所有这些文件:

pipenv install opencv-python, dlib

如果你使用的是Mac和某些版本的Linux,则在安装dlib时可能会遇到一些问题,如果遇到的是编译错误,请检查使用的CMake库版本。在Mac中,确保你有可用的CMake,并且使用正确的版本运行:

brew install cmake

对于其他操作系统,请在线检查以获得特定支持。

步骤1:载入并显示图片

我们将从小处着手并以代码为基础,直到有一个可以正常工作的示例为止。

通常,我喜欢使用绘图来渲染图像,但是由于我们在之后的文章中准备了一些很酷的东西,因此我们将做一些不同的事情,并且将创建一个窗口来展示我们的工作结果。

让我们一起看看代码吧!

import cv2# read the imageimg = cv2.imread("face.jpg")# show the imagecv2.imshow(winname="Face", mat=img)# Wait for a key press to exitcv2.waitKey(delay=0)# Close all windowscv2.destroyAllWindows()

很简单,对吧?我们只是用imread加载图像,然后告诉OpenCV在winname中显示图像,这将打开窗口并给它一个标题。

之后,我们需要暂停执行,因为当脚本停止时,窗口会被破坏,所以我们使用cv2.waitKey来保持窗口,直到按下某个键,然后销毁窗口并退出脚本。

如果使用代码并在代码目录中添加了一个名为face.jpg的图像,你应该得到如下内容:

原始图像:

步骤2:人脸识别

到目前为止,我们还没有对图像做任何处理,只是把它呈现在一个窗口中,这是非常无聊的,但是现在我们将开始加入其它的内容,我们将从识别图像中选择一张脸开始。

为此,我们将使用名为get_frontial_face_detector()的Dlib函数,非常直观,但是有一个警告提示这个函数只适用于灰度图像,所以我们必须首先使用OpenCV。

get_frontial_face_detector()会返回一个检测器,该检测器是一个我们可以用来检索人脸信息的函数,每个面都是一个对象,其中包含可以找到图像的位置点。

但我们最好在代码上看看:

import cv2import dlib# Load the detectordetector = dlib.get_frontal_face_detector()# read the imageimg = cv2.imread("face.jpg")# Convert image into grayscalegray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)# Use detector to find landmarksfaces = detector(gray)for face in faces:    x1 = face.left() # left point    y1 = face.top() # top point    x2 = face.right() # right point    y2 = face.bottom() # bottom point    # Draw a rectangle    cv2.rectangle(img=img, pt1=(x1, y1), pt2=(x2, y2), color=(0, 255, 0), thickness=4)# show the imagecv2.imshow(winname="Face", mat=img)# Wait for a key press to exitcv2.waitKey(delay=0)# Close all windowscv2.destroyAllWindows()

上面的代码将从图像中检索所有面部,并在每个面部上渲染一个矩形,从而产生如下图像:

到目前为止,我们在检测人脸方面做得很好,但是我们仍然需要一些工作来提取所有特征(地标)。接下来让我们开始吧。

步骤3:识别人脸特征

你喜欢魔术吗?到目前为止,DLib的工作方式相当神奇,只需几行代码我们就可以实现很多,而现在我们遇到了一个全新的问题,它还会继续这么简单吗?

回答是肯定的!原来DLib提供了一个名为shape_predictor()的函数,它将为我们提供所有的魔法,但是需要一个预先训练的模型才能工作。

有几种模型可以与shape_predictor一起工作,我正在使用的模型可以在这里下载,也可以尝试其他模型。

让我们看看新代码现在是什么样子

import cv2import dlib# Load the detectordetector = dlib.get_frontal_face_detector()# Load the predictorpredictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")# read the imageimg = cv2.imread("face.jpg")# Convert image into grayscalegray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)# Use detector to find landmarksfaces = detector(gray)for face in faces:    x1 = face.left() # left point    y1 = face.top() # top point    x2 = face.right() # right point    y2 = face.bottom() # bottom point    # Look for the landmarks    landmarks = predictor(image=gray, box=face)    x = landmarks.part(27).x    y = landmarks.part(27).y    # Draw a circle    cv2.circle(img=img, center=(x, y), radius=5, color=(0, 255, 0), thickness=-1)# show the imagecv2.imshow(winname="Face", mat=img)# Wait for a key press to exitcv2.waitKey(delay=0)# Close all windowscv2.destroyAllWindows()

像以前一样,我们总是在同一个代码上构建代码,现在使用我们的预测函数为每个人脸找到特征。但现在我还在做一些奇怪的事情,比如如下代码的数值27是用来干嘛的?

landmarks = predictor(image=gray, box=face)x = landmarks.part(27).xy = landmarks.part(27).y

我们的预测函数会返回一个包含68个点的对象,根据我们之前看到的图片,如果你注意到的话,会发现点27正好在眼睛之间,所以如果所有的计算正确,你应该看到一个绿点在眼睛之间,如下图所示:

我们已经很接近了,现在让我们渲染所有的点,而不是只渲染一个:

import cv2import numpy as npimport dlib# Load the detectordetector = dlib.get_frontal_face_detector()# Load the predictorpredictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")# read the imageimg = cv2.imread("face.jpg")# Convert image into grayscalegray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)# Use detector to find landmarksfaces = detector(gray)for face in faces:    x1 = face.left() # left point    y1 = face.top() # top point    x2 = face.right() # right point    y2 = face.bottom() # bottom point    # Create landmark object    landmarks = predictor(image=gray, box=face)    # Loop through all the points    for n in range(0, 68):        x = landmarks.part(n).x        y = landmarks.part(n).y        # Draw a circle        cv2.circle(img=img, center=(x, y), radius=3, color=(0, 255, 0), thickness=-1)# show the imagecv2.imshow(winname="Face", mat=img)# Delay between every framcv2.waitKey(delay=0)# Close all windowscv2.destroyAllWindows()

但是如果你对所有的点都不感兴趣呢?实际上,你可以调整你的范围间隔来获得上面术语表中指定的任何特征,就像我在这里做的那样:

太棒了,但我们能做点更酷的事吗?

步骤4:实时检测

是的,你没看错!这可能就是你想要的效果!下一步是连接我们的网络摄像头,从你的视频流中进行实时地关键点识别。

你可以通过使用相机遍历视频帧或使用视频文件来对面部进行实时面部关键点检测。

如果要使用自己的摄像机,请参考以下代码,如果使用的是视频文件,请确保将数字0更改为视频路径。

如果要结束窗口,请按键盘上的ESC键:

import cv2import dlib
# Load the detectordetector = dlib.get_frontal_face_detector()
# Load the predictorpredictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# read the imagecap = cv2.VideoCapture(0)
while True:    _, frame = cap.read()    # Convert image into grayscale    gray = cv2.cvtColor(src=frame, code=cv2.COLOR_BGR2GRAY)
    # Use detector to find landmarks    faces = detector(gray)
    for face in faces:        x1 = face.left()  # left point        y1 = face.top()  # top point        x2 = face.right()  # right point        y2 = face.bottom()  # bottom point
        # Create landmark object        landmarks = predictor(image=gray, box=face)
        # Loop through all the points        for n in range(0, 68):            x = landmarks.part(n).x            y = landmarks.part(n).y
            # Draw a circle            cv2.circle(img=frame, center=(x, y), radius=3, color=(0, 255, 0), thickness=-1)
    # show the image    cv2.imshow(winname="Face", mat=frame)
    # Exit when escape is pressed    if cv2.waitKey(delay=1) == 27:        break
# When everything done, release the video capture and video write objectscap.release()
# Close all windowscv2.destroyAllWindows()

最后的结果是:

在弱光条件下,尽管上面的图像中有一些错误,但其结果也相当准确,如果照明效果好的话结果会更加准确。

结论

OpenCV和DLib是两个功能非常强大的库,它们简化了ML和计算机视觉的工作,今天我们只是触及了最基本的东西,还有很多东西需要从中学习。

非常感谢你的阅读!

参考链接:https://towardsdatascience.com/detecting-face-features-with-python-30385aee4a8e

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。

↓扫描二维码添加小编↓

OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位 使用定义了两组面部关键点,一组包含68个点,另一组包含5个点,这些关键点用于后续的特征提取。]) 阅读详情

相关推荐

人工智能-Dlib+Python实现人脸识别(人脸检测以及68点特征提取)

是一个现代的C ++工具包,包含机器学习算法和工具,用于在C ++中创建复杂的软件来解决实际问题。它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。Dlib的开源许可 允许您在任何应用程序中免费使用它Dlib可以使用pip install来安装或者到官网下载dlib-19.8.1-cp36-cp36m-win_amd64.whl来安装(到官网下载最新的whl)whl文件的安装,需要cmd进入终端目录下,使用pip install。

人工智能研究所的博客 1054

Python+OpenCV+dlib实现人脸识别

Python+OpenCV+dlib实现人脸识别 IDE:Jupyter Notebook(Anaconda3) Python版本:Python 3.8 本机环境:Windows 10 原理概览 调用dlib库来进行人脸识别,调用预测器 “shape_predictor_68_face_landmarks.dat”进行68点标定人脸,并用opencv的库函数来进行简单的图像处理 一、Windows系统安装OpenCV和dlib库 1.打开Anaconda Prompt命令框,输入python -V得到当

weixin_53594010的博客 3643

人脸特征提取及识别的源程序(openCV)

本程序是用openCV开发的人脸识别程序。该技术是基于gabor滤波算法的人脸特征提取算法

dlib+opencv+python人脸识别

dlib+opencv+python库人脸识别一、基于dlib库人脸特征提取(一)采集人脸1.代码实现2.采集结果(二)采集20张图片对应的68个特征点数组和平均特征值1.代码实现2.采集结果二、人脸识别(一)实现代码(二)识别结果三、总结四、参考资料 一、基于dlib库人脸特征提取 基于dlib库对人脸特征进行提取,在视频流中抓取人脸特征、并保存为64x64大小的图片文件。 注意的是:因为我们后面会对人脸数据集进行训练识别,因此,这一步非常重要。 光线——曝光和黑暗图片因手动剔除 摄像头的清晰度也比较

”一只特立独行的猪“的博客 4600

OpenCV+dlib+Python实现人体五官检测

在以前的文章里面我有写过人脸识别相关的项目实践,基本的路线是: 1、开发摄像头人脸数据采集模块,快速采集批量的包含人脸的图像数据 2、人脸区域切割提取,构建数据集 3、CNN模型训练,测试 4、调用摄像头加载离线模型实时人脸识别 在这里其实有两块是跟OpenCV密不可分的,第二步里面的人脸区域切割提取需要借助于OpenCV的级联分类器实现人脸区域的定位,完成模型的训练之后第四步里面,调用摄像头加载离线模型实时人脸识别的时候也是需要借助于OpenCV的级联分类器才能实现人脸R...

Together_CZ的博客 3688

dlib人脸检测和关关键点检测

在dlib实例基础上实现了人脸检测和人脸框图像的本地保存;批量读取文件并保存人脸关键点至txt和标签至文件。

python dlib opencv人脸识别准确度_Dlib+OpenCV深度学习人脸识别

Dlib+OpenCV深度学习人脸识别前言人脸识别在LWF(Labeled Faces in the Wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,但是真实的环境中的准确率有多少呢?我没有这方面的数据,但是可以确信的是真实环境中的识别率并没有那么乐观。现在虽然有一些商业应用如员工人脸识别管理系统、海关身份验证系统、甚至是银行人脸识别功能,但是我们可以仔细想想员工人脸识...

weixin_39581945的博客 2049

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5095

python+opencv+dlib实现人脸识别

一、win10安装opencv和dlib 1.使用命令查看当前python版本为3.8 python 2.使用命令安装opencv pip3 install opencv_python 3.搜索对应版本的dlib文件下载好后用命令在适合的位置进行安装 python3.8的链接:https://pan.baidu.com/s/1kLn0uEqO5xinuTMZzk3fFA 提取码:kh99 python3.7的链接:https://pan.baidu.com/s/14cxfDkC2dODyncLAZ3

”一只特立独行的猪“的博客 4302

java dlib实现人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛、鼻子、嘴巴等。我们可以将这些信息作为一个预处理步骤来完成,例如捕捉照片中人物的人脸(手动或通过机器学习),创建效果来“增强”我们的图像(类似于Snapchat等应用程序中的效果),对人脸进行情感分析等等。今天我们将通过引入DLib和从图像中提取面部特征来将其提升到一个新的水平。相关阅读:https://towardsdatascience...

weixin_30658759的博客 680

基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)

基于STM32F103C8T6的循迹避障小车完整制作过程 由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程种也参考了很多大神分享的资料,学到很多的东西。但是资料都比较分散,有些东西也不好找,在这里就想把自己制作小车的一个整体过程记录分享一下,希望能够帮到你。 我自己也算是一个小白,之前有做过 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎...

weixin_43924857的博客 14万+

python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛、鼻子、嘴巴等。我们可以将这些信息作为一个预处理步骤来完成,例如捕捉照片中人物的人脸(手动或通过机器学习),创建效果来“增强”我们的图像(类似于Snapchat等应用程序中的效果),对人脸进行情感分析等等。今天我们将通过引入DLib和从图像中提取面部特征来将其提升到一...

weixin_39856589的博客 409

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 780

Python人脸识别实战——基于Dlib和OpenCV的人脸识别与关键点检测(附完整代码和结果图)

在这篇博文中,将展示如何使用Python中的Dlib库对人脸进行关键点检测,并利用OpenCV绘制关键点。人脸关键点检测是计算机视觉领域的一项重要任务。我们可以通过检测人脸上的特定位置(如眼睛、鼻子、嘴唇等)来分析面部特征。在这篇文章中,我们将基于Dlib库的预训练模型shape_predictor_68_face_landmarks.dat,结合OpenCV进行人脸关键点的绘制。

m0_59197405的博客 6010

dlib安装_Python调用Dlib实现人脸关键点检测

人脸识别经过近几年的发展已经非常普遍了,有我们非常熟悉的人脸识别打卡、人脸识别付款等等应用场景。今天,夏老师跟大家分享这些应用场景背后的技术——Python调用Dlib实现人脸关键点检测。这次我们会用到两个工具,分别是opencv和dlib。opencv帮助我们从摄像头中获取摄像头视频图片;dlib帮助我们检测图片中的人脸及人脸的关键点。环境安装我使用的环境是windows10+ python 3...

weixin_39858275的博客 220

多台树莓派(主机)通信

在做无人机实验时,有个任务需要 两台无人机 或 无人机与小车 进行通信。 由于我们飞机上用了树莓派,相当于一台电脑,索性选用Socket网络编程。 条件:树莓派、局域网(手机热点或路由器)。需要通信的两台树莓派接入同一个局域网。 如若现场没有网络,可将树莓派配置为无线路由器,发射wifi。网上很多教程,注意一点是树莓派需要先用网线接入路由器再配置。 发送数据: # -*- coding...

LNL_LNL的博客 7131

opencv 训练人脸对比_Python调用Dlib实现人脸关键点检测

人脸识别经过近几年的发展已经非常普遍了,有我们非常熟悉的人脸识别打卡、人脸识别付款等等应用场景。今天,夏老师跟大家分享这些应用场景背后的技术——Python调用Dlib实现人脸关键点检测。这次我们会用到两个工具,分别是opencv和dlib。opencv帮助我们从摄像头中获取摄像头视频图片;dlib帮助我们检测图片中的人脸及人脸的关键点。环境安装我使用的环境是windows10+ pyt...

weixin_28972355的博客 255

WINCC8.1工业组态软件安装与授权配置指南

SCADA系统作为工业自动化控制的核心平台,通过实时数据采集与监控实现生产流程可视化。WINCC作为西门子旗舰级组态软件,其8.1版本凭借稳定的运行时环境在汽车制造、流程工业等领域广泛应用。本文从工业控制系统软件安装规范切入,重点解析WINCC8.1与Automation License Manager的协同工作原理,详细说明包括系统环境检查、安装包校验、授权文件配置等关键技术环节。针对工程实施中常见的内存配置不足、授权管理器报错等典型问题,提供经过现场验证的解决方案,特别适用于需要进行产线监控系统升级维护

cqwf95925的博客 863

Python人脸识别门禁系统 深度学习 Dlib模块 Pyqt5界面 数据库 计算机毕业设计(源码)✅

Python人脸识别门禁系统 深度学习 Dlib模块 Pyqt5界面 数据库 计算机毕业设计(源码)✅

q_3375686806的博客 1281

人脸检测与识别

【代码】人脸检测与识别。

m0_46451759的博客 128

DAVIS前言:事件相机资料调研

Event-Camera 资料集锦 1. 官网资料 假设了你买了事件相机,就可以在以下几个链接了解相关的参数和gui界面安装,如果不喜欢gui界面安装,可以第2节,安装相关的源码驱动。 DVS/DAVIS产品说明 等相关产品的软硬件介绍。 iniVation DV教程文档 给出在不同平台下的dvs-gui界面,可按照其说明进行相应的操作。 另外,Neuromorphic vision com...

Ian的博客 4156

基于DLIB的视频人脸识别对比

环境:python3.6 win10 安装opencv,numpy,dlib 下载人脸关键点检测器 face_landmarks.dat 下载人脸识别、提取特征值 dlib_face_recognition.dat 直接上源码 import os, dlib, glob, numpy from skimage import io import cv2 import json # 人脸关键点检测器 predictor_path = '../resource/dat/shape_predic..

u010290208的博客 2739

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python人脸识别门禁系统 OpenCV+Dlib

计算机毕业设计:python人脸识别门禁系统 OpenCV+Dlib(包含文档+源码+部署教程)Python语言、dlib、OpenCV、Pyqt5界面设计、sqlite3数据库方法实现、实现步骤1、实例化人脸检测模型、人脸关键点检测模型、人脸识别模型2、电脑摄像头设备加载一对图片3、分别获取图片中的人脸图片所映射的空间向量,即人脸特征值4、计算特征向量欧氏距离,根据阈值判断是否为同一个人。

QQ80213251的博客 967
上一篇: 用Python+OpenCV+PIL构建猫脸识别器
下一篇: 在30分钟内创建你的深度学习服务器
woshicver
博客等级 码龄7年 1851粉丝 624原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值