<span class=“js_title_inner“>使用OpenCV和MediaPipe,制作一个深蹲计数器(附源码)</span>
它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。这项技术可以提供即时的视觉反馈,帮助大家改进动作,并且跟踪锻炼人的进展,非常适合在家里锻炼使用。利用计算机视觉对深蹲运动进行监测和计数,创建一个自动化、实时的运动检测和计数系统。通过这项技术,我们可以结合摄像头,智能识别人的行为,然后做出一些处理。使用pip命令进行安装,环境配置好后,就可以

大家好,我是小F~
MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。
它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。
MediaPipe通过将各个感知模型抽象为模块并将其连接到可维护的图中来解决这些问题。


项目地址:
https://github.com/google/mediapipe
通过这项技术,我们可以结合摄像头,智能识别人的行为,然后做出一些处理。
比如控制电脑音量、俯卧撑计数、深蹲计数、坐姿矫正等功能。


今天小F就给大家介绍一下,如何使用MediaPipe实现深蹲计数!
使用的Python版本是3.10。
需要安装以下依赖。
mediapipe==0.10.21
numpy==1.26.4
opencv-python==4.9.0.80
使用pip命令进行安装,环境配置好后,就可以来看深蹲计数的情况了。
代码如下。
import cv2
import mediapipe as mp
import numpy as np
def calculate_angle(a, b, c):
a = np.array(a)
b = np.array(b)
c = np.array(c)
radians = np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0])
angle = np.abs(radians*180.0/np.pi)
if angle > 180.0:
angle = 360 - angle
return angle
mp_pose = mp.solutions.pose
mp_drawing = mp.solutions.drawing_utils
cap = cv2.VideoCapture('video.mp4')
counter = 0
stage = None
with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:
while cap.isOpened():
ret, frame = cap.read()
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image.flags.writeable = False
results = pose.process(image)
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
try:
landmarks = results.pose_landmarks.landmark
hip = [landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].x, landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].y]
shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x, landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]
knee = [landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value].x, landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value].y]
angle = calculate_angle(shoulder, hip, knee)
if angle > 160:
stage = "down"
if angle < 100and stage == 'down':
stage = "up"
counter += 1
print("Sit-up count: ", counter)
except:
pass
cv2.putText(image, "Counter: " + str(counter), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2, cv2.LINE_AA)
mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
cv2.imshow('Sit-Up Counter', image)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
运行代码后,可看到如下效果,左上角显示的是ai计数。

利用计算机视觉对深蹲运动进行监测和计数,创建一个自动化、实时的运动检测和计数系统。
这项技术可以提供即时的视觉反馈,帮助大家改进动作,并且跟踪锻炼人的进展,非常适合在家里锻炼使用。
相关文件及代码都已上传,公众号回复【深蹲计数】即可获取。
万水千山总是情,点个 👍 行不行。
推荐阅读
··· END ···

更多推荐



所有评论(0)