opencv实战项目二十一:MediaPipe人体姿态检测

news2024/11/15 12:51:52

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、MediaPipe是什么?
  • 二、MediaPipe使用:
  • 三、算法流程:
  • 四、效果:


前言

在智能科技不断渗透我们日常生活的今天,人体姿态检测技术已成为计算机视觉领域的一项重要研究方向。它不仅为运动分析、交互娱乐、安全监控等领域带来了创新应用,还为人们的日常生活带来了诸多便利。本项目将采用MediaPipe这一强大的开源跨平台机器学习解决方案,结合OpenCV这一广泛使用的计算机视觉库,实现对人体姿态的实时检测。

一、MediaPipe是什么?

MediaPipe是由Google Research开发的一款强大且灵活的跨平台机器学习解决方案框架。它为开发者提供了一系列工具和预训练模型,用于实现面部识别、手势追踪、姿态估计、物体检测等多种计算机视觉和音频处理任务。MediaPipe的设计理念在于模块化和可定制性,使得开发者能够轻松构建复杂的数据流处理管道。其支持多种编程语言,包括C++、Python和Java,能够在不同的操作系统上运行,如Linux、Windows、macOS、Android和iOS。MediaPipe的高性能和低延迟特性使其在移动设备和边缘设备上也能实现实时处理。此外,MediaPipe的开源性质促进了技术的共享和社区的协作,为创新应用的开发提供了无限可能,广泛应用于交互式增强现实、健康监测、智能监控和特殊需求辅助等领域。

二、MediaPipe使用:

本次姿态检测使用的是mediapipe.solutions.pose方法,mp.solutions.pose是MediaPipe框架中专门用于人体姿态估计的解决方案。该解决方案提供了一个预先训练好的模型,可以实时检测和追踪视频中人物的33个身体关键点,包括头部、肩部、肘部、手腕、臀部、膝盖和脚踝等。以下是mp.solutions.pose的主要特点和功能:
主要特点:

实时检测:mp.solutions.pose能够以较高的帧率运行,适合实时应用场景。
精确度高:该解决方案使用了先进的机器学习技术,可以准确地识别和追踪身体关键点。
跨平台:支持多种操作系统和设备,包括移动设备和桌面计算机。
易于集成:通过MediaPipe提供的Python API,可以轻松地将姿态估计功能集成到各种应用中。

关键组件:

Pose类:这是mp.solutions.pose中的主要类,用于创建一个姿态估计器实例。
process方法:用于处理输入的图像帧并返回姿态检测结果。它需要一个RGB格式的图像作为输入。
pose_landmarks:检测结果的属性,包含了检测到的身体关键点的坐标和可见性。
POSE_CONNECTIONS:一个列表,定义了身体关键点之间的连接关系,用于在图像上绘制姿态连接线。

其中Pose类 是 MediaPipe 框架中用于实现人体姿态估计功能的类。这个类封装了所有必要的逻辑,包括加载预训练模型、处理输入图像以及输出人体关键点的坐标。以下是 mp_pose.Pose 类的详细介绍:
mp_pose.Pose(static_image_mode=False, model_complexity=1, smooth_landmarks=True, enable_segmentation=False, smooth_segmentation=True, min_detection_confidence=0.5, min_tracking_confidence=0.5)
参数说明:

static_image_mode:布尔值,表示是否启用静态图像模式。在静态图像模式下,模型会对每一帧图像都进行完整的姿态检测,而不是追踪连续帧中的姿态。
model_complexity:整数,表示模型的复杂度。0 是最简单模型,2 是最复杂模型。较高的模型复杂度可以提供更精确的检测结果,但需要更多的计算资源。
smooth_landmarks:布尔值,表示是否对检测到的关键点进行平滑处理,以减少抖动。
enable_segmentation:布尔值,表示是否启用身体部位分割功能。
smooth_segmentation:布尔值,表示是否对分割结果进行平滑处理。
min_detection_confidence:浮点数,表示检测姿态的最小置信度阈值。低于此阈值的结果将被忽略。
min_tracking_confidence:浮点数,表示追踪姿态的最小置信度阈值。在追踪模式下,如果置信度低于此阈值,将重新进行姿态检测。
主要方法:

三、算法流程:

首先初始化Pose对象:在创建Pose对象时,可以设置多个参数来配置模型的行为,如是否启用静态图像模式、模型复杂度、是否平滑关键点、是否启用分割等。
然后处理图像帧:通过调用process方法,传入RGB图像帧,模型将返回包含姿态估计结果的对象。最后可视化结果:使用mp.solutions.drawing_utils中的draw_landmarks方法,可以在原始图像上绘制检测到的关键点和连接线。

整体代码:

# 导入OpenCV库,用于图像处理
import cv2
# 导入time库,用于处理时间相关的功能
import time
# 导入mediapipe库,用于使用其提供的机器学习解决方案
import mediapipe as mp
# 导入tqdm库,用于在循环中显示进度条
from tqdm import tqdm
# 导入mediapipe的姿态估计solution
mp_pose = mp.solutions.pose
# 导入mediapipe的绘图工具,用于在图像上绘制关键点和连接线
mp_drawing = mp.solutions.drawing_utils

# 创建Pose模型实例,配置模型参数
pose = mp_pose.Pose(static_image_mode=False,
                    model_complexity=1,
                    smooth_landmarks=True,
                    enable_segmentation=True,
                    min_detection_confidence=0.5,
                    min_tracking_confidence=0.5)

# 定义处理单帧图像的函数
def process_frame(img):
    # 将图像从BGR颜色空间转换到RGB颜色空间
    img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # 使用Pose模型处理RGB图像,获取姿态估计结果
    results = pose.process(img_RGB)
    # 在图像上绘制姿态估计的关键点和连接线
    mp_drawing.draw_landmarks(img, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
    # 返回处理后的图像
    return img

# 指定待处理的图片路径
image_path = r'F:\cv_traditional\OIP-C (1).jfif'
# 使用OpenCV读取图片
img = cv2.imread(image_path)
# 处理读取的图片
frame = process_frame(img)
# 创建窗口并显示处理后的图像
cv2.imshow('my_window', frame)
# 等待用户按键,按键后继续执行
cv2.waitKey(0)
# 销毁所有OpenCV创建的窗口
cv2.destroyAllWindows()

四、效果:

原图:

请添加图片描述
效果图:
在这里插入图片描述

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

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

相关文章

redis分布式锁和lua脚本

业务场景:多个线程对共同资源的访问:库存超卖/用户重复下单的原因 解决方法一:利用jvm内置锁,将非原子性操作变成原子性操作 Synchronized锁的是对象,对象必须是单例的。锁的是this,代表当前所在的类,这个…

“电轿三巨头”集齐,新车能否后浪拍前浪?

文/王俣祺 导语:纵观全年,要说哪款电车最火,那必然得是小米SU7。小米SU7在今年上半年上市以来,基本垄断了整个国产20万级电轿市场,甚至具备了和称霸电轿市场已久的特斯拉Model 3掰掰手腕的实力。那么,如今的…

Stream插件相关的用法

文章目录 1. 概念介绍2. 使用方法2.1 StreamController2.2 StreamBuilder 3. 示例代码 我们在上一章回中介绍了管理Stream事件流相关的内容,本章回中将介绍如何使用Stream事件流输入输出数据 。闲话休提,言归正传,让我们一起Talk Flutter吧。…

FPGA搭建XDMA中断模式的PCIE通信架构,简单读写测试,提供7套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板调试注意事项 5、vivado工…

2024年了,软件测试已经饱和了?

这个年头找工作跟找对象一样难,咳咳,工作对象都木有,双重打击5555。 关于今年的就业市场,很多人表示特别惨淡,以往简历一投就有大批企业来联系,今年自己投递一大堆简历出去,可能全部都是已读不…

黑神话悟空现在有哪些结局?黑神话悟空攻略来啦!

结局 1:天命人戴上金箍,继承了大圣意志,成为了新大圣。 最终 Boss:孙悟空:玩家需经历两场遭遇战,‌每场都分为两个阶段。‌ 首战,‌玩家需独自对抗石猴;‌而在第二阶段,‌则要面对两位掌握不同元素力量的…

Nacos注册中心与OpenFeign远程调用

文章目录 一、注册中心原理二、Nacos注册中心三、服务注册四、服务发现五、OpenFeign 一、注册中心原理 在微服务当中必须有两个角色 服务提供者:提供接口供其它微服务访问 服务消费者:调用其它微服务提供的接口 在大型微服务项目中,服务提供…

3600+银行财务数据大全(1954-2022年)

3600银行财务数据,包括农村商业银行、村镇银行、外资银行、民营银行、股份制商业银行、城市商业银行、大型商业银行、农村合作银行、其他商业银行等。共计120个指标,银行基本信息、业务发展、财务指标、信贷资产、员工、负债等数据 一、数据介绍 数据名…

ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单

ChatTCP是一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单!已为UI交互方式申请专利,独家聊天会话方式分析TCP数据包,给你不一样的TCP数据包分析体验! ChatTCP是Easy TCP Analysis的离线版本&#xff…

【docker】了解什么是Docker

一、前言 最近,在学习如何部署项目的时候,老是出错误,然后朋友推荐了去学一下docker,然后自己就去学了【尚硅谷】的关于docker的教程视频,学完之后,感觉docker真的强,可以把我们做好的app的进行跨平台、快速…

vue3+ts项目引入vue-codemirror实现yaml代码编辑器

重要提示 重新安装依赖后一定要重启项目!!! 网上搜到的案例拿过来都报错?那应该是插件的版本不一样,先弄清版本!!! 本示例相关版本如下 npm i vue-codemirror6 // 按自己所需的…

QT学习之计算器

网格布局初尝试,快速构建计算器 项目结构: wident.h拖动建立界面,20个button,一个lineedit 布局好后整体网格布局调整,依次给每个案件输入文本,并改objectname方便后期辨识 为了在lineedit显示数字&…

鸿蒙轻内核M核源码分析系列十二 事件Event

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…

电子PCB板老化测试指南

部署到现场的成品 PCBA 应通过多项测试,以确保可靠性和稳定运行。行业标准规定了多种测试方法、性能要求、评估指标,甚至必须使用测试夹具来评估电气行为、耐热循环性、长期热稳定性、承受热冲击的能力等等。 PCB老化测试的目的 PCB 老化测试的目的是收…

【STM32】CAN总线基础入门

CAN总线基础入门 一、CAN简介二、主流通信协议对比三、CAN物理层1、CAN硬件电路2、CAN电平标准3、CAN收发器 – TJA1050(高速CAN)4、CAN物理层特性 四、帧格式1、CAN总线帧格式2、数据帧3、数据帧各部分用途简介4、数据帧的发展历…

详解TensorRT的C++高性能部署以及C++部署Yolo实践

详解TensorRT的C高性能部署 一. ONNX1. ONNX的定位2. ONNX模型格式3. ONNX代码使用实例 二、TensorRT1 引言 三、C部署Yolo模型实例 一. ONNX 1. ONNX的定位 ONNX是一种中间文件格式,用于解决部署的硬件与不同的训练框架特定的模型格式的兼容性问题。 ONNX本身其…

未来已来:揭秘GPT-Next如何重塑人工智能的未来

GPT-Next:性能的百倍提升 在当今这个科技日新月异的时代,人工智能(AI)无疑是最具活力和变革性的领域之一。最近,OpenAI在KDDI峰会上宣布了一项激动人心的消息:他们即将推出名为“GPT-Next”的新一代语言模…

SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪

(学习笔记) 1、分布式链路追踪概述 问题:在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路&#xf…

电脑桌面一键整理,高效整理,让你的电脑桌面焕然一新!

电脑桌面整理是一个能够提高工作效率、增强安全性、简化资产管理、改善用户体验的电脑软件。无论是图标管理还是文件整理,通过专业的电脑桌面整理软件都能轻松搞定,有序的管理文件、应用程序。 下面是关于Windows桌面工具的介绍与说明! 一、…

恒创科技:最小化服务器存储容量的技巧

最小化服务器存储容量的需求通常来自于希望降低硬件成本、节省能源以及提高系统性能的考虑。以下是一些实现这一目标的技巧: 1.评估您的存储需求 在开始优化服务器存储之前,您需要清楚了解实际需要和使用的空间大小。您可以使用磁盘使用情况分析器或 Tre…