编程仰卧起坐怎么做的

时间:2025-01-28 07:17:50 网络游戏

编程实现仰卧起坐的方法如下:

引入所需库

使用OpenCV库处理视频流。

使用Mediapipe库进行人体姿态检测。

使用NumPy库进行数学计算。

计算角度函数

定义一个函数来计算三个关键点之间的角度,用于判断仰卧起坐动作的完成状态。

主程序逻辑

初始化视频捕获。

设置姿态估计模块。

循环读取视频帧并分析姿态数据以计算仰卧起坐次数。

```python

import cv2

import mediapipe as mp

import numpy as np

初始化视频捕获

cap = cv2.VideoCapture(0)

设置姿态估计模块

mp_pose = mp.solutions.pose

pose = mp_pose.Pose(static_image_mode=False)

mp_drawing = mp.solutions.drawing_utils

仰卧起坐计数器

count = 0

while True:

读取视频帧

ret, frame = cap.read()

if not ret:

break

处理视频帧

image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

results = pose.process(image)

绘制姿态关键点

mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

检查仰卧起坐动作

for pose_landmark in results.pose_landmarks.landmark:

if pose_landmark.name == "nose":

计算鼻子和两个肩部的角度

nose_x, nose_y = pose_landmark.x, pose_landmark.y

left_shoulder_x, left_shoulder_y = results.pose_landmarks.landmark[mp_pose.POSE_CONNECTIONS['left_shoulder']].x, results.pose_landmarks.landmark[mp_pose.POSE_CONNECTIONS['left_shoulder']].y

right_shoulder_x, right_shoulder_y = results.pose_landmarks.landmark[mp_pose.POSE_CONNECTIONS['right_shoulder']].x, results.pose_landmarks.landmark[mp_pose.POSE_CONNECTIONS['right_shoulder']].y

计算角度

angle = np.abs(np.arctan2(right_shoulder_y - nose_y, right_shoulder_x - nose_x) - np.arctan2(left_shoulder_y - nose_y, left_shoulder_x - nose_x))

angle = np.abs(angle * 180.0 / np.pi)

if angle > 180.0:

angle = 360 - angle

判断仰卧起坐动作

if angle > 45: 假设45度为仰卧起坐的阈值

count += 1

显示结果

cv2.imshow('Pose', image)

按q键退出

if cv2.waitKey(1) & 0xFF == ord('q'):

break

释放资源

cap.release()

cv2.destroyAllWindows()

print(f"仰卧起坐次数: {count}")

```

这个示例代码通过OpenCV捕获视频帧,并使用Mediapipe库进行人体姿态检测。当检测到鼻子和两个肩部的角度超过一定阈值时,认为完成了一次仰卧起坐,并计数。

请注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑和更多的优化。