【进阶OpenCV】 (18)-- Dlib库 --人脸关键点定位

文章目录

  • 人脸关键点定位
    • 一、作用
    • 二、原理
    • 三、代码实现
      • 1. 构造人脸检测器
      • 2. 载入模型(加载预测器)
      • 3. 获取关键点
      • 4. 显示图像
      • 5. 完整代码
  • 总结

人脸关键点定位

在dlib库中,有shape_predictor_68_face_landmarks.dat预测器,这是一个用于人脸关键点检测的预训练模型,它能够在人脸图像中定位和识别68个关键点。

一、作用

  1. 人脸关键点定位shape_predictor_68_face_landmarks.dat预测器能够准确地定位人脸的68个关键点,这些关键点涵盖了眼睛、眉毛、鼻子、嘴巴等面部特征。
  2. 辅助其他应用:通过定位这些关键点,该预测器可以为后续的人脸识别、人脸对齐、表情识别、面部动作捕捉等应用提供基础数据支持。

二、原理

  1. 基于机器学习shape_predictor_68_face_landmarks.dat预测器是基于机器学习算法构建的,它通过对大量标注了人脸关键点的图像进行训练,学习人脸关键点的特征。
  2. 模型内部结构
    • 层次化的神经网络:预测器内部包含了多个层次的神经网络,这些网络用于逐步细化面部特征的定位
    • 卷积神经网络(CNN)层:这些层包括卷积层、池化层、全连接层等,它们共同作用于输入图像,提取特征并预测关键点坐标。
  3. 工作流程
    • 加载模型:使用dlib库提供的函数加载shape_predictor_68_face_landmarks.dat预测器模型。
    • 人脸检测:首先使用dlib库的人脸检测器检测图像中的人脸区域。
    • 关键点预测:将检测到的人脸区域作为输入,调用预测器的predict函数,得到68个面部关键点的坐标。
    • 结果可视化:可以将这些关键点在原始图像上标出来,以直观展示面部特征的定位结果。
  4. 训练过程
    • shape_predictor_68_face_landmarks.dat预测器是在大量标注了人脸关键点的图像数据集上训练得到的。
    • 训练过程中,模型会不断调整其参数,以最小化预测关键点位置与实际标注位置之间的误差。

三、代码实现

  • 人脸图像

在这里插入图片描述

1. 构造人脸检测器

import numpy as np
import cv2
import dlibimg = cv2.imread('renlian.jpg')
detector = dlib.get_frontal_face_detector()# 构造人脸检测器
faces = detector(img,0)# 检测人脸

2. 载入模型(加载预测器)

  • 函数方法
dlib.shape_predictor()载入模型
  • 代码
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

3. 获取关键点

  1. 遍历每张脸的关键点,获取关键点
  2. 将关键点转化为坐标形式
  3. 将关键点通过enumerate()函数方法同时获得每个点对应的索引,用于编号
for face in faces: # 获取每一张脸的关键点shape = predictor(img,face) # 获取关键点# 将关键点转换为坐标(x,y)的形式landmarks = np.array([[p.x,p.y] for p in shape.parts()])# 绘制每一张脸的关键点for idx,point in enumerate(landmarks):pos = (point[0],point[1])# 当前关键点坐标# 针对当前关键点,绘制一个实心圆cv2.circle(img,pos,2,(0,255,0),thickness=-1)cv2.putText(img,str(idx),pos,cv2.FONT_HERSHEY_SIMPLEX,0.4,(255,255,255),1,cv2.LINE_AA)

4. 显示图像

cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

5. 完整代码

"""-----关键点定位:定位到人脸的眼睛、鼻子、眉毛、轮廓等-----"""
import numpy as np
import cv2
import dlibimg = cv2.imread('renlian.jpg')
detector = dlib.get_frontal_face_detector()# 构造人脸检测器
faces = detector(img,0)# 检测人脸# dlib.shape_predictor载入模型(加载预测器)
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
for face in faces: # 获取每一张脸的关键点shape = predictor(img,face) # 获取关键点# 将关键点转换为坐标(x,y)的形式landmarks = np.array([[p.x,p.y] for p in shape.parts()])# 绘制每一张脸的关键点for idx,point in enumerate(landmarks):pos = (point[0],point[1])# 当前关键点坐标# 针对当前关键点,绘制一个实心圆cv2.circle(img,pos,2,(0,255,0),thickness=-1)cv2.putText(img,str(idx),pos,cv2.FONT_HERSHEY_SIMPLEX,0.4,(255,255,255),1,cv2.LINE_AA)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

总结

本篇介绍了如何通过Dlib库自带的预测器,来进行人脸的关键点定位,并将它显示出来。得到关键点定位后,我们就可以通过点位的距离变换,简单的判断人脸表情变换情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450773.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【汇编语言】寄存器(内存访问)(二)—— DS和[address]

前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优…

day46|72. 编辑距离647. 回文子串516.最长回文子序列 5 最长回文子串

文章目录 前言72. 编辑距离思路方法一647. 回文子串思路方法一方法二516.最长回文子序列思路方法一5 最长回文子串总结前言 72. 编辑距离 思路 总体思路:dp定义直接为操作数,递推公式分情况讨论,如果两个元素相等,那操作数不变;如果不相等,那么操作数就会改变–三种情况…

免费证件照app哪个好?哪个效果比较好?

在日常生活中,证件照的需求无处不在,尤其是在求职、签证和考试等场合。 许多人可能会觉得制作证件照需要花费不少费用,但其实市场上有许多免费的证件照制作软件,能够轻松满足你的需求。 这些软件不仅操作简单,更具备…

如何在word里面给文字加拼音?

如何在word里面给文字加拼音?在现代社会,阅读已经成为了我们日常生活中不可或缺的一部分。尤其是在学习汉语的过程中,拼音的帮助显得尤为重要。为了帮助大家更好地理解和掌握汉字的发音,许多教师和学生都希望能够在Word文档中为文…

什么是网络代理

了解网络代理 网络代理是一种特殊的网络服务,它允许一个网络终端(通常指客户端)通过这个服务与另一个网络终端(通常指服务器)进行非直接的连接。网络代理服务器位于发送主机和接收主机之间,接收网络请求&a…

使用人体关键点驱动FBX格式虚拟人原理【详解】

文章目录 1、使用人体关键点数据驱动FBX格式虚拟人的总流程2、使用mediapipe检测人体关键点和插值平滑2.1 mediapipe检测人体关键点2.2 人体关键点的插值平滑 3、将2d关键点转为3d关键点4、旋转矩阵4.1 旋转矩阵4.2 旋转矩阵转为四元数 5、将旋转矩阵用于虚拟人的驱动5.1 基础旋…

高分SCI发文利器!植物脂质代谢数据库——CLAIR

脂质是全球重要的大宗商品和工业原料。世界上消耗的24种脂质中,大部分来自植物。全面了解不同油料作物中与脂质生物合成相关的基因和机制,对于通过分子生物学和育种来提高这些作物的含油性状至关重要。 2024年2月,Plant Communications在线发…

台积电Q3业绩猛增,市值破万亿美元!

KlipC报道:全球晶圆代工龙头台积电发布第三季度财报,财报显示,三季度营收7596.9亿新台币(约235亿美元),同比增长39%,市场预期7421.66亿元新台币;净利润达到3252.58亿新台币&#xff…

【可答疑】基于51单片机的智能衣柜(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

云计算第四阶段: cloud二周目 07-08

cloud 07 一、k8s服务管理 创建服务 # 资源清单文件 [rootmaster ~]# kubectl create service clusterip websvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim websvc.yaml --- kind: Service apiVersion: v1 metadata:name: websvc spec:type: ClusterIPselector…

汽车建模用什么软件最好?汽车建模渲染建议!

在汽车建模和渲染领域,选择合适的软件对于实现精确的设计与高质量的视觉效果至关重要。那么不少的汽车设计师如何选择合适的建模软件与渲染方案呢,一起来简单看看吧! 一、汽车建模用软件推荐 1、Alias Autodesk旗下的Alias系列软件是汽车设…

数据结构实验十二 图的遍历及应用

数据结构实验十二 图的遍历及应用 一、【实验目的】 1、 理解图的存储结构与基本操作; 2、熟悉图的深度度优先遍历和广度优先遍历算法 3、掌握图的单源最短路径算法 二、【实验内容】 1.根据下图(图见实验11)邻接矩阵,编程实…

刚刚,ChatGPT推出Windows客户端!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

C# + SQLiteExpert 进行(cipher)加密数据库开发+Costura.Fody 清爽发布

一:让 SQLiteExpert 支持(cipher)加密数据库 SQLiteExpert 作为SQlite 的管理工具,默认不支持加密数据库的,使其成为支持(cipher)加密数据库的管理工具,需要添加e_sqlcipher.dll &…

1997-2022年各省农作物总播种面积数据(无缺失)

1997-2022年各省农作物总播种面积数据 1、时间:1997-2022年 2、来源:国家统计局、统计年鉴 3、指标:农作物总播种面积(千公顷) 4、范围:31省 5、缺失情况:无缺失 6、指标解释:农作物播种面积指农业生…

PCL 点云配准-改进的RANSAC算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算FPFH特征 2.1.2 RANSAC配准 2.1.3 可视化点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总&#xff0…

基于SSM高校课程评价的设计

教师账户功能包括:系统首页,个人中心,指标信息管理,课程信息管理,教师自评管理 学生账号功能包括:系统首页,个人中心,课程信息管理,学生评价管理 开发系统:…

不坑盒子在哪儿下载?

不坑盒子是一款Office办公软件的插件,支持MicroSoft Office和WPS的三件套(Word、Excel、PPT)。 可以为你的Office软件增加数百个实用功能,比如:自动排版、智能写作、仿手写、全文加拼音、稿子模板、一键删除、数据分发…

SAP物料凭证报表字段调整

业务场景: 报表MB51的输入和输出字段调整: 输入(选择界面) 输出界面 可以看到在这是没有布局调整的 后台路径: SPRO-物料管理-库存管理和实际库存-报表-定义物料凭证列表的字段选择 事务码:SM30-V_MMI…

docker构建jar镜像

文章目录 构建 DockerFile将jar包上传到创建的目录当中在目录中创建 Dockerfile 文件构建镜像创建并启动容器说明 构建 DockerFile [root192 /]# mkdir my [root192 /]# cd my [root192 my]# 将jar包上传到创建的目录当中 在目录中创建 Dockerfile 文件 vi Dockerfile FROM …