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

目录
  • 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检测人脸内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    目录 一.前言 二.环境配置 软件: 环境: 三.全部源码 MediapipeHandTracking.py程序结构: MediapipeHandTracking.py源码与注释 四.环境配置 1.在Anaconda3上新建环境Gesture 2.激活Gesture环境并下载opencv-python包 3.下载mediapipe包 4.打开Pycharm完成环境导入项目 五.运行程序: 六.程序应用扩展 1.手部的关键点的位置和次序我们全部已知的特点 2.和其他AL结合 3.全身检测源码 一.

  • python+mediapipe+opencv实现手部关键点检测功能(手势识别)

    目录 一.mediapipe是什么? 二.使用步骤 1.引入库 2.主代码 3.识别结果 补充: 一.mediapipe是什么? mediapipe官网 二.使用步骤 1.引入库 代码如下: import cv2 from mediapipe import solutions import time 2.主代码 代码如下: cap = cv2.VideoCapture(0) mpHands = solutions.hands hands = mpHands.Hands() mpDraw = so

  • OpenCV+MediaPipe实现手部关键点识别

    目录 可视化辅助函数 单张图片 摄像头检测 改变关键点数据特征 可视化辅助函数 在下面的代码的注释内有大致的操作 基本操作与前面的人脸检测的操作相似,增加了可视化的辅助函数 import matplotlib.pyplot as plt # 使用ipython的魔法方法,将绘制出的图像直接嵌入在notebook单元格中 import cv2 # 定义可视化图像函数 def look_img(img): '''opencv读入图像格式为BGR,matplotlib可视化格式为RGB,因此需将BGR

  • OpenCV MediaPipe实现颜值打分功能

    目录 颜值打分 摄像头实时检测颜值打分 达芬奇指标 摄像头实时达芬奇颜值指标 颜值打分 定义可视化图像函数 导入三维人脸关键点检测模型 导入可视化函数和可视化样式 将图像模型输入,获取预测结果 BGR转RGB 将RGB图像输入模型,获取预测结果 预测人人脸个数 获取脸上关键点轮廓的坐标,并且将相应的坐标标注出来,在标注点之间绘制连线(例如:左眼左眼角的识别点标号为33号) # 颜值打分--五眼指标 import cv2 as cv import mediapipe as mp import nu

  • 超好玩的"隔空操物"通过Python MediaPipe库实现

    目录 1.项目效果展示 1.1:隔空音量控制 1.2:隔空绘画 1.3 :手势识别 1.4:鼠标模拟 2.所涉及到的库 2.1:OpenCv简介 2.2:MediaPipe简介 3.项目环境搭建 4.源码部分 5.总结 文章简介 :本篇文章的实战部分中主要使用到了 MediaPipe 与 OpenCv 两个库,实现了隔空操作的效果,主要有**隔空操作鼠标,隔空绘画,隔空控制音量与隔空手势识别 ** 演示视频 使用这个编程语言,我实现了隔空操物!! 1.项目效果展示 项目主要分为四个部分,分别是

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

    目录 单张人脸关键点检测 单张图像人脸检测 摄像头实时关键点检测 单张人脸关键点检测 定义可视化图像函数 导入三维人脸关键点检测模型 导入可视化函数和可视化样式 读取图像 将图像模型输入,获取预测结果 BGR转RGB 将RGB图像输入模型,获取预测结果 预测人人脸个数 可视化人脸关键点检测效果 绘制人来脸和重点区域轮廓线,返回annotated_image 绘制人脸轮廓.眼睫毛.眼眶.嘴唇 在三维坐标中分别可视化人脸网格.轮廓.瞳孔 import cv2 as cv import mediapi

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

    目录 MediaPipe概述 人脸检测 MediaPipe概述 谷歌开源MediaPipe于2019年6月首次推出.它的目标是通过提供一些集成的计算机视觉和机器学习功能,使我们的生活变得轻松. MediaPipe是用于构建多模态(例如视频.音频或任何时间序列数据).跨平台(即eAndroid.IOS.web.边缘设备)应用ML管道的框架. Mediapipe还促进了机器学习技术在各种不同硬件平台上的演示和应用程序中的部署. 应用 人脸检测 多手跟踪 头发分割 目标检测与跟踪 目标:三维目标检测与

  • Python+Opencv实战之人脸追踪详解

    目录 前言 人脸追踪技术简介 使用基于 dlib DCF 的跟踪器进行人脸跟踪 使用基于 dlib DCF 的跟踪器进行对象跟踪 小结 前言 人脸处理是人工智能中的一个热门话题,人脸处理可以使用计算机视觉算法从人脸中自动提取大量信息,例如身份.意图和情感:而目标跟踪试图估计目标在整个视频序列中的轨迹,其中只有目标的初始位置是已知的,将这两者进行结合将产生许多有趣的应用.由于外观变化.遮挡.快速运动.运动模糊和比例变化等多种因素,人脸追踪非常具有挑战性. 人脸追踪技术简介 基于判别相关滤波器 (d

  • Python爬虫爬验证码实现功能详解

    主要实现功能: - 登陆网页 - 动态等待网页加载 - 验证码下载 很早就有一个想法,就是自动按照脚本执行一个功能,节省大量的人力--个人比较懒.花了几天写了写,本着想完成验证码的识别,从根本上解决问题,只是难度太高,识别的准确率又太低,计划再次告一段落. 希望这次经历可以与大家进行分享和交流. Python打开浏览器 相比与自带的urllib2模块,操作比较麻烦,针对于一部分网页还需要对cookie进行保存,很不方便.于是,我这里使用的是Python2.7下的selenium模块进行网页上的操

  • 基于Python实现评论区抽奖功能详解

    目录 1. 分析评论接口 2. 获取评论数据 3. 筛选评论用户 4. 抽取幸运观众 5. 完整源码 5.1 字符串截取的方式 5.2 正则匹配方式 5.3 执行结果 1. 分析评论接口 首先,我们需要找到评论数据的「接口」,也就是网站获取评论数据的请求. 打开一个需要抽奖的文章,进入「开发者模式」(按F12 或 右键检查),选中 Network 选项,同时「刷新」文章页面,使其重新发送请求,在右侧工具栏中观察页面发送的请求,逐个分析请求,根据响应内容判断出获取评论的请求 在 Headers 栏

  • Python+OpenCV实现图像识别替换功能详解

    OpenCV-Python是一个Python库,旨在解决计算机视觉问题. OpenCV是一个开源的计算机视觉库,1999年由英特尔的Gary Bradski启动.Bradski在访学过程中注意到,在很多优秀大学的实验室中,都有非常完备的内部公开的计算机视觉接口.这些接口从一届学生传到另一届学生,对于刚入门的新人来说,使用这些接口比重复造轮子方便多了.这些接口可以让他们在之前的基础上更有效地开展工作.OpenCV正是基于为计算机视觉提供通用接口这一目标而被策划的. 安装opencv pip3 in

  • Python实现的ftp服务器功能详解【附源码下载】

    本文实例讲述了Python实现的ftp服务器功能.分享给大家供大家参考,具体如下: python 具备强大的网络编程功能,而且代码简介,用简单的代码,就能实现一个功能强大的FTP 服务器.我亲自测试了这个 python ftp server. 代码下载,在文章的末尾处,整个部署介绍如下: 1. 环境, python 2.7.3 ,centos 6.2 . 2. 定义服务器ip ,端口等信息,可以在下载的源码中查看 listen_ip = "192.168.4.128" # ftp se

  • python实现的自动发送消息功能详解

    本文实例讲述了python实现的自动发送消息功能.分享给大家供大家参考,具体如下: 一个简单的脚本 #-*- coding:utf-8 -*- from __future__ import unicode_literals from threading import Timer import itchat import requests # 抓取金山毒霸每日一句,英文和翻译 def get_news(): url = "http://open.iciba.com/dsapi/" r =

  • Python实现的简单计算器功能详解

    本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Frame的frame,在init属性函数中搭建面板 class CalcFrame(wx.Frame):#建造一个继承于wx.Frame的frame def __init__(self,title): wx.Frame.__init__ (self,None,-1,title, pos=(100,300

  • python小程序实现刷票功能详解

    刷票一般要突破以下限制: 1.验证码识别 2.同一ip不可连续投票 解决办法 1.用tesseract工具,链接在此 https://code.google.com/p/tesseract-ocr/ (人人还是加不了https链接) 2.使用代理,国内可以的代理服务器可以从这里找到 http://cn-proxy.com/ 程序语言当然用python 浏览器投票的流程如下 1.向服务器发送请求,服务器返回验证码和表单 2.填好表单,发送到服务器 可以用firefox+httpfox插件查看整个事

  • Python使用字典的嵌套功能详解

    当需要存储很多同类型的不通过数据时可能需要使用到嵌套,先用一个例子说明嵌套的使用 1.在列表中存储字典 #假设年级里有一群国际化的学生,有黄皮肤的中国人.有白皮肤的美国人也有黑皮肤的非洲人,只记录部分特征 student_1={'nationality':'China','colour':'yellow','age':'15'} student_2={'nationality':'America','colour':'white','age':'18'} student_3={'national

随机推荐