用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 = Falseresults = pose.process(image)image.flags.writeable = Trueimage = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)if results.pose_landmarks:# 获取关键点landmarks = results.pose_landmarks.landmarkhip = landmarks[mp_pose.PoseLandmark.LEFT_HIP].yknee = landmarks[mp_pose.PoseLandmark.LEFT_KNEE].yankle = landmarks[mp_pose.PoseLandmark.LEFT_ANKLE].y# 判断是否完成一次仰卧起坐if hip < knee and hip < ankle:return Truereturn False# 定义一个函数来更新UI中的计数器
def update_counter(count):count_label.config(text=f"Count: {count}")# 主程序
def main():global rootcap = cv2.VideoCapture(0)sit_up_count = 0while True:ret, frame = cap.read()if not ret:break# 检测仰卧起坐is_sit_up = detect_sit_up(frame)# 如果检测到完成一次仰卧起坐,则增加计数if is_sit_up:sit_up_count += 1update_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_tkvideo_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()
此外,为了使代码运行,你需要确保你的环境中安装了所有必需的库,并且摄像头可以正常工作。