使用OpenCV和dlib库进行人脸关键点定位
文章目录
- 引言
- 一、环境准备
- 二、代码实现解析
- 1. 导入必要的库
- 2. 加载图像和人脸检测器
- 3. 加载关键点预测模型
- 4. 检测并绘制关键点
- 5. 显示结果
- 三、68个关键点的含义
- 四、常见问题解决
- 五、总结
引言
人脸关键点定位是计算机视觉中的一项基础任务,它在人脸识别、表情分析、虚拟化妆等应用中发挥着重要作用。本文将介绍如何使用dlib库来实现精准的人脸关键点检测。
一、环境准备
在开始之前,我们需要安装必要的Python库:
pip install numpy opencv-python dlib
此外,还需要下载dlib的预训练模型文件:
- shape_predictor_68_face_landmarks.dat - 包含68个人脸关键点的预测模型
二、代码实现解析
让我们逐步分析人脸关键点检测的完整代码:
1. 导入必要的库
import numpy as np
import cv2
import dlib
- numpy :用于数值计算
- cv2 :OpenCV库,用于图像处理
- dlib :强大的机器学习库,包含现成的人脸检测和关键点定位模型
2. 加载图像和人脸检测器
img = cv2.imread("face.png")
detector = dlib.get_frontal_face_detector() # 构造人脸检测器
faces = detector(img, 0) # 检测人脸
get_frontal_face_detector() 返回一个基于HOG特征和线性分类器的人脸检测器,detector() 方法返回检测到的人脸矩形框列表。
3. 加载关键点预测模型
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
shape_predictor 是dlib提供的预训练模型,能够检测人脸的68个关键点,包括眼睛、眉毛、鼻子、嘴巴和脸部轮廓。
4. 检测并绘制关键点
for face in faces: # 遍历每张检测到的人脸shape = predictor(img, face) # 获取关键点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, color=(0, 255, 0), thickness=-1) # 绘制实心圆cv2.putText(img, str(idx), pos, cv2.FONT_HERSHEY_SIMPLEX, 0.4,(255, 255, 255), 1, cv2.LINE_AA) # 标注关键点编号
5. 显示结果
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
结果运行如下:
三、68个关键点的含义
dlib的68点模型将人脸关键点分为以下几个区域:
- 0-16点:下巴轮廓
- 17-21点:右眉毛
- 22-26点:左眉毛
- 27-35点:鼻子
- 36-41点:右眼
- 42-47点:左眼
- 48-67点:嘴巴
了解这些点的分布有助于后续的面部特征分析和处理。
四、常见问题解决
-
检测不到人脸:
- 确保人脸在图像中足够大
- 尝试调整 detector() 的第二个参数(上采样次数)
-
关键点不准确:
- 检查图像质量(光照、模糊度等)
- 尝试使用更高精度的模型
-
模型加载失败:
- 检查模型文件路径是否正确
- 确保下载的模型文件完整
五、总结
dlib提供了一个简单而强大的人脸关键点检测解决方案。通过本文介绍的方法,你可以快速实现精准的人脸特征点定位,为后续的人脸分析应用奠定基础。虽然深度学习-based的方法在某些场景下可能更准确,但dlib的解决方案在速度和易用性方面仍有很大优势。
相关文章:
使用OpenCV和dlib库进行人脸关键点定位
文章目录 引言一、环境准备二、代码实现解析1. 导入必要的库2. 加载图像和人脸检测器3. 加载关键点预测模型4. 检测并绘制关键点5. 显示结果 三、68个关键点的含义四、常见问题解决五、总结 引言 人脸关键点定位是计算机视觉中的一项基础任务,它在人脸识别、表情分…...
Transformer数学推导——Q27 证明时序注意力(Temporal Attention)在视频模型中的帧间依赖建模
该问题归类到Transformer架构问题集——注意力机制——跨模态与多模态。请参考LLM数学推导——Transformer架构问题集。 在视频理解任务中,捕捉帧与帧之间的时间依赖关系(如动作的连贯性、物体的运动轨迹)是核心挑战。时序注意力(…...
相机-IMU联合标定:相机标定
文章目录 📚简介💡标定方法🚀标定工具kalibr🚀标定数据录制🚀相机标定📚简介 在 VINS(Visual-Inertial Navigation System,视觉惯性导航系统) 中,相机标定 是确保视觉数据准确性和系统鲁棒性的关键步骤,其核心作用可总结为以下方面: 消除镜头畸变,提升特征…...
sevlet API
sevlet API API就是一组类和方法 HttpServlet 这是写servlet代码用到的核心的类,通过继承这个类,并重写其中的方法,让Tomcat去调用这里的逻辑. init:webapp被加载的时候,执行 destroy:webapp被销毁的时候(Tomcat结束)执行,进行一些收尾工作.但是这个方法不保证能够调用到!!…...
python程序设习题答案
第一章 1.在下列领域中,使用 Python 不可能实现的是( C ) A . Web 应用开发 B .科学计算 C .操作系统管理 D .游戏开发 2.Python程序文件的扩展名是( D )。 A.python B.pyt C.pt D.py 3&…...
[计算机科学#4]:二进制如何塑造数字世界(0和1的力量)
【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要: 二进制是计算机世界的基石,数学是世界的…...
一种在使用Kaggle并遇上会话中断时强行保存数据的方法
问题:kaggle会话结束后,无法保存训练模型时记录的excel文件 解决方法:使用kaggle时,使用下面脚本可将保存到训练数据excel转为链接形式,从而在kaggle会话终止时也可以下载到该excel文件 import base64 import pandas …...
【人工智能agent】--dify搭建智能体和工作流
【人工智能agent】--docker本地部署dify教程-CSDN博客 上期讲到如何部署dify,然后进入页面: docker服务: 目录 1.基础设置 2.创建聊天助手 3.创建知识库应用 4.创建智能体 5.创建工作流 5.1.文档总结规划 5.2.爬取网页新闻 1.基础设…...
[4282]PHP跨境电商源码-多语言商城源码/支持代理+商家入驻+分销+等等众多功能/带详细安装
源码获取:[4282]PHP跨境电商源码-多语言商城源码/支持代理商家入驻分销等等众多功能/带详细安装云溪资源网_源码下载,小程序源码下载,网站源码下载,游戏源码下载云溪资源网_源码下载,小程序源码下载,网站源码下载,游戏源码下载...
MongoDB的增删改查操作
1.文档创建 首先要插入数据前,要先创建数据库,创建完之后建立集合,然后才能进行增删改查的步骤 切换(新建)数据库: use <db> db是指要创建数据库的名称 新建集合: db.createCollection(…...
TimDbg
晚上随意浏览,发现一个有趣的网站: TimDbg 调试器谎言:堆栈损坏 // TimDbg 2022.11的一篇很有趣,讲如何培养裸眼反汇编的能力,即培训心智模型,模式识别能力。 识别内存中的模式 // TimDbg 我是用edge浏…...
MySQL 表的约束(二)
文章目录 自增长唯一键外键 自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。 create …...
大数据应用开发和项目实战
Matplotlib的介绍 Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。 Matplotlib 可以用来绘制各种静态,动态,交互式的图表。比如说散点图、柱状图等等。 Matplotlib Pyplot plot(…...
OpenLayers矢量数据可视化高级技巧(进阶二)
1. 高级样式技术 矢量数据的样式直接影响可视化效果的表达能力和美观度。OpenLayers提供了丰富的样式API,通过组合和创新,可以实现各种复杂的视觉效果。 1.1 动态样式 // 根据属性值动态设置样式 const vectorLayer new ol.layer.Vector({source: ne…...
实用的java技术架构组件汇总
1.后端数据校验 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>校验注解 jakarta.validation-api 规范提供如下: size hibern…...
Rmarkdown输出为pdf的方法与问题解决
R 是一种在数据分析与统计计算领域广泛使用的编程语言。其关键优势之一是能够生成高质量的报告和文档,这些报告和文档可以使用 RMarkdown 轻松定制和更新。在本文中,我们将探讨使用 R 从 RMarkdown 文件生成.pdf 文件 1.生成方法 新建Rmarkdown…...
【超详细讲解】什么是序列化和反序列化?
目录 一、什么是序列化(Serialization)? 举个直观的例子 二、什么是反序列化(Deserialization)? 三、为什么需要序列化? 四、常见的序列化格式对比 五、序列化底层是怎么做的?…...
深入浅出JavaScript常见设计模式:从原理到实战(2)
深入浅出JavaScript常见设计模式:从原理到实战(2) 本文是深入浅出JavaScript常见设计模式:从原理到实战(1)的续集 设计模式是一种在特定情境下解决软件设计中常见问题的通用方案或模板。在特定的开发场景中使用特定的设计模式,可以提升代码质…...
MySQL 主从复制
数据的高可用性、读写分离以及数据备份是至关重要的需求。MySQL 作为一款广泛使用的开源关系型数据库,其主从复制功能为解决这些问题提供了有效的方案。本文将详细介绍 MySQL 主从复制的原理、搭建步骤以及实际应用。 一、MySQL 主从复制原理 1.1 基本概念 MySQL…...
小目标检测的集成融合论文阅读
摘要 小目标检测常因图像模糊和分辨率低而受到阻碍,这给小目标的精确检测和定位带来了重大挑战。此外,传统的特征提取方法往往难以捕捉到这些目标的有效表征,因为下采样和卷积操作会导致小目标细节的模糊化。为了解决这些问题,本研究提出了一种基于集成融合的方法,通过利…...
IP SSL证书常见问题:快速实现HTTPS加密
SSL证书作为实现HTTPS加密和身份验证的关键工具,不仅适用于域名,还能直接绑定IP地址,为IP通信提供安全保障。 一、什么是IP SSL证书? IP SSL证书(IP HTTPS证书)是一种专为IP地址设计的SSL/TLS证书…...
Scratch——第20课 辗转相除法/绳子算法
辗转相除法是用于求取最大公约数时需要用到的方法,它还有个名字称为绳子算法,这类题目只要理解辗转相处的原理即可拿下。 一、辗转相除法的基本原理 两个整数的最大公约数不变,当较大数减去较小数后,得到的差值与较小数的最大公…...
MYOJ_1349:(洛谷P3951)[NOIP 2017 提高组] 小凯的疑惑(数学公式套用,两步搞定代码)
提示 本题代码纯属数学的结晶,因此肥肠简单,但需要一定理解。 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付…...
如何免费把PPT的页面输出为透明的图片-快速制作图新说汇报内容
0.序 经常有朋友问想把PPT中的内容输出为图片,但是PPT里面的officePlus还得付费才可以。不付费就带水印还不高清,关键是还不透明,如果需要透明就设置纯底色去PS里面抠图(可自动化),或者手动右键挨个输出。…...
操作系统——第四章(文件管理与文件的逻辑结构)
一、文件系统基础 1.文件的属性 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性。因此标识符只是操作系统用…...
剑指offer经典题目(七)
目录 动态规划 字符串相关 排序思想相关 链表相关 动态规划 题目1:输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。OJ地址 图示如下。 题目解析:…...
[RoarCTF 2019]Easy Calc 详解
[RoarCTF 2019]Easy Calc 1 ajax 是进行前后端交互的 但是我们发现一个waf 就是他提示的"calc.php?num"encodeURIComponent($("#content").val()) ?num 的值必须是数字审计一下 foreach 发现了num的限制但是eval是rce的标志所以我们首选的就是使用命令…...
AI日报 - 2025年04月29日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | 巨头CEO预测AGI时间线,5年内或达人类认知水平;Yann LeCun强调多模态训练重要性。 关于AGI定义和实现时间的讨论升温,对超越纯文本训练的需求成为共识。 ▎💼 商业动向…...
Kubernetes的错误信息处理
报错信息 E0428 13:18:25.531614 3193818 memcache.go:287] couldn’t get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request 以下是处理该 Kubernetes 指标服务报错的系统化解决方案: 错误诊断流程 # 1. 检查 …...
杰理-安卓通过map获取时间的时候,部分手机切换sbc和aac时候单耳无声音
杰理-安卓通过map获取时间的时候,部分手机切换sbc和aac时候单耳无声音 #if USER_SUPPORT_PROFILE_MAPif(tws_api_get_role()0){ //主机才获取,否则切换sbc 和 aac 的时候影响单耳无声音user_send_cmd_prepare(USER_CTRL_MAP_READ_TIME,0,NULL);} #endif…...
基于 Python 的实现:居民用电量数据分析与可视化
基于 Python 的实现:居民用电量数据分析与可视化 本文将介绍如何利用 Python 技术栈(包括 pymysql、pandas、matplotlib 等库)对居民用电量数据进行分析和可视化,以帮助我们更好地理解用电行为模式。 数据准备 在MySQL数据库中创建数据,,数据库表结构如下: date:记录…...
el-transfer穿梭框数据量过大的解决方案
一:背景 我们这个穿梭框获取的是项目的全量数据,在左边大概有5000条,自己测试了一下5000条数据的效果,发现异常的卡顿,本来打算像el-select一样去解决的(只显示一部分,在搜索的时候去全量搜索&a…...
【3D基础】深入解析OBJ与MTL文件格式:Blender导出模型示例及3D开发应用
引言 在3D模型开发和3D引擎加载过程中,OBJ格式是最基础、最常见的标准之一。即便在今天流行的GLTF、USDZ格式出现后,OBJ依然是建模软件和渲染引擎普遍支持的基本格式。 本文以Blender导出的立方体模型为例,详细讲解OBJ与MTL文件每一部分的含…...
Fiddler+Yakit实现手机流量抓包和小程序抓包
文章目录 一、小程序抓包1、配置Fiddler2、配置Yakit 二、手机流量抓包1、配置Fiddler2、手机连接电脑热点并配置代理服务器3、手机安装证书4、配置Yakit 三、总结 操作工具:Yakit Fiddler 一、小程序抓包 1、配置Fiddler 点击Tools—>Options进入如下配置页面…...
C++实时统计数据均值、方差和标准差
文章目录 1. 算法原理2. 类设计3. 完整代码实现4. 总结 本文采用了一种递推计算方法(Welford 算法)实时更新数据的均值、方差和标准差,其算法原理及实现如下。 1. 算法原理 Welford算法是由B.P.Welford于1962年提出的,用于计…...
【广州华锐视点】AR 远程协同:突破时空限制的利器
AR 远程协同,简单来说,就是利用增强现实(AR)技术,打破地理空间的束缚,让身处不同地方的人们能够在同一虚拟空间中进行实时协作。它就像是为人们搭建了一座无形的桥梁,将现实与虚拟紧密相连,让沟通和协作变得…...
【Docker】——在Docker工具上安装创建容器并完成项目部署
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
9. 使用Gazebo和Rviz显示机器人(包括运动控制,雷达,摄像头仿真以及显示)
概述:通过Gazebo和Rviz集成机器人,机器人的组件包括底盘,雷达,摄像头,可以在Gazebo中仿真和显示。并且能够订阅运动控制话题,雷达话题,摄像头话题在Rviz中仿真和显示。 1.新建功能包和导入依赖 …...
跨语言哈希一致性:C# 与 Java 的 MD5 之战?
在跨平台或异构系统集成的场景中,我们经常需要在不同的编程语言之间交换数据或验证数据一致性。MD5 作为一种广泛使用的哈希算法,就常常扮演着生成唯一标识或校验数据完整性的角色。然而,不少开发者可能会遇到这样一个令人困惑的问题…...
赋能航天教育:高校卫星仿真教学实验平台解决方案
随着全球航天事业的飞速发展,对高素质航天人才的需求日益增长。如何在高校阶段提前锻炼学生的航天工程实践能力,成为教育界的重要命题。作为领先的通信与网络技术供应商,IPLOOK基于自身在5G核心网、卫星通信及仿真平台领域的深…...
H指数(中等)
可以先对数组从小到大排序,然后数组后面往前遍历,计算h的值。 如果从后往前遍历,当前位置的数,如果大于h,就说明又找到了一个引用次数大于h的文献,h指数可以加一了。 class Solution {public int hIndex(…...
推荐 1 款 9.3k stars 的全景式开源数据分析与可视化工具
Orama 是一个开源的数据分析与可视化项目,由askorama团队开发和维护。该项目旨在为用户提供一套强大而易用的工具集,帮助用户轻松处理和理解大规模数据,通过创建交互式且引人入胜的数据可视化图表,揭示隐藏在数据背后的深层次洞察…...
无人船 | 图解基于LQR控制的路径跟踪算法(以全驱动无人艇WAMV为例)
目录 1 最优控制线性二次型问题2 LQR的价值迭代推导3 基于全驱动无人船动力学的LQR4 跟踪效果分析 1 最优控制线性二次型问题 最优控制理论是一种数学和工程领域的理论,旨在寻找如何使系统在给定约束条件下达到最佳性能的方法。它的基本思想是通过选择合适的控制输…...
检查IBM MQ SSL配置是否成功
使用 DISPLAY 命令检查任务是否已成功完成。 如果任务成功,那么生成的输出类似于以下示例中显示的输出。 从队列管理器 QM1,输入以下命令: DISPLAY CHS(QM1.TO.QM2) SSLPEER SSLCERTI 生成的输出类似于以下示例: DISPLAY CHSTATUS(QM1.TO.QM2) SSLPE…...
EasyRTC嵌入式音视频通信SDK智能安防与监控系统的全方位升级解决方案
一、方案背景 随着安全防范意识的提升以及物联网、人工智能技术的发展,智能安防与监控系统在各领域的应用愈发广泛。传统监控系统多以单向视频传输为主,缺乏实时交互能力。EasyRTC凭借其低延迟、高可靠的实时音视频通信技术,能为智能安防与…...
Meta 推出 WebSSL 模型:探索 AI 无语言视觉学习,纯图训练媲美 OpenAI CLIP
Web-SSL 探索了视觉自监督学习(SSL)在网络规模数据上的扩展潜力。通过调整模型大小和训练数据,我们证明了纯视觉模型可以与 CLIP 等语言监督方法相媲美,甚至超越它们,从而对 "语言监督是学习多模态建模所需的强大…...
node.js puppeteer 实践
puppeteer 介绍 Puppeteer 是 Google 推出的一个 Node.js 库,它通过 Chromium 提供了一个高效、简洁的 API,用于操作无头浏览器或具有 UI 的完整浏览器。它广泛应用于 自动化测试、数据抓取、页面性能分析和 UI 测试等领域。 Puppeteer 是一个 Node 库&…...
【现代深度学习技术】循环神经网络07:通过时间反向传播
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
如何在idea中写spark程序
一、环境准备 1. 安装 IntelliJ IDEA: 下载并安装 IntelliJ IDEA(推荐使用 Community 版本,它已经支持 Scala 和 Spark 开发)。 官方下载地址:[JetBrains IntelliJ IDEA](https://www.jetbrains.com/idea/downlo…...
硬件加密+本地部署,大模型一体机如何打造AI安全护城河?
2025年,大模型技术加速渗透千行百业,但随之而来的安全风险也引发广泛关注。数据显示,近九成企业部署的大模型服务器存在“裸奔”隐患,数据泄露、模型篡改、算力劫持等问题频发。 在此背景下,大模型一体机凭借“开箱即…...