《深度学习》Dlib、OpenCV 关键点定位 原理及案例解析

ops/2024/10/18 12:04:10/

目录

一、关键点定位

1、什么是关键点定位

2、步骤

1)加载预训练的人脸检测器

2)加载预训练的关键点检测器

3)读取图像

4)检测人脸

5)关键点检测

6)可视化关键点

7)显示图像

二、案例实现

1、定位图片关键点

1)调试模式

2)运行结果

2、摄像头实时定位

运行结果:


一、关键点定位

1、什么是关键点定位

        关键点定位是指在人脸图像中自动定位人脸的关键点,如眼睛、鼻子、嘴巴等特征点。

        在dlib中,通过使用预训练的模型(如shape_predictor_68_face_landmarks.dat)来实现,该模型可以检测并标定68个面部特征点,这些特征点包括脸颊、眉毛、眼睛、鼻子、嘴巴等部位的关键点,通过它们可以对人脸进行更深入的分析和处理。

2、步骤

        1)加载预训练的人脸检测器

                使用dlibget_frontal_face_detector()函数加载预训练的人脸检测器模型。

        2)加载预训练的关键点检测器

                使用dlibshape_predictor()函数加载预训练的关键点检测器模型。

        3)读取图像

                使用OpenCV的imread()函数读取图像。

        4)检测人脸

                使用人脸检测器模型来检测图像中的人脸。调用detector()函数可以返回一个包含人脸位置的矩形列表。

        5)关键点检测

                对于每个检测到的人脸,使用关键点检测器模型来检测人脸的关键点。调用predictor()函数可以返回一个包含关键点位置的对象。

        6)可视化关键点

                使用OpenCV的circle()函数,在图像上绘制检测到的关键点。

        7)显示图像

                使用OpenCV的imshow()函数显示带有关键点的图像。

二、案例实现

1、定位图片关键点

import numpy as np
import cv2
import dlibimg = cv2.imread("renlian.png")   # 读取图像
detector = dlib.get_frontal_face_detector()   # 构造人脸检测器
faces = detector(img,0)   # 使用检测器来检测人脸,0表示对图像进行上采样的次数为0
# dlib.shape_predictor载入模型(加获预测器)
# 可以从https://github.com/davisking/dlib-models下载  xmlopencv自己训练好的特征
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")  # 加载预训练模型,用于定位人脸的68个关键点
for face in faces:  # 遍历每一张脸,然后在上面绘制关键点shape = predictor(img,face)  # 获取关键点# 将关键点转换为坐标(x,y)的形式#landmarks = np.matrix([lp.x,p.y]for p in shape.parts()])landmarks = np.array([[p.x,p.y] for p in shape.parts()])  # shape.parts()返回一个包含所有人脸关键点的迭代器,遍历出来每张人脸的关键点坐标再传入列表然后将其转换为矩阵类型for idx, point in enumerate(landmarks):    # 使用enumerate将每个关键点的索引和值遍历除去pos = [point[0], point[1]]  # 获取当前关键的坐标cv2.circle(img, pos,  2, color=(0, 255, 0), thickness=-1)   # 针对当前关键点,绘制一个圆,结尾的-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(0)
cv2.destroyAllWindows()
        1)调试模式

        2)运行结果

2、摄像头实时定位

import numpy as np
import cv2
import dlibcap = cv2.VideoCapture('笑容.mp4')   # 打开视频文件
# cap = cv2.VideoCapture(0)   # 调用摄像头if not cap.isOpened():   # 如果打开失败print("Cannot open camera")exit()  # 终止程序detector = dlib.get_frontal_face_detector()   # 构造人脸检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")   # 导入人脸关键点检测的预训练模型,检测人脸的68个特征点while True:  # 建立死循环,用来不停地读取视频的每一帧画面ret, img = cap.read()  # 读取视频帧,返回读入状态的布尔值和图片,一次读取一帧画面if not ret:  # 读取失败,则退出循环print("不能读取摄像头")breakfaces = detector(img,0)   # 调用人脸检测器,检测人脸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)cv2.imshow("img",img)k = cv2.waitKey(20)  # 每一帧画面执行20毫秒if k == 27:  # 如果键盘点击esc键,终止循环break
# 释放资源
cv2.destroyAllWindows()
        运行结果:


http://www.ppmy.cn/ops/126468.html

相关文章

关于武汉芯景科技有限公司的限流开关芯片XJ6288开发指南(兼容SY6288)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.EN引脚控制IN和OUT引脚的通断 2.OCB引脚指示状态 3.过流自动断开

【解决】webstrom uniapp rpx格式化空格 报错飘红

解决办法 1、安装 wechat mini program support 插件 2. 设置 wechat mini program 里小程序支持选为启用 3. 重新格式化显示正常&#xff0c;也不飘红了 注意要style开启scss支持lang"scss"&#xff0c;否则也会飘红报错 <style lang"scss"><…

使用Python在Jupyter Notebook中显示Markdown文本

使用Python在Jupyter Notebook中显示Markdown文本 引言1. 导入必要的模块2. 定义一个函数来显示Markdown文本3. 使用print_md函数显示Markdown文本4. 总结 引言 作为一名Python初级程序员&#xff0c;你可能已经熟悉了Jupyter Notebook这个强大的工具。Jupyter Notebook不仅支…

【AIGC】AI如何匹配RAG知识库: Embedding实践,语义搜索

引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式&#xff0c;我们除了使用之外可以尝试了解其是如何实现的。在实现RAG的过程中Embedding是非常重要的手段。本文将带你简单地了解AI工具都是如何通过Embedding去完成语义分析匹配的。 Embedding技术简…

【系统架构设计师】案例专题六(8大系统架构设计之8): 大数据架构设计考点梳理

更多内容请见: 备考系统架构设计师-核心总结目录 文章目录 一、传统数据处理系统存在的问题二、大数据处理系统架构分析1、大数据处理系统面临挑战2、大数据处理系统架构特征三、Lambda架构1、Lambda架构对大数据处理系统的理解2、Lambda架构应用场景3、Lambda架构介绍4、Lamb…

人脸识别-特征算法

文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术&#xff0c;其核心在于通过特定的算法和技术手段&#xf…

java幂等控制问题

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

华为OD机试 - 幻方修复(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…