计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具

这篇具有很好参考价值的文章主要介绍了计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

计算机视觉之手势、面部、姿势捕捉以 Python Mediapipe为工具

1.Mediapipe库概述

Mediapipe是一个开源且强大的Python库,由Google开发和维护。它提供了丰富的工具和功能,用于处理实时多媒体数据。它可以帮助开发者快速构建各种视觉和音频处理应用,并允许他们灵活地定制和扩展库的功能。

Mediapipe库的主要功能包括:

  1. 视觉处理:Mediapipe可以进行人脸检测、姿势估计、手部跟踪等。它通过使用预训练的模型和算法来分析图像或视频,并提供相应的结果。这使得开发者能够轻松地实现各种视觉处理任务。
  2. 音频处理:Mediapipe还可以进行音频信号的处理,例如语音识别、音频增强、语音转换等。它提供了一些内置的音频处理模块,开发者可以使用这些模块来快速构建自己的音频处理流水线。
  3. 数据流处理:Mediapipe库还提供了一套用于处理数据流的工具。开发者可以使用这些工具来构建复杂的数据处理流程,包括数据的输入、输出、转换和合并等。这使得开发者能够更方便地处理实时多媒体数据流。

本期博客,作者将分享使用Mediapipe库实现手势、面部、动作识别的方法。
    计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具,Python_OpenCV计算机视觉开发,计算机视觉,python,人工智能,opencv,mediapipe


2.手势捕捉(hands)

该段代码使用OpenCVMediaPipe库来检测摄像头视频中的手部,并在图像上绘制关键点和连接线。

import cv2
import time
import mediapipe as mp

capture = cv2.VideoCapture(0)
mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils
pTime = 0
cTime = 0

while (capture.isOpened()):
    retval, img = capture.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = hands.process(imgRGB)

    if results.multi_hand_landmarks:
        for handLms in results.multi_hand_landmarks:
            for id, lm in enumerate(handLms.landmark):
                h, w, c = img.shape
                cx, cy = int(lm.x * w), int(lm.y * h)
                cv2.circle(img, (cx, cy), 15, (0, 255, 0), cv2.FILLED)
            mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)

    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, "fps:"+str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 2,
                (0, 0, 255), 2)

    cv2.imshow("Video", img) 
    key = cv2.waitKey(1)
    if key == 32:
        break

capture.release()
cv2.destroyAllWindows()

效果展示:
      计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具,Python_OpenCV计算机视觉开发,计算机视觉,python,人工智能,opencv,mediapipe


关于代码,具体解释如下:

  1. 导入所需的库:

    • cv2:用于处理图像和视频的OpenCV库。
    • time:用于计算帧率的Python标准库。
    • mediapipe as mp:MediaPipe库,用于手部检测和姿态估计。
  2. 创建视频捕获对象:

    • 使用cv2.VideoCapture(0)创建一个视频捕获对象,参数0表示使用默认摄像头。
  3. 初始化MediaPipe手部检测器:

    • 使用mp.solutions.hands.Hands()创建一个手部检测器对象。
    • hands.process(imgRGB)将每个视频帧传递给检测器进行处理,并返回检测结果。
  4. 处理每个视频帧:

    • 使用capture.read()读取视频帧,并将返回的结果存储在retvalimg变量中。
    • 使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)将图像从BGR格式转换为RGB格式,以便与MediaPipe兼容。
    • 使用hands.process(imgRGB)对图像进行手部检测,返回结果保存在results变量中。
  5. 绘制检测结果:

    • 使用results.multi_hand_landmarks判断是否检测到了手部。
    • 对于每个检测到的手部,使用handLms.landmark遍历所有关键点,并将其坐标从归一化坐标转换为图像上的实际坐标。
    • 使用cv2.circle()在图像中绘制关键点圆圈。
    • 使用mpDraw.draw_landmarks()在图像中绘制手部关键点和连接线。
  6. 计算帧率:

    • 使用time.time()获取当前时间戳,计算时间间隔以确定帧率。
    • 使用cv2.putText()在图像上显示帧率。
  7. 显示图像并等待按键:

    • 使用cv2.imshow()显示处理后的图像。
    • 使用cv2.waitKey(1)等待用户按键,参数1表示等待1毫秒。
  8. 释放资源:

    • 在循环结束后,使用capture.release()释放视频捕获对象。
    • 使用cv2.destroyAllWindows()关闭所有窗口。
  9. 退出程序:

    • 按下空格键(32)可以退出程序。

3.面部捕捉(face)

该段代码使用OpenCV和MediaPipe库来检测摄像头视频中的人脸,并在图像上绘制人脸关键点和轮廓。

import cv2
import time
import mediapipe as mp

capture = cv2.VideoCapture(0)

mpFaceMesh = mp.solutions.face_mesh
faceMesh = mpFaceMesh.FaceMesh()
mpDraw = mp.solutions.drawing_utils

pTime = 0  # 上一帧的时间
cTime = 0  # 下一帧的时间

while (capture.isOpened()):

    retval, img = capture.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = faceMesh.process(imgRGB)

    if results.multi_face_landmarks:
        for faceLms in results.multi_face_landmarks:
            for id, lm in enumerate(faceLms.landmark):
                h, w, c = img.shape
                cx, cy = int(lm.x * w), int(lm.y * h)
                # cv2.circle(img, (cx, cy), 15, (0, 255, 0), cv2.FILLED)
            mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACEMESH_CONTOURS)

    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, "fps:" + str(int(fps)), (10, 60), cv2.FONT_HERSHEY_PLAIN, 3, (0, 0, 255), 3)

    cv2.imshow("Video", img)
    key = cv2.waitKey(1)
    if key == 32:
        break

capture.release()
cv2.destroyAllWindows()

以电影情节画面替代摄像头画面,代码效果展示如下:
计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具,Python_OpenCV计算机视觉开发,计算机视觉,python,人工智能,opencv,mediapipe


以下是代码的解释:

  1. 导入所需的库:

    • cv2:用于处理图像和视频的OpenCV库。
    • time:用于计算帧率的标准Python库。
    • mediapipe as mp:MediaPipe库,用于人脸检测和特征点估计。
  2. 创建视频捕获对象:

    • 使用cv2.VideoCapture(0)创建一个视频捕获对象,参数0表示使用默认摄像头。
  3. 初始化MediaPipe人脸检测器:

    • 使用mp.solutions.face_mesh.FaceMesh()创建一个人脸检测器对象。
    • faceMesh.process(imgRGB)将每个视频帧传递给检测器进行处理,并返回检测结果。
  4. 处理每个视频帧:

    • 使用capture.read()读取视频帧,并将返回的结果存储在retvalimg变量中。
    • 使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)将图像从BGR格式转换为RGB格式,以便与MediaPipe兼容。
    • 使用faceMesh.process(imgRGB)对图像进行人脸检测,返回结果保存在results变量中。
  5. 绘制检测结果:

    • 使用results.multi_face_landmarks判断是否检测到了人脸。
    • 对于每个检测到的人脸,使用faceLms.landmark遍历所有关键点,并将其坐标从归一化坐标转换为图像上的实际坐标。
    • 使用mpDraw.draw_landmarks()在图像中绘制人脸关键点和轮廓。
  6. 计算帧率:

    • 使用time.time()获取当前时间戳,计算时间间隔以确定帧率。
    • 使用cv2.putText()在图像上显示帧率。
  7. 显示图像并等待按键:

    • 使用cv2.imshow()显示处理后的图像。
    • 使用cv2.waitKey(1)等待用户按键,参数1表示等待1毫秒。
  8. 释放资源:

    • 在循环结束后,使用capture.release()释放视频捕获对象。
    • 使用cv2.destroyAllWindows()关闭所有窗口。
  9. 退出程序:

    • 按下空格键(32)可以退出程序。

4.姿势捕捉(pose)

该段代码使用OpenCV和MediaPipe库来检测摄像头视频中的人体姿势,并在图像上绘制关键点和连接线。

import cv2
import time
import mediapipe as mp

video = cv2.VideoCapture(0)
mpPose = mp.solutions.pose
pose = mpPose.Pose()
mpDraw = mp.solutions.drawing_utils

pTime = 0  # 上一帧的时间
cTime = 0  # 下一帧的时间

while True:
    retval, img = video.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = pose.process(imgRGB)

    if results.pose_landmarks:
        for id, lm in enumerate(results.pose_landmarks.landmark):
            h, w, c = img.shape
            cx, cy = int(lm.x * w), int(lm.y * h)
            cv2.circle(img, (cx, cy), 15, (0, 255, 0), cv2.FILLED)
        mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)

    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, "fps:" + str(int(fps)), (10, 60), cv2.FONT_HERSHEY_PLAIN, 3, (0, 0, 255), 3)

    cv2.imshow("Video", img)
    key = cv2.waitKey(10)
    if key == 32:
        break

video.release()
cv2.destroyAllWindows()

效果展示:

        计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具,Python_OpenCV计算机视觉开发,计算机视觉,python,人工智能,opencv,mediapipe


以下是代码的解释:

  1. 导入所需的库:

    • cv2:用于处理图像和视频的OpenCV库。
    • time:用于计算帧率的标准Python库。
    • mediapipe as mp:MediaPipe库,用于人体姿势检测。
  2. 创建视频捕获对象:

    • 使用cv2.VideoCapture(0)创建一个视频捕获对象,参数0表示使用默认摄像头。
  3. 初始化MediaPipe人体姿势检测器:

    • 使用mp.solutions.pose.Pose()创建一个人体姿势检测器对象。
    • pose.process(imgRGB)将每个视频帧传递给检测器进行处理,并返回检测结果。
  4. 处理每个视频帧:

    • 使用video.read()读取视频帧,并将返回的结果存储在retvalimg变量中。
    • 使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)将图像从BGR格式转换为RGB格式,以便与MediaPipe兼容。
    • 使用pose.process(imgRGB)对图像进行人体姿势检测,返回结果保存在results变量中。
  5. 绘制检测结果:

    • 使用results.pose_landmarks判断是否检测到了人体姿势。
    • 对于每个检测到的关键点,使用landmark遍历所有关键点,并将其坐标从归一化坐标转换为图像上的实际坐标。
    • 使用cv2.circle()在图像中绘制关键点圆圈。
    • 使用mpDraw.draw_landmarks()在图像中绘制人体姿势关键点和连接线。
  6. 计算帧率:

    • 使用time.time()获取当前时间戳,计算时间间隔以确定帧率。
    • 使用cv2.putText()在图像上显示帧率。
  7. 显示图像并等待按键:

    • 使用cv2.imshow()显示处理后的图像。
    • 使用cv2.waitKey(10)等待用户按键,参数10表示等待10毫秒。
  8. 释放资源:

    • 在循环结束后,使用video.release()释放视频捕获对象。
    • 使用cv2.destroyAllWindows()关闭所有窗口。
  9. 退出程序:

    • 按下空格键(32)可以退出程序。

附:侯小啾Python基础领航计划专栏已上线,特价专栏只需9.9即可扫清入门路上一切障碍。
跟着小啾,入门无忧!无论是系统化学习,还是碎片化学习都是很好的选择,点击下方链接即可订阅:
https://blog.csdn.net/weixin_48964486/category_12510091.html
更多精彩内容敬请期待,作者侯小啾持续为您推出!
文章来源地址https://www.toymoban.com/news/detail-752364.html

到了这里,关于计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉|人脸建模】学习从图像中回归3D面部形状和表情而无需3D监督

    本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题: Learning to Regress 3D Face Shape and Expression from an Image without 3D Supervision 链接:[1905.06817] Learning to Regress 3D Face Shape and Expression from an Image without 3D Supervision (arxiv.org) 从单张图像估计3D面部形状必须对光照、头部姿势

    2024年02月07日
    浏览(36)
  • 基于cv2的手势识别-计算机视觉

      闲的无聊做的一个小玩意,可以调用你的计算机相机,识别框内的手势(剪刀、石头和布),提供一个判决平台,感兴趣的可以继续完善。 用到的参考小文献: 具体实现结果如下 并且我另写了一个框架平台,可以进行下一步的功能拓展,发在我的资源界面了;   我们

    2024年02月01日
    浏览(33)
  • 计算机竞赛 基于机器视觉的手势检测和识别算法

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 废话不多说,先看看学长实现的效果吧 主流的手势分割方法主要分为静态手

    2024年02月11日
    浏览(44)
  • 基于计算机视觉手势识别控制系统YoloGesture (利用YOLO实现) 有详细代码+部署+在线服务器尝试+开源可复现

    Streamlit在线服务器体验网址: https://kedreamix-yologesture.streamlit.app/ HuggingFace在线服务器体验网址:https://huggingface.co/spaces/Kedreamix/YoloGesture 为了解答大家的问题,我录了个视频,大家也可以看看,https://www.bilibili.com/video/BV1LV4y1d7pg/,如果有问题可以在github上给我发issue进行探讨,

    2024年02月03日
    浏览(38)
  • Python计算机视觉(三)—图像拼接

        图像拼接是计算机视觉中的重要分支,它是将两幅以上的具有部分重叠的图像进行拼接从而得到较高分辨率或宽视角的图像。本文将结合python+opencv实现两幅图像的拼接。     图像拼接一般步骤: 1.根据给定图像/集,实现特征匹配 2.通过匹配特征计算图像之间的变换结构

    2024年02月15日
    浏览(34)
  • Python OpenCV 计算机视觉:6~7

    原文:OpenCV Computer Vision with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,你最好真的没有;当别人说你做过某些事的时候,你也最好真的做过。 本附录显示了如何在

    2024年02月02日
    浏览(36)
  • Python的计算机视觉与物体识别

    计算机视觉是一种通过计算机程序对图像进行处理和分析的技术。物体识别是计算机视觉中的一个重要分支,旨在识别图像中的物体、特征和属性。Python是一种流行的编程语言,拥有强大的计算机视觉库和框架,如OpenCV、TensorFlow和PyTorch。因此,使用Python进行计算机视觉和物

    2024年02月21日
    浏览(40)
  • 从Python到计算机视觉:入门指南

    Python一直是计算机科学领域中最受欢迎的语言之一。它不仅易于学习和使用,而且具有广泛的应用领域,尤其是计算机视觉方面。本文将为读者提供一份详细的入门指南,帮助初学者了解Python和计算机视觉的基础知识和应用。 安装Python 要开始使用Python,您需要下载并安装P

    2024年02月13日
    浏览(43)
  • 计算机竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

    🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的试卷系统 - opencv python 视觉识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 机器视觉的发展对存在的作业批改问题, 提供了有效的解决方案

    2024年02月07日
    浏览(45)
  • Opencv快速入门教程,Python计算机视觉基础

    OpenCV 是 Intel® 开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成, 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非商业应用和商业应用都

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包