修改单双杠

This commit is contained in:
渣渣和 2024-09-24 18:08:58 +08:00
parent 8daea93470
commit 017f9d1d8a
4 changed files with 68 additions and 56 deletions

View File

@ -35,6 +35,7 @@ class PullUp_1(BaseExercise):
self.exercise_type = "引体向上" self.exercise_type = "引体向上"
self.end_test = 0 self.end_test = 0
self.had_done = False self.had_done = False
self.time_1 = 0
# 摆动状态 # 摆动状态
self.state = 0 self.state = 0
# 初始化 # 初始化
@ -139,6 +140,8 @@ class PullUp_1(BaseExercise):
if self.form == 0: if self.form == 0:
if time.time() - self.sta_time > 1.5: if time.time() - self.sta_time > 1.5:
if elbow_1 > 150 and elbow_2 > 150 and shoulder_1 > 100 and shoulder_2 > 100 and eye_1_y > wrist_1_y and eye_2_y > wrist_2_y: if elbow_1 > 150 and elbow_2 > 150 and shoulder_1 > 100 and shoulder_2 > 100 and eye_1_y > wrist_1_y and eye_2_y > wrist_2_y:
self.time_1 += 1
if self.time_1 > 30:
self.form = 1 self.form = 1
self.speak_driver.add_speak("请开始考试") self.speak_driver.add_speak("请开始考试")
self.starttime = time.time() self.starttime = time.time()
@ -146,10 +149,10 @@ class PullUp_1(BaseExercise):
self.initial_wrist_2_y = wrist_2_y self.initial_wrist_2_y = wrist_2_y
self.initial_height_left = math.sqrt( self.initial_height_left = math.sqrt(
math.pow(shoulder_2_x - hip_2_x, 2) + math.pow(shoulder_2_y - hip_2_y, 2)) * math.cos( math.pow(shoulder_2_x - hip_2_x, 2) + math.pow(shoulder_2_y - hip_2_y, 2)) * math.cos(
math.pi / 6) math.pi / 4)
self.initial_height_right = math.sqrt( self.initial_height_right = math.sqrt(
math.pow(shoulder_1_x - hip_1_x, 2) + math.pow(shoulder_1_y - hip_1_y, 2)) * math.cos( math.pow(shoulder_1_x - hip_1_x, 2) + math.pow(shoulder_1_y - hip_1_y, 2)) * math.cos(
math.pi / 6) math.pi / 4)
elif self.pre_pos == 1 and self.form == 1: elif self.pre_pos == 1 and self.form == 1:
height_left = math.sqrt(math.pow(shoulder_2_x - hip_2_x, 2) + math.pow(shoulder_2_y - hip_2_y, 2)) height_left = math.sqrt(math.pow(shoulder_2_x - hip_2_x, 2) + math.pow(shoulder_2_y - hip_2_y, 2))

View File

@ -32,6 +32,7 @@ class PullUp_2(BaseExercise):
self.exercise_type = "引体向上" self.exercise_type = "引体向上"
self.end_test = 0 self.end_test = 0
self.had_done = False self.had_done = False
self.time_1 = 0
# 摆动状态 # 摆动状态
self.state = 0 self.state = 0
# 初始化 # 初始化
@ -123,6 +124,8 @@ class PullUp_2(BaseExercise):
if self.form == 0: if self.form == 0:
if time.time() - self.sta_time > 1.5: if time.time() - self.sta_time > 1.5:
if elbow_1 > 150 and elbow_2 > 150 and shoulder_1 > 100 and shoulder_2 > 100 and eye_1_y > wrist_1_y and eye_2_y > wrist_2_y: if elbow_1 > 150 and elbow_2 > 150 and shoulder_1 > 100 and shoulder_2 > 100 and eye_1_y > wrist_1_y and eye_2_y > wrist_2_y:
self.time_1 += 1
if self.time_1 > 20:
self.form = 1 self.form = 1
self.speak_driver.add_speak("请开始考试") self.speak_driver.add_speak("请开始考试")
self.starttime = time.time() self.starttime = time.time()

View File

@ -26,6 +26,7 @@ class PullUp_3(BaseExercise):
# 开始标志 # 开始标志
self.form = 0 self.form = 0
# 状态反馈 # 状态反馈
self.time_1 = 0
self.pre_pos = 0 self.pre_pos = 0
self.sta_time = time.time() self.sta_time = time.time()
self.feedback = "开始" self.feedback = "开始"
@ -123,6 +124,8 @@ class PullUp_3(BaseExercise):
if self.form == 0: if self.form == 0:
if time.time() - self.sta_time > 1.5: if time.time() - self.sta_time > 1.5:
if elbow_1 > 150 and elbow_2 > 150 and shoulder_1 > 100 and shoulder_2 > 100 and eye_1_y > wrist_1_y and eye_2_y > wrist_2_y: if elbow_1 > 150 and elbow_2 > 150 and shoulder_1 > 100 and shoulder_2 > 100 and eye_1_y > wrist_1_y and eye_2_y > wrist_2_y:
self.time_1 += 1
if self.time_1 > 20:
self.form = 1 self.form = 1
self.speak_driver.add_speak("请开始考试") self.speak_driver.add_speak("请开始考试")
self.starttime = time.time() self.starttime = time.time()

View File

@ -1,6 +1,3 @@
import math
import time
import numpy as np import numpy as np
from MCamera.mp_camera import * from MCamera.mp_camera import *
@ -20,6 +17,7 @@ class Tricep_dip_1(BaseExercise):
# 当前状态 # 当前状态
self.heel = 0 self.heel = 0
# 动作持续帧数 # 动作持续帧数
self.time_0 = 0
self.time_2 = 0 self.time_2 = 0
self.time_1 = 0 self.time_1 = 0
self.time = 0 self.time = 0
@ -42,7 +40,7 @@ class Tricep_dip_1(BaseExercise):
self.initial_wrist_2_y = 0 self.initial_wrist_2_y = 0
# 双杠臂屈伸参数 # 双杠臂屈伸参数
self.corner = (0, 480, 260, 380) self.corner = (0, 480, 230, 410)
MediapipeAlgorithmPlugin.set_corner(corner=self.corner) MediapipeAlgorithmPlugin.set_corner(corner=self.corner)
MediapipeAlgorithmPlugin.set_config(config=self.config) MediapipeAlgorithmPlugin.set_config(config=self.config)
@ -108,19 +106,23 @@ class Tricep_dip_1(BaseExercise):
if len(lm_list) != 0: if len(lm_list) != 0:
elbow_1 = self.detector.findAngle(img, 11, 13, 15) elbow_1 = self.detector.findAngle(img, 11, 13, 15)
elbow_2 = self.detector.findAngle(img, 12, 14, 16) elbow_2 = self.detector.findAngle(img, 12, 14, 16)
shoulder_1 = self.detector.findAngle(img, 13, 11, 23)
shoulder_2 = self.detector.findAngle(img, 14, 12, 24)
eye_1_y = self.detector.findPosition(img, False)[3][2] eye_1_y = self.detector.findPosition(img, False)[3][2]
eye_2_y = self.detector.findPosition(img, False)[6][2] eye_2_y = self.detector.findPosition(img, False)[6][2]
elbow_1_x = self.detector.findPosition(img, False)[13][1] elbow_1_x = self.detector.findPosition(img, False)[13][1]
elbow_1_y = self.detector.findPosition(img, False)[13][2] elbow_1_y = self.detector.findPosition(img, False)[13][2]
elbow_2_x = self.detector.findPosition(img, False)[14][1] elbow_2_x = self.detector.findPosition(img, False)[14][1]
elbow_2_y = self.detector.findPosition(img, False)[14][2] elbow_2_y = self.detector.findPosition(img, False)[14][2]
wrist_1_x = self.detector.findPosition(img, False)[15][1]
wrist_2_x = self.detector.findPosition(img, False)[16][1]
wrist_1_y = self.detector.findPosition(img, False)[15][2] wrist_1_y = self.detector.findPosition(img, False)[15][2]
wrist_2_y = self.detector.findPosition(img, False)[16][2] wrist_2_y = self.detector.findPosition(img, False)[16][2]
heel_y = self.detector.findPosition(img, False)[27][2] heel_y = self.detector.findPosition(img, False)[27][2]
shoulder_1_x = self.detector.findPosition(img, False)[11][1] shoulder_1_x = self.detector.findPosition(img, False)[11][1]
shoulder_2_x = self.detector.findPosition(img, False)[11][1] shoulder_2_x = self.detector.findPosition(img, False)[12][1]
shoulder_1_y = self.detector.findPosition(img, False)[11][2] shoulder_1_y = self.detector.findPosition(img, False)[11][2]
shoulder_2_y = self.detector.findPosition(img, False)[11][2] shoulder_2_y = self.detector.findPosition(img, False)[12][2]
vis_shoulder_1 = self.detector.findPosition(img, False)[11][4] vis_shoulder_1 = self.detector.findPosition(img, False)[11][4]
vis_shoulder_2 = self.detector.findPosition(img, False)[12][4] vis_shoulder_2 = self.detector.findPosition(img, False)[12][4]
@ -132,16 +134,17 @@ class Tricep_dip_1(BaseExercise):
self.speak_driver.add_speak("双手握杠后,进入准备状态") self.speak_driver.add_speak("双手握杠后,进入准备状态")
self.pre_pos = 1 self.pre_pos = 1
if self.form == 0 and self.pre_pos == 1: if self.form == 0 and self.pre_pos == 1:
if self.readiness_state == 0: if self.readiness_state == 0:
if elbow_1 < 90 and elbow_2 < 90: if shoulder_1 > 70 and shoulder_2 > 70:
self.readiness_state = 1 self.readiness_state = 1
# self.heel = heel_y self.heel = heel_y
self.speak_driver.add_speak("上杠,听到提示声后开始考试") self.speak_driver.add_speak("上杠,听到提示声后开始考试")
if self.readiness_state == 1: if self.readiness_state == 1:
# if elbow_1 > 157 and eye_1_y < wrist_1_y and eye_2_y < wrist_2_y and heel_y < self.heel - 50: if elbow_1 > 157 and eye_1_y < wrist_1_y and eye_2_y < wrist_2_y and (shoulder_1 < 30 or shoulder_2 < 30) and heel_y < self.heel - 50:
if elbow_1 > 157 and elbow_2 > 157 and eye_1_y < wrist_1_y and eye_2_y < wrist_2_y: # if elbow_1 > 157 and eye_1_y < wrist_1_y and eye_2_y < wrist_2_y and (shoulder_1 < 30 or shoulder_2 < 30):
self.time_0 += 1
if self.time_0 > 30:
if vis_shoulder_1 > 0.8 and vis_shoulder_1 > vis_shoulder_2: if vis_shoulder_1 > 0.8 and vis_shoulder_1 > vis_shoulder_2:
self.time_1 += 1 self.time_1 += 1
if self.time_1 > 3: if self.time_1 > 3:
@ -164,8 +167,8 @@ class Tricep_dip_1(BaseExercise):
self.initial_wrist_2_y = wrist_2_y self.initial_wrist_2_y = wrist_2_y
if self.dir == 1 and self.pre_pos == 1 and self.form == 1: if self.dir == 1 and self.pre_pos == 1 and self.form == 1:
# if wrist_1_y - self.initial_wrist_1_y > 50 or heel_y < self.heel - 10: shoulder_angle = self.detector.findIncludedAngle(elbow_1_x, elbow_1_y, wrist_1_x, wrist_1_x)
if wrist_1_y - self.initial_wrist_1_y > 50: if wrist_2_y - self.initial_wrist_2_y > 50 or wrist_1_y - self.initial_wrist_1_y > 50 or heel_y < self.heel - 5:
self.end_test += 1 self.end_test += 1
if self.end_test > 2: if self.end_test > 2:
self.speak_driver.add_speak("双手已离开双杠,考试结束") self.speak_driver.add_speak("双手已离开双杠,考试结束")
@ -181,7 +184,7 @@ class Tricep_dip_1(BaseExercise):
self.state = 0 self.state = 0
self.time = 0 self.time = 0
if elbow_1 >= 157 and shoulder_1_y < elbow_1_y and not self.had_done and self.count > 0: if elbow_1 >= 160 and shoulder_1_y < elbow_1_y and shoulder_1_y < self.initial_wrist_1_y - 60 and shoulder_angle > 60 and not self.had_done and self.count > 0:
self.feedback = "下落" self.feedback = "下落"
if self.state == 0: if self.state == 0:
self.time += 1 self.time += 1
@ -193,7 +196,8 @@ class Tricep_dip_1(BaseExercise):
self.initial_wrist_1_y = wrist_1_y self.initial_wrist_1_y = wrist_1_y
self.initial_wrist_2_y = wrist_2_y self.initial_wrist_2_y = wrist_2_y
elif self.dir == 2 and self.pre_pos == 1 and self.form == 1: elif self.dir == 2 and self.pre_pos == 1 and self.form == 1:
if wrist_2_y - self.initial_wrist_2_y > 50: shoulder_angle = self.detector.findIncludedAngle(elbow_2_x, elbow_2_y, wrist_2_x, wrist_2_x)
if wrist_2_y - self.initial_wrist_2_y > 50 or wrist_1_y - self.initial_wrist_1_y > 50 or heel_y < self.heel - 5:
self.end_test += 1 self.end_test += 1
if self.end_test > 2: if self.end_test > 2:
self.speak_driver.add_speak("双手已离开双杠,考试结束") self.speak_driver.add_speak("双手已离开双杠,考试结束")
@ -209,7 +213,7 @@ class Tricep_dip_1(BaseExercise):
self.state = 0 self.state = 0
self.time = 0 self.time = 0
if elbow_2 >= 157 and shoulder_2_y < elbow_2_y and not self.had_done and self.count > 0: if elbow_2 >= 160 and shoulder_2_y < elbow_2_y and shoulder_2_y < self.initial_wrist_2_y - 60 and shoulder_angle > 60 and not self.had_done and self.count > 0:
self.feedback = "下落" self.feedback = "下落"
if self.state == 0: if self.state == 0:
self.time += 1 self.time += 1
@ -220,4 +224,3 @@ class Tricep_dip_1(BaseExercise):
if self.count == 1: if self.count == 1:
self.initial_wrist_1_y = wrist_1_y self.initial_wrist_1_y = wrist_1_y
self.initial_wrist_2_y = wrist_2_y self.initial_wrist_2_y = wrist_2_y