【计算机视觉】基于MediaPipe的实时人体肢体识别(真人切水果)

前言

       前言吹吹水,玩过最近很火的“真人版切水果”游戏吗??
       直接上图(引侵删):

       那它是如何实现识别游戏用户肢体的呢?今天我们聊一下人体肢体实时识别技术。 

环境准备

        在开始之前,我们需要确保我们的开发环境中已经安装了必要的库。本文使用的是Python编程语言,以及其他两个主要库:OpenCV和MediaPipe。您可以通过以下命令安装这两个库:

pip install opencv-python mediapipe

代码实现

以下是使用OpenCV和MediaPipe实现实时人体姿态识别的核心代码:

import cv2
import mediapipe as mp

# 初始化MediaPipe的Pose模型
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)

# 初始化MediaPipe的绘图工具
mp_draw = mp.solutions.drawing_utils

# 打开摄像头
cap = cv2.VideoCapture(0)

while cap.isOpened():
    # 读取摄像头帧
    success, image = cap.read()
    if not success:
        print("无法读取摄像头帧。请检查摄像头是否正常工作。")
        break

    # 将BGR图像转换为RGB
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    # 进行人姿态检测
    results = pose.process(image_rgb)

    # 将RGB图像转换回BGR以供OpenCV使用
    image = cv2.cvtColor(image_rgb, cv2.COLOR_RGB2BGR)

    # 如果检测到人体姿态,则绘制关键点
    if results.pose_landmarks:
        mp_draw.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    # 显示结果图像
    cv2.imshow('MediaPipe Pose', image)

    # 按下'q'键退出循环
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

# 释放摄像头并关闭所有OpenCV窗口
cap.release()
cv2.destroyAllWindows()

代码解释

  1. 导入库:首先,我们导入了OpenCV和MediaPipe库,这两个库是实现这一功能的基础。
  2. 初始化Pose模型:通过mp_pose.Pose(),我们创建了一个Pose模型实例,设置min_detection_confidencemin_tracking_confidence参数以控制检测和追踪的精度。
  3. 初始化绘图工具:使用mp.solutions.drawing_utils来方便地绘制检测到的人体姿态关键点。
  4. 打开摄像头cv2.VideoCapture(0)用于打开默认的摄像头(通常是笔记本电脑的内置摄像头)。
  5. 读取摄像头帧:在while循环中,我们不断读取摄像头的每一帧图像,并进行检测与绘制。
  6. 图像格式转换:由于OpenCV读取的是BGR格式的图像,而MediaPipe需要RGB格式的图像,因此我们在这两个步骤之间进行了颜色空间转换。
  7. 姿态检测:通过调用pose.process()方法对图像进行处理,检测出人体的姿态。
  8. 绘制关键点:如果检测到了人体姿态,则使用mp_draw.draw_landmarks()方法在图像上绘制关键点及连接线。
  9. 显示检测结果:使用cv2.imshow()函数将处理后的图像显示出来。
  10. 退出机制:当按下'q'键时,退出循环并释放摄像头,关闭所有OpenCV窗口。

总结

       本文介绍了简单的人物肢体识别。人物肢体识别将会有非常大的应用场景,如:各类沉浸式体感游戏(eg.元神、黑神话等);肢体预测(预测是否可能有暴力肢体行为发生、预测老人摔倒可能性等);辅助训练人形机器人学习自然肢体行为(采录大量人类真实四肢行为,训练机器人,使其更自然)

 

### 计算机视觉人体姿态行为识别方法与应用 #### 方法概述 计算机视觉人体姿态行为识别涉及多个关键技术环节,主要包括姿态估计、特征提取以及动作分类。姿态估计旨在确定视频序列中每帧图像内人体各个关节点的具体位置[^3]。 #### 姿态估计算法 一种常用的方法是从单幅或多幅图像中预测出人体的关键部位坐标,进而构建完整的骨架模型。Mask R-CNN 是一个强大的工具,不仅能够精确定位个体边界框内的对象实例,还能分割出像素级别的掩膜用于区分不同的人物实例。对于多个人物的情况,则可以通过计算相邻两帧间人物之间的交并比(IoU),以此判断是否属于同一身份,并赋予相应的ID编号以便后续跟踪处理[^5]。 #### 特征工程 为了有效描述人体运动模式,通常会从原始的姿态数据中抽取一系列有意义的属性作为输入给分类器训练。这其中包括但不限于关节角度的变化趋势、肢体间的相对距离及其随时间演变规律等时空特性参数。此外,还可以考虑加入速度矢量和加速度分量来增强表达能力[^4]。 #### 行动辨识框架 采用监督学习的方式建立映射关系,即针对特定类别标签下的样本集进行拟合操作,最终形成一套可以泛化至未知场景下执行预测任务的功能模块。常见的算法有支持向量机(SVM)、随机森林(RF)和支持深度神经网络(DNNs)架构下的卷积神经网(CNNs)/循环神经网(RNNs)[^1]。 ```python import cv2 from mmpose.apis import inference_top_down_pose_model, init_pose_model # 初始化姿态检测模型 pose_config = 'configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_w32_coco_256x192.py' pose_checkpoint = 'https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w32_coco_256x192-c78dce93_20200712.pth' model = init_pose_model(pose_config, pose_checkpoint) def detect_poses(image_path): image = cv2.imread(image_path) result = inference_top_down_pose_model(model, image) # 提取关键点信息 keypoints = [] for person in result['pred_instances']: keypoint_info = person.get('keypoints', []) keypoints.append(keypoint_info) return keypoints image_file = "path_to_your_image.jpg" detected_keypoints = detect_poses(image_file) print(detected_keypoints) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值