我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python+MediaPipe实现检测人脸功能详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python+MediaPipe实现检测人脸功能详解

MediaPipe概述

谷歌开源MediaPipe于2019年6月首次推出。它的目标是通过提供一些集成的计算机视觉和机器学习功能,使我们的生活变得轻松。

MediaPipe是用于构建多模态(例如视频、音频或任何时间序列数据)、跨平台(即eAndroid、IOS、web、边缘设备)应用ML管道的框架。

Mediapipe还促进了机器学习技术在各种不同硬件平台上的演示和应用程序中的部署。

应用

  • 人脸检测
  • 多手跟踪
  • 头发分割
  • 目标检测与跟踪
  • 目标:三维目标检测与跟踪
  • AutoFlip:视频裁剪管道
  • 其他

为什么需要MediaPipe

有效管理资源(CPU和GPU)以实现低延迟性能,处理时间序列数据(如音频和视频帧)的同步。

MediaPipe将每个感知模型抽象为一个模块,并将它们与维护图连接起来。

除上述功能外,MediaPipe还支持TensorFlow和TF Lite推理引擎。任何TensorFlow和TF Lite模型均可用于MediaPipe。同时,在移动和嵌入式平台上,MediaPipe还支持设备本身的GPU加速。

现在是时候向MediaPipe的应用迈进了,人脸检测。

人脸检测

考虑一个场景,“零售商要求你计算访客数量,并跟踪访客的移动。”

看起来很难!!我们怎样才能解决这个问题?嗯…

哦,是的!我们将使用人脸检测来解决这个问题。

人脸检测是计算机视觉中的一个问题,即在照片中定位和定位一个或多个人脸。

问题的一般陈述可以定义如下:给定一幅静止或视频图像,检测并定位未知数量(如果有)的人脸。

使用MediaPipe执行人脸检测:

要执行人脸检测,可以使用三种模型:

  • 近景模型(最适合距离相机2米以内的人脸)
  • 全范围模型(密集型,最适合距离相机5米以内的人脸)
  • 全范围模型(稀疏,最适合距离相机5米以内的人脸)

全范围密集模型和稀疏模型在F分数方面具有相同的质量,但在基础度量方面有所不同。

密集型模型的召回率略高于稀疏模型,而稀疏模型的精确度高于稠密模型。

现在是时候使用MediaPipe的人脸检测模型了。

安装必要的库

要执行人脸检测,首先必须在机器中安装MediaPipe。如果你是windows用户,则可以在计算机的命令提示符下运行以下代码。

pip install mediapipe

有关详细说明,你可以访问以下链接:

https://google.github.io/mediapipe/getting_started/python.html

你还需要为网络摄像头或图像输入安装OpenCV。如果你是windows用户,可以在命令提示符下运行以下代码。

pip install opencv-python

有关详细说明,你可以访问以下链接:

https://pypi.org/project/opencv-python/

编写代码以了解API的使用:

我们使用Google Colab来运行代码。你可以选择使用它。

我们需要cv2,能够读取和显示图像,以及MediaPipe模块,它公开了我们执行人脸检测所需的功能

import cv2
import mediapipe as mp

然后我们将访问两个子模块face_detection和drawing_utils。人脸检测用于加载所有功能以执行人脸检测,而绘图工具用于在图像上绘制检测到的人脸。

mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils

是时候深入研究代码了。首先,我们将图像作为输入。这里我们使用两种类型的图像

(i) 包含2米以内的人脸的图像

(ii)包含5米以内的人脸的图像。

我们使用colab中的文件直接从本地目录加载图像。你也可以使用cv2.imread用于在本地计算机中工作时加载图像。

(a) 第一张照片

from google.colab import files
 
uploaded_short_range = files.upload()

(b) 第二张照片

from google.colab import files
 
uploaded_full_range = files.upload()

在本地PC上工作时,你可以使用

cv2.imread() # 获取输入

单击此处了解有关cv2.imread:

现在我们将调整图像大小并显示图像。为了显示图像,我们必须使用colab或cv2的cv2_imshow模块。

在本地机器中工作时显示cv2.imshow(frame name, iamge)。我们可以使用下面的代码在google colab中调整图像大小并显示图像。

用于调整图像大小和显示图像的代码:

import cv2
from google.colab.patches import cv2_imshow
import math
import numpy as np
 
DESIRED_HEIGHT = 480
DESIRED_WIDTH = 480
def resize_and_show(image):
  h, w = image.shape[:2]
  if h < w:
    img = cv2.resize(image, (DESIRED_WIDTH, math.floor(h/(w/DESIRED_WIDTH))))
  else:
    img = cv2.resize(image, (math.floor(w/(h/DESIRED_HEIGHT)), DESIRED_HEIGHT))
  cv2_imshow(img)
 

# 预览图片.
 
short_range_images = {name: cv2.imread(name) 
for name in uploaded_short_range.keys()}
for name, image in short_range_images.items():
  print(name)   
  resize_and_show(image)
 
 
full_range_images = {name: cv2.imread(name) 
for name in uploaded_full_range.keys()}
for name, image in full_range_images.items():
  print(name)   
 
  resize_and_show(image)

上述代码的输出示例

现在,我们将在脸上画关键点。

我们可以如下更改thickness和circle_radius的值。

drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)

以下代码了解mp.solutions.face_detection的详细信息。

help(mp_face_detection.FaceDetection)

在此之后,我们将创建一个FaceDetection类的对象。该对象将允许我们处理图像并执行人脸关键点检测。此类的构造函数支持以下参数:

(i) 模型选择:整数索引0或1。使用0选择最适合距离摄影机2米以内的面的短距离模型,使用1选择最适合距离摄影机5米以内的面的全范围模型。对于全范围选项,稀疏模型用于提高推理速度。

(ii)最小检测置信度:人脸检测模型中的最小置信值([0.0,1.0]),检测成功。默认值为0.5。

with mp_face_detection.FaceDetection(min_detection_confidence=0.5, model_selection=0) as face_detection:

上面的代码model_selection=0,这意味着我们选择短距离模型进行人脸检测。使用下面的代码,我们使用一个简短的图像模型执行最终的人脸检测,并绘制关键点。

# 运行MediaPipe人脸检测与近距离模型
 
with mp_face_detection.FaceDetection(
    
    min_detection_confidence=0.5, model_selection=0) as face_detection:
        
  for name, image in short_range_images.items():
    # 将BGR图像转换为RGB,并使用MediaPipe人脸检测进行处理。
 
    results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
 
    # 绘制每个人脸的检测。
    print(f'Face detections of {name}:')
    
    if not results.detections:
        
      continue
    annotated_image = image.copy()

    for detection in results.detections:
 
      mp_drawing.draw_detection(annotated_image, detection)
 
    resize_and_show(annotated_image)

短长度(2米以内)图像的人脸检测模型

现在对于model_selection=1,这意味着我们选择人脸检测全范围模型。使用下面的代码,我们使用完整的图像模型执行最终的人脸检测,并绘制关键点。

with mp_face_detection.FaceDetection(
 
    min_detection_confidence=0.5, model_selection=1) as face_detection:
 
  for name, image in full_range_images.items():
    # 将BGR图像转换为RGB,并使用MediaPipe人脸检测进行处理。
    results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    # 绘制每个人脸的检测。
    print(f'Face detections of {name}:')
 
    if not results.detections:
 
      continue
 
    annotated_image = image.copy()
 
    for detection in results.detections:
 
      mp_drawing.draw_detection(annotated_image, detection)
 
    resize_and_show(annotated_image)

全范围(5米以内)图像的人脸检测模型

我们还可以使用全范围人脸检测模型的代码对集体照片执行此过程。

下面关于algoscale的文章将向你展示使用OpenCV和MediaPipe姿势估计。

使用OpenCV和MediaPipe进行训练姿势估计:

https://algoscale.com/tech-corner/workout-pose-estimation-using-opencv-and-mediapipe/

到此这篇关于Python+MediaPipe实现检测人脸功能详解的文章就介绍到这了,更多相关Python MediaPipe检测人脸内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python+MediaPipe实现检测人脸功能详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Python+MediaPipe实现检测人脸功能

这篇文章主要介绍“怎么用Python+MediaPipe实现检测人脸功能”,在日常操作中,相信很多人在怎么用Python+MediaPipe实现检测人脸功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用
2023-06-29

opencv+mediapipe如何实现人脸检测及摄像头实时示例

这篇文章主要为大家展示了“opencv+mediapipe如何实现人脸检测及摄像头实时示例”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“opencv+mediapipe如何实现人脸检测及摄像头实
2023-06-22

Python中怎么实现人脸检测

Python中怎么实现人脸检测,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先需要安装这些包,以Ubuntu为例:$ sudo apt-get install
2023-06-17

基于Flask和PaddleHub怎么实现人脸检测功能

这篇文章主要介绍“基于Flask和PaddleHub怎么实现人脸检测功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Flask和PaddleHub怎么实现人脸检测功能”文章能帮助大家解决问题。
2023-07-05

python实现人脸检测的实例分析

这篇文章主要介绍“python实现人脸检测的实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python实现人脸检测的实例分析”文章能帮助大家解决问题。OpenCVOpenCV 是计算机视觉领
2023-06-29

python+mediapipe+opencv如何实现手部关键点检测功能

今天给大家介绍一下python+mediapipe+opencv如何实现手部关键点检测功能。,文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。一、mediapip
2023-06-26

基于Mediapipe+Opencv如何实现手势检测功能

今天给大家介绍一下基于Mediapipe+Opencv如何实现手势检测功能。,文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。一、前言基于Mediapipe+Op
2023-06-26

Python怎么实现人脸识别微笑检测

这篇文章主要介绍“Python怎么实现人脸识别微笑检测”,在日常操作中,相信很多人在Python怎么实现人脸识别微笑检测问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么实现人脸识别微笑检测”的疑
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录