【深度学习实战—9】:基于MediaPipe的人脸关键点检测

news2024/11/17 22:25:58

✨博客主页:王乐予🎈
✨年轻人要:Living for the moment(活在当下)!💪
🏆推荐专栏:【图像处理】【千锤百炼Python】【深度学习】【排序算法】

目录

  • 😺一、MediaPipe概述
  • 😺二、MediaPipe人脸关键点检测概述
  • 😺三、关键函数
  • 😺四、代码实现
  • 😺五、检测结果

😺一、MediaPipe概述

MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。

MediaPipe目前支持的解决方案(Solution)及支持的平台如下图所示:
在这里插入图片描述

😺二、MediaPipe人脸关键点检测概述

MediaPipe Face Landmarker 任务允许检测图像和视频。可以使用此任务来识别人类的面部表情,应用面部滤镜和效果,并创建虚拟形象。该任务输出 3D 人脸标志。

MediaPipe人脸关键点检测模型包含了478个3D关键点,如下图所示:
在这里插入图片描述
人脸标记使用一系列模型来预进行预测。 第一个模型检测人脸,第二个模型在检测到的人脸上实现定位,第三个模型使用这些标记来识别面部特征。

😺三、关键函数

import mediapipe as mp

mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False,
                                  max_num_faces=5,      # Maximum number of detected faces
                                  refine_landmarks=True,
                                  min_detection_confidence=0.5,
                                  min_tracking_confidence=0.5)

参数解释如下:

  • max_num_faces:要检测的最大人脸数
  • refine_landmarks:是否进一步细化眼睛和嘴唇周围的地标坐标,并输出虹膜周围的其他地标。
  • min_detection_confidence:人脸检测的置信度
  • min_tracking_confidence:人脸跟踪的置信度

😺四、代码实现

import mediapipe as mp
import numpy as np
import cv2


mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False,
                                  max_num_faces=5,      # Maximum number of detected faces
                                  refine_landmarks=True,    # Whether to further refine the landmark coordinates around the eyes and lips
                                  min_detection_confidence=0.5,
                                  min_tracking_confidence=0.5)

mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles

cap = cv2.VideoCapture(0)

while True:

    ret, img = cap.read()
    height, width, channels = np.shape(img)
    img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

    results = face_mesh.process(img_RGB)

    if results.multi_face_landmarks:
        for face_landmarks in results.multi_face_landmarks:
            # Draw a facial mesh
            mp_drawing.draw_landmarks(image=img,
                                      landmark_list=face_landmarks,
                                      connections=mp_face_mesh.FACEMESH_TESSELATION,
                                      landmark_drawing_spec=None,
                                      connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())
            # Draw facial contours
            mp_drawing.draw_landmarks(image=img,
                                      landmark_list=face_landmarks,
                                      connections=mp_face_mesh.FACEMESH_CONTOURS,
                                      landmark_drawing_spec=None,
                                      connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_contours_style())
            # Draw iris contours
            mp_drawing.draw_landmarks(image=img,
                                      landmark_list=face_landmarks,
                                      connections=mp_face_mesh.FACEMESH_IRISES,
                                      landmark_drawing_spec=None,
                                      connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_iris_connections_style())
            # Draw facial keypoints
            # if face_landmarks:
            #     for i in range(478):
            #         pos_x = int(face_landmarks.landmark[i].x * width)
            #         pos_y = int(face_landmarks.landmark[i].y * height)
            #         cv2.circle(img, (pos_x, pos_y), 3, (0, 255, 0), -1)

    num_faces = len(results.multi_face_landmarks)
    print(f"Detected {num_faces} faces")

    cv2.imshow('faces', img)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cap.release()

😺五、检测结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)

错误情况 包名、类名显示红色、红色波浪线,大量依赖提示不存在(程序包xxx不存在) 工程无法启动 一、前提条件 1、使用英文原版IDEA 汉化版的可能有各种奇怪的问题。建议用IDEA英文版,卸载重装。 2、下载maven,配置环…

PFC+LLC 概述

总电路图 方案为:PFC(NCP1654D)LLC(NCPB97B)同步整流 输入为220V(正负20%)输出48V,600W电源 组成 1.输入 零线,火线,大地线,有防雷电路&#…

后量子加密算法的数学原理

后量子加密算法是一类专为抵御量子计算机攻击而设计的加密算法。随着量子计算技术的迅速发展,传统的加密算法如RSA和椭圆曲线密码学在量子计算机面前变得脆弱,因此,开发能够在量子计算时代保持安全性的加密算法变得尤为重要。下面将详细介绍后…

使用小猪APP分发打造高效的App封装工具

你是否曾经因为App封装和分发的复杂性而头疼不已?在这个移动应用迅速发展的时代,开发人员不仅需要专注于应用的功能和用户体验,还必须面对繁琐的封装和分发过程。幸运的是,小猪APP分发www.appzhu.cn正好为我们提供了一个简便而高效…

STM32_HAL_使用FPEC实现闪存的读写

STM32的FLASH结构 主存储器(Main Memory):这是STM32中最大的存储区域,用于存储用户的程序代码、常量数据以及程序运行时不变的数据。STM32的主存储器通常被组织为多个扇区(sector),每个扇区的大…

构建高效稳定的运维服务体系:技术架构解析与最佳实践

在当今数字化时代,运维服务对于企业的稳定运行和业务发展至关重要。本文将深入探讨运维服务的技术架构,介绍如何构建高效稳定的运维服务体系,并分享最佳实践。 ### 1. 概述 运维服务的技术架构是支撑整个运维体系的核心,它涵盖了…

邻接矩阵广度优先遍历

关于图的遍历实际上就两种 广度优先和深度优先,一般关于图的遍历都是基于邻接矩阵的,考试这些,用的也是邻接矩阵。 本篇文章先介绍广度优先遍历的原理,和代码实现 什么是图的广度优先遍历? 这其实和二叉树的层序遍…

基于魔搭开源推理引擎 DashInfer实现CPU服务器大模型推理--理论篇

前言 在人工智能技术飞速发展的今天,如何高效地在CPU上运行大规模的预训练语言模型(LLM)成为了加速生成式AI应用广泛落地的核心问题。阿里巴巴达摩院模型开源社区ModelScope近期推出了一款名为DashInfer的推理引擎,旨在解决这一挑…

Ingress controller:Kubernetes 的瑞士军刀

原文作者:Brian Ehlert of F5 原文链接:Ingress controller:Kubernetes 的瑞士军刀 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 许多人认为 Ingress controller(Ingress 控制器&…

CCF20211201——序列查询

CCF20211201——序列查询 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; #define Max 10000000 int a[Max]{0},b[Max]{0}; int main() {int n,m;int sum0,x0,flag0;cin>>n>>m;for(int i1;i<n;i){cin>>a[i];}for(int i0,x0;i&l…

闪电加载:Hexo博客性能优化全攻略

巴索罗缪大熊 前言 这些年积累了很多前端性能优化的知识点和思路&#xff0c;日常工作很少涉及技术层极限优化&#xff0c;近期终于一点点把博客独立搭建并部署了&#xff0c;对之前的一些技术点进行了深度探索&#xff0c;最终结果也达到了预期效果&#xff0c;由于水平有限&…

【安装笔记-20240528-Linux-在 Vultr 云服务器上安装 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240528-Linux-在 Vultr 云服务器上安装测试 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240528-Linux-在 Vultr 云服务器上安装测试 OpenWRT 前言一、软件介绍名称&#xff1a;OpenWRT主页官方介绍 二、安装步骤测试版本&#xff1a…

【html+css(大作业)】二级菜单导航栏

目录 实现效果 代码及其解释 html部分 CSS部分 hello&#xff0c;hello好久不见&#xff01; 今天我们来写二级导航栏&#xff0c;所谓二级导航栏&#xff0c;简单来说就是鼠标放上去就有菜单拉出&#xff1a; 实现效果 代码及其解释 html部分 <!DOCTYPE html> &l…

白酒:新兴产区的发展与市场前景展望

云仓酒庄豪迈白酒作为新兴产区的重要代表&#xff0c;其发展与市场前景备受关注。随着消费者对白酒品质和口感的不断追求&#xff0c;新兴产区在继承传统酿造工艺的基础上&#xff0c;不断创新和发展&#xff0c;逐渐在市场上崭露头角。 首先&#xff0c;新兴产区在酿造工艺方面…

[源码+搭建教程]西游伏妖篇手游_GM_单机+和朋友玩

为了学习和研究软件内含的设计思想和原理&#xff0c;本人花心血和汗水带来了搭建教程&#xff01;&#xff01;&#xff01; 教程不适于服架设&#xff0c;严禁服架设&#xff01;&#xff01;&#xff01;请牢记&#xff01;&#xff01;&#xff01; 教程仅限学习使用&…

卧式混料机:混合设备的智慧之选

卧式混料机&#xff0c;顾名思义&#xff0c;是一种采用卧式结构的混合设备。它的设计精巧&#xff0c;结构紧凑&#xff0c;不仅占用空间小&#xff0c;而且操作简便&#xff0c;维护方便。与传统的立式混料机相比&#xff0c;卧式混料机在混合效率、混合均匀度以及物料适应性…

Suno进阶手册 | 创作歌曲玩法全攻略!

Suno进阶手册:创作歌曲玩法全攻略! 前言1. 基础模式2. 高级模式总结前言 前段时间,Suno V3 横空出世,与此前的V2相比,V3生成的作品质量明显提升! 该说不说,对比同类型工具,Suno的体验“遥遥领先”,没有AI生成常有的机械感,歌词押韵,甚至还附带有和声、分段。 虽然…

【一步一步了解Java系列】:类与对象的联系

看到这句话的时候证明&#xff1a;此刻你我都在努力加油陌生人个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1a;小闭 对…

6.1 Go 数组

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

【双层模型】分布式光伏储能系统的优化配置方法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序模型参考《分布式光伏储能系统的优化配置方法》&#xff0c;分为上下层求解方式&#xff0c;上层采用粒子群算法确定储能的选址和容量方案&#xff0c;以全年购电成本、网络损耗、光伏运行成本、储能充放…