基于python的mediapipe姿态识别 动作识别 人体关健点 实现跳绳状态判别 计数功能

709893a269a0494fb0013f95dfb5e163.jpeg

基于Python的MediaPipe姿态识别实现跳绳状态判别与计数功能

项目概述

本项目旨在利用Google的MediaPipe库,结合姿态识别技术,实现对跳绳动作的实时检测与计数功能。通过识别人体关键点,系统能够准确判断跳绳动作的状态,并实时统计跳绳次数。该项目适用于健身应用程序、体育训练分析等领域,为用户提供准确的运动数据支持。

技术栈

  • Python:开发语言。
  • MediaPipe:用于姿态识别的核心库。
  • OpenCV:用于图像处理和视频流的捕获。
  • NumPy:进行数值计算。

系统功能

  1. 姿态识别:利用MediaPipe的姿态识别功能,实时检测人体的关键点。
  2. 动作识别:根据关键点的位置和变化,判断是否为跳绳动作。
  3. 计数功能:实时统计跳绳次数,并在界面上显示。
  4. 实时反馈:在界面上显示当前跳绳状态和次数。

系统特点

  1. 高精度识别:MediaPipe提供了高精度的姿态识别能力,能够准确检测人体关键点。
  2. 实时处理:系统能够在视频流中实时处理每一帧图像,实时反馈跳绳状态和次数。
  3. 用户友好:通过图形界面,用户可以轻松启动和停止检测,并查看实时数据。

系统架构

  1. 输入源选择:用户可以选择摄像头作为输入源。
  2. 姿态检测:使用MediaPipe的姿态检测功能,实时检测人体关键点。
  3. 动作识别:根据关键点的变化,判断是否为跳绳动作。
  4. 计数功能:统计跳绳次数,并在界面上显示。
  5. 结果展示:在GUI界面上显示跳绳状态和次数。

关键技术

  1. MediaPipe姿态检测:MediaPipe提供了高精度的姿态检测功能,能够实时检测人体的多个关键点。
  2. 动作识别算法:通过分析关键点的位置和变化,判断是否为跳绳动作。
  3. 计数逻辑:根据动作识别结果,统计跳绳次数。

系统流程

  1. 启动摄像头:用户启动摄像头,系统开始捕获视频流。
  2. 姿态检测:使用MediaPipe的姿态检测功能,实时检测人体关键点。
  3. 动作识别:根据关键点的位置和变化,判断是否为跳绳动作。
  4. 计数功能:统计跳绳次数,并在界面上显示。
  5. 实时反馈:在GUI界面上显示跳绳状态和次数。

示例代码

以下是一个简化的代码示例,展示了如何使用MediaPipe姿态检测功能进行跳绳动作的识别和计数:

1import cv2
2import mediapipe as mp
3import numpy as np
4
5# 初始化MediaPipe姿态检测模块
6mp_drawing = mp.solutions.drawing_utils
7mp_pose = mp.solutions.pose
8
9# 初始化计数器
10count = 0
11state = "down"
12
13# 初始化摄像头
14cap = cv2.VideoCapture(0)
15
16# 设置MediaPipe姿态检测参数
17with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:
18    while cap.isOpened():
19        ret, frame = cap.read()
20        
21        # 转换图像颜色格式
22        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
23        image.flags.writeable = False
24        
25        # 进行姿态检测
26        results = pose.process(image)
27        
28        # 重新设置图像颜色格式
29        image.flags.writeable = True
30        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
31        
32        # 绘制姿态关键点
33        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,
34                                  mp_drawing.DrawingSpec(color=(245, 117, 66), thickness=2, circle_radius=2),
35                                  mp_drawing.DrawingSpec(color=(245, 66, 230), thickness=2, circle_radius=2))
36        
37        # 获取关键点坐标
38        try:
39            landmarks = results.pose_landmarks.landmark
40            
41            # 获取肩膀和臀部的坐标
42            shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x, landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]
43            hip = [landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].x, landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].y]
44            
45            # 计算肩膀和臀部之间的距离
46            distance = np.sqrt((shoulder[0] - hip[0])**2 + (shoulder[1] - hip[1])**2)
47            
48            # 根据距离判断跳绳状态
49            if distance > 0.5 and state == "down":
50                state = "up"
51            elif distance < 0.3 and state == "up":
52                state = "down"
53                count += 1
54        
55        except Exception as e:
56            pass
57        
58        # 显示计数结果
59        cv2.rectangle(image, (0, 0), (225, 73), (245, 117, 16), -1)
60        cv2.putText(image, 'Jumps: ' + str(count), (15, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 255, 255), 2, cv2.LINE_AA)
61        
62        # 显示图像
63        cv2.imshow('Jump Rope Counter', image)
64        
65        if cv2.waitKey(10) & 0xFF == ord('q'):
66            break
67
68# 释放资源
69cap.release()
70cv2.destroyAllWindows()

总结

本项目通过结合MediaPipe的姿态识别技术和OpenCV的视频处理功能,实现了对跳绳动作的实时检测与计数。系统能够在视频流中实时检测人体关键点,并根据关键点的变化判断跳绳动作,实时统计跳绳次数。该系统具有高精度和实时性,适用于健身应用程序和体育训练分析等多个领域。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值