《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位

news/2024/10/20 20:02:22/

文章目录

  • 1. 安装必要的库
  • 2. 下载dlib的人脸检测器和关键点预测器模型
  • 3. 编写代码

人脸关键点定位是指通过计算机视觉技术,识别和定位人脸图像中的关键点,如眼睛、鼻子、嘴巴等特定位置。这些关键点的准确定位对于人脸识别、表情分析、姿态估计等应用具有重要意义。

1. 安装必要的库

  • 首先,你需要确保你的PyCharm环境中安装了dlib、opencv-python(或cv2)和numpy等库。你可以通过PyCharm的Settings -> Project: [Your Project Name] -> Python Interpreter来添加这些库,或者使用pip命令在终端中安装它们:

    pip install dlib opencv-python numpy
    
  • 在终端里直接安装 dlib可能会出现问题,可以参照以下来链接中的内容进行安装

    • https://blog.csdn.net/weixin_73504499/article/details/142977202?spm=1001.2014.3001.5501

dlib_12">2. 下载dlib的人脸检测器和关键点预测器模型

dlib提供了预训练的人脸检测器和关键点预测器模型。你需要从dlib的官方资源中下载这些模型,并将它们保存到你的项目中。

  • 人脸检测器模型(例如:shape_predictor_68_face_landmarks.dat
  • 人脸识别模型(可选,如果你还需要进行人脸识别)

你可以从dlib的模型下载页面获取这些模型。

3. 编写代码

  • 以下是一个简单的Python脚本,它使用dlib库来加载模型,检测图像中的人脸,并定位关键点:

    import numpy as np
    import cv2
    import dlib# 读取图片
    image = cv2.imread('kobe_2.jpg')    # 构造人脸检测器
    detector = dlib.get_frontal_face_detector()  # 检测人脸
    faces = detector(image, 0) # dlib.shape_predictor 载入模型(加载预测器)
    # 可以从 https://github.com/davisking/dlib-models 下载 xmlopencv 自己训练好的特征,dlib人脸关键点的检测模型
    predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
    # 获取每一张脸的关键点(实现检测)
    for face in faces:  shape = predictor(image, face)  # 获取关键点# 将关键点转换为坐标(x,y)的形式landmarks = np.array([[p.x, p.y] for p in shape.parts()])# 绘制每一张脸的关键点(绘制shape中的每个点)for idx, point in enumerate(landmarks):pos = [point[0], point[1]]  # 当前关键点的坐标# 针对当前关键点,绘制一个实心圆cv2.circle(image, pos, 3, color=(0, 255, 0), thickness=-1)# 将每个关键点的索引号写在旁边,             普通大小的等宽字体                                                  线条类型:抗锯齿线条。cv2.putText(image, str(idx), pos, cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255, 255, 255), 1, cv2.LINE_AA)# 显示结果
    cv2.imshow("result", image)
    cv2.waitKey(0)
    # 关闭所有OpenCV创建的窗口
    cv2.destroyAllWindows()
    
  • 结果如下:
    在这里插入图片描述

  • 下面是通过打开电脑摄像头进行检测画面中出现人脸的关键点定位,完整代码如下:

    import numpy as np
    import cv2
    import dlib# 打开摄像头 0 ——> 电脑自带摄像头,1 ——> 电脑外接摄像头 
    cap = cv2.VideoCapture(0)detector = dlib.get_frontal_face_detector()predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")if not cap.isOpened():print("Cannot open camera")exit()while True:ret, image = cap.read()  # 如果正确读取帧,ret为Trueimage = cv2.flip(image, 1)if not ret:print("不能读取摄像头")breakfaces = detector(image, 0)for face in faces:shape = predictor(image, 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(image, pos, 3, color=(0, 255, 0), thickness=-1)cv2.putText(image, str(idx), pos, cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255, 255, 255), 1, cv2.LINE_AA)cv2.imshow("result", image)if cv2.waitKey(10) == 27:breakcap.release()
    cv2.destroyAllWindows()
    

http://www.ppmy.cn/news/1540603.html

相关文章

基于SSM汽车零部件加工系统的设计

管理员账户功能包括:系统首页,个人中心,员工管理,经理管理,零件材料管理,产品类型管理,产品信息管理,产品出库管理,产品入库管理 员工账号功能包括:系统首页…

C++中的vector介绍(常用函数)

目录 vector的介绍及使用1.vector的介绍2.vector的使用2.1vector的定义2.2 vector iterator 的使用2.3vector 空间增长问题2.4 vector 增删查改2.5 vector 迭代器失效问题。(重点) 3.动态二维数组理解4.模拟实现reserve vector的介绍及使用 1.vector的介…

使用Python解决化学问题的实用指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents

在企业环境中,时常需要通过使用HTTP Proxy访问Internet,在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤,以便这些服务能够正常连接到Internet。 一…

【NVIDIA NIM 黑客松训练营】利用大模型作词一首

没有GPU,也可以尝试一下NVIDIA提供的免费大模型环境。 这里准备的demo调用了3.8B参数的轻量级模型:microsoft/phi-3-mini-4k-instruct, 加上Flask做一个简单的网页调用演示。 a) 项目结构 app.py templates/index.html b) 安装引用 # pip install F…

代码随想录第一天|704.二分查找 27.移除元素

704. 写法一&#xff1a;左右区间可以相等&#xff0c;left right(左右区间的值都可以取到&#xff0c;这是更新left和right的依据) class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size()-1;while(left<ri…

【Linux系列】在 Linux 中使用 `watch` 命令监控 Docker 容器状态

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL中的数字数据类型的一个概述

MySQL中的数字数据类型可以分为几大类&#xff0c;主要包括整数类型、浮点数类型和定点数类型、日期和时间类型&#xff0c;以及二进制类型中涉及数字的部分&#xff08;如BIT&#xff09;。下面是对这些类型的一个概述&#xff1a; ### 1. 整数类型 整数类型用于存储没有小数…