用Python和Mediapipe打造,让你的运动效果一目了然!
【技术揭秘】
利用Mediapipe的人体姿态估计,实时捕捉关键点,精确识别动作。
每一帧的关键点坐标和角度都被详细记录,为动作分析提供数据支持。
支持自定义动作训练,让AI更懂你的运动习惯。
【健身动作】
俯卧撑、引体向上、深蹲等常见健身动作,AI都能准确计数,帮你记录每一次进步。
界面友好,操作简单,让健身更加科学高效。
️【自定义功能】
可以根据自己的需求,训练或自定义动作,让AI成为你的私人健身教练。
opencv-python
, mediapipe
(用于人体姿态估计), 和 tkinter
(用于GUI)
安装必要的库:
import cv2
import mediapipe as mp
import tkinter as tk
from PIL import Image, ImageTk
# 初始化Mediapipe的Pose检测
mp_drawing = mp.solutions.drawing_utils
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)
# 定义一个函数来检测仰卧起坐
def detect_sit_up(frame):
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)
if results.pose_landmarks:
# 获取关键点
landmarks = results.pose_landmarks.landmark
hip = landmarks[mp_pose.PoseLandmark.LEFT_HIP].y
knee = landmarks[mp_pose.PoseLandmark.LEFT_KNEE].y
ankle = landmarks[mp_pose.PoseLandmark.LEFT_ANKLE].y
# 判断是否完成一次仰卧起坐
if hip < knee and hip < ankle:
return True
return False
# 定义一个函数来更新UI中的计数器
def update_counter(count):
count_label.config(text=f"Count: {count}")
# 主程序
def main():
global root
cap = cv2.VideoCapture(0)
sit_up_count = 0
while True:
ret, frame = cap.read()
if not ret:
break
# 检测仰卧起坐
is_sit_up = detect_sit_up(frame)
# 如果检测到完成一次仰卧起坐,则增加计数
if is_sit_up:
sit_up_count += 1
update_counter(sit_up_count)
# 显示视频帧
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame)
img_tk = ImageTk.PhotoImage(image=img)
video_label.imgtk = img_tk
video_label.configure(image=img_tk)
root.update_idletasks()
root.update()
# UI界面
root = tk.Tk()
root.title("Sit-Up Counter")
video_label = tk.Label(root)
video_label.pack()
count_label = tk.Label(root, text="Count: 0")
count_label.pack()
main()
此外,为了使代码运行,你需要确保你的环境中安装了所有必需的库,并且摄像头可以正常工作。