mediapipe识别3 种不同的人体静态姿态(站、坐、躺)python
时间: 2023-06-14 12:08:15 浏览: 193
MediaPipe是一个跨平台的机器学习框架,可以用于视频分析、计算机视觉等领域。其中包含了人体姿态估计的模块,可以识别人体的关键点位置。
要识别人体的静态姿态(站、坐、躺),可以借助人体姿态估计模块输出的关键点位置。具体实现步骤如下:
1. 使用MediaPipe中的人体姿态估计模块,读取视频或图片中的人体图像。
2. 对每一帧图像进行处理,获取人体关键点的坐标。
3. 分析关键点的位置,判断人体的姿态。可以通过判断以下几个关键点的位置:
- 脚踝:站立时两个脚踝在同一水平线上,坐下或躺下时则不在同一水平线上。
- 膝盖:站立时两个膝盖伸直,坐下或躺下时则弯曲。
- 腰部:站立时腰部在同一水平线上,坐下或躺下时则位置较低。
- 头部:坐下或躺下时头部位置较低。
4. 根据关键点的位置判断人体的姿态,可以使用if-else语句或者逻辑判断来实现。
下面是一个基于MediaPipe的Python代码,用于识别人体的静态姿态(站、坐、躺):
```python
import mediapipe as mp
import cv2
mp_drawing = mp.solutions.drawing_utils
mp_pose = mp.solutions.pose
# 定义关键点位置的阈值
ankle_threshold = 0.05
knee_threshold = 0.05
waist_threshold = 0.05
head_threshold = 0.05
# 加载模型
pose = mp_pose.Pose(static_image_mode=True, min_detection_confidence=0.5)
# 读取图像
image = cv2.imread('test.jpg')
# 分析关键点位置
results = pose.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
if not results.pose_landmarks:
print('No pose landmarks detected')
else:
# 获取关键点坐标
landmarks = results.pose_landmarks.landmark
# 判断人体姿态
if abs(landmarks[mp_pose.PoseLandmark.LEFT_ANKLE].y - landmarks[mp_pose.PoseLandmark.RIGHT_ANKLE].y) < ankle_threshold:
if landmarks[mp_pose.PoseLandmark.LEFT_KNEE].y < landmarks[mp_pose.PoseLandmark.LEFT_ANKLE].y - knee_threshold and landmarks[mp_pose.PoseLandmark.RIGHT_KNEE].y < landmarks[mp_pose.PoseLandmark.RIGHT_ANKLE].y - knee_threshold:
if abs(landmarks[mp_pose.PoseLandmark.LEFT_HIP].y - landmarks[mp_pose.PoseLandmark.RIGHT_HIP].y) < waist_threshold:
print('Standing')
else:
print('Sitting')
else:
print('Lying')
else:
print('Lying')
# 显示图像
cv2.imshow('Pose estimation', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在实际应用中,可以考虑使用视频流或者摄像头输入来实时识别人体的静态姿态。需要注意的是,这只是一个简单的实现方式,实际应用中需要根据场景和需求进行调整和优化。
阅读全文