基于mediapipe的姿态识别和简单行为识别

本文介绍了如何利用Mediapipe进行人体姿态关键点检测和自定义行为识别。首先讲解了Mediapipe的安装和人体关键点检测的基本步骤,包括图片和视频的处理。接着,通过关节角度识别,实现了简单的行为如举手、叉腰等的判断。最后,给出了代码示例和实际效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标

1、可以识别到人体姿态关键点

2、可以通过角度识别的方法识别到人体的动作(自定义)

源码地址:🚀🚀🚀🚀

一、mediapipe的安装

其实这部分很简单,直接在windows命令行的环境下

pip install mediepipe

就可以啦

二、使用mediapipe检测关键点

1、mediapipe的介绍

Mediapipe是一个用于构建机器学习管道的框架,用户处理视频、音频等时间序列数据。这个跨平台框架适用于桌面/服务器、Android、ios和各类嵌入式设备。
目前mediapipe包含16个solutions,分别为

人脸检测
Face Mesh
虹膜
手
姿态
人体
人物分割
头发分割
目标检测
Box Tracking
instant Motion Tracking
3D目标检测
特征匹配
AutoFlip
MediaSequence
YouTuBe_8M

![在这里插入图片描述](https://img-blog.csdnimg.cn/1fbcd4d624b14681995fdc90882f2006.png

总的来说,mediapipe是一个很好的库,可以解决我们处理ML项目中面临的大部分麻烦,而且很适合做行为识别方向的小伙伴练手使用。

2、使用mediapipe检测人体

这里仅使用mediapipe关于人体识别的方法(solution),谷歌官方将这种人体姿态识别的方法叫做Blazepose。

(0)检测前的准备工作

'''导入一些基本的库'''
import cv2
import mediapipe as mp
import time
from tqdm import tqdm
import numpy as np
from PIL import Image, ImageFont, ImageDraw
# ------------------------------------------------
#   mediapipe的初始化
# 	这一步是必须的,因为要使用到以下定义的几个类
# ------------------------------------------------
mp_pose = mp.solutions.pose
mp_drawing = mp.solutions.drawing_utils
pose = mp_pose.Pose(static_image_mode=True)

(1)检测图片

def process_frame(img):
    start_time = time.time()
    h, w = img.shape[0], img.shape[1]               # 高和宽
    # 调整字体
    tl = round(0.005 * (img.shape[0] + img.shape[1]) / 2) + 1
    tf = max(tl-1, 1)
    # BRG-->RGB
    img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # 将RGB图像输入模型,获取 关键点 预测结果
    results = pose.process(img_RGB)
    keypoints = ['' for i in range(33)]
    if results.pose_landmarks:
        mp_drawing.draw_landmarks(img, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
        for i in range(33):
            cx = int(results.pose_landmarks.landmark[i].x * w)
            cy = int(results.pose_landmarks.landmark[i].y * h)
            keypoints[i] = (cx, cy)                                 # 得到最终的33个关键点
    else:
        print("NO PERSON")
        struction = "NO PERSON"
        img = cv2.putText(img, struction, (25, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.25, (255, 255, 0),
                          6)
    end_time = ti
### 使用 Python MediaPipe 实现姿态识别 #### 安装依赖包 为了使用MediaPipe进行姿态识别,需要安装必要的Python库。可以通过pip来安装这些库。 ```bash pip install mediapipe opencv-python numpy ``` #### 导入所需模块并初始化模型 在代码中导入所需的模块,并创建MediaPipe姿态模型实例。 ```python import cv2 import mediapipe as mp mp_pose = mp.solutions.pose pose = mp_pose.Pose() ``` 这段代码设置了MediaPipe姿态估计工具[^4]。 #### 处理视频流数据 接下来是从摄像头获取图像帧并对每一帧应用姿态检测算法的部分。 ```python cap = cv2.VideoCapture(0) while cap.isOpened(): success, image = cap.read() if not success: print("Ignoring empty camera frame.") continue # 将BGR转为RGB颜色空间 image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = pose.process(image_rgb) # 进行情态处理 ``` 此部分实现了从默认摄像设备读取连续的画面,并转换色彩模式以适应MediaPipe的要求[^1]。 #### 可视化结果 最后一步是在原图中标记出检测到的关键点位置以及连接线表示身体各部位之间的关系。 ```python if results.pose_landmarks is not None: mp_drawing.draw_landmarks( image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS ) cv2.imshow('Pose Recognition', image) if cv2.waitKey(5) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 上述脚本会打开一个新的窗口显示带有标注的人体骨骼结构图;按`'q'`键可退出程序[^3]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智刃纪元

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值