基于人体姿态识别的健身辅助系统通过一系列复杂的初始化设置和实时循环处理,实现了对用户姿态的精准跟踪和与预设健身动作的动态比较。
本健身系统分为两个大类(瑜伽和健身)一共有六种动作,分别是瑜伽T-Pose、Tree和Warrior姿势;锻炼手部、腿部和俯卧撑。
以下是具体过程:
初始化设置:
在系统启动之初,首先设置必要的变量来存储状态信息,如当前动作、动作进度等。同时,初始化定时器,用于控制动作的持续时间和切换间隔,后续会详细讲到wtimer和ptimer的作用。此外,还需要配置视频捕获对象,确保能够实时获取用户的视频流。这些初始化步骤为后续的实时处理奠定了基础。
视频帧捕获:
在初始化完成后,系统进入主循环,持续捕获视频帧。通过调用视频捕获对象的读取方法,不断获取用户的实时视频流,为后续的姿态识别提供数据支持。
姿态识别:
对于每一帧视频,利用先进的姿态估计模型(如MediaPipe等)进行处理。这些模型能够从视频帧中准确提取出人体33个关键点,如关节点、头部位置等。这些关键点是后续姿态比对的关键依据。
class PoseLandmark(enum.IntEnum):
"""The 33 pose landmarks."""
NOSE = 0
LEFT_EYE_INNER = 1
LEFT_EYE = 2
LEFT_EYE_OUTER = 3
RIGHT_EYE_INNER = 4
RIGHT_EYE = 5
RIGHT_EYE_OUTER = 6
LEFT_EAR = 7
RIGHT_EAR = 8
MOUTH_LEFT = 9
MOUTH_RIGHT = 10
LEFT_SHOULDER = 11
RIGHT_SHOULDER = 12
LEFT_ELBOW = 13
RIGHT_ELBOW = 14
LEFT_WRIST = 15
RIGHT_WRIST = 16
LEFT_PINKY = 17
RIGHT_PINKY = 18
LEFT_INDEX = 19
RIGHT_INDEX = 20
LEFT_THUMB = 21
RIGHT_THUMB = 22
LEFT_HIP = 23
RIGHT_HIP = 24
LEFT_KNEE = 25
RIGHT_KNEE = 26
LEFT_ANKLE = 27
RIGHT_ANKLE = 28
LEFT_HEEL = 29
RIGHT_HEEL = 30
LEFT_FOOT_INDEX = 31
RIGHT_FOOT_INDEX = 32
_BINARYPB_FILE_PATH = 'mediapipe/modules/pose_landmark/pose_landmark_cpu.binarypb'
用户姿态与标准姿态比对:
在获取到用户的关键点后,再将它们与预设的标准健身动作的关键点进行比对,通过计算关键点之间的位置关系和角度差异,系统能够判断用户的姿态是否正确,以及与标准动作的偏离程度。这里用的数据集是在网上找的以json格式存储。
反馈与指导:
基于姿态比对的结果,系统为用户提供个性化的反馈与指导。如果用户的姿态正确,系统可能会显示鼓励性的信息或继续倒计时;如果姿态不正确,系统则会提示用户调整姿势,甚至显示具体的调整建议,这种实时反馈有助于用户更好地掌握健身动作的要领。
控制逻辑:
在整个过程中,定时器发挥着至关重要的作用。例如,wtimer可能用于控制用户在当前动作中的保持时间,确保动作得到充分执行;而ptimer则可能用于判断用户是否准备好进入下一个动作。这些定时器根据预设的规则和条件进行触发和重置,确保健身动作的流畅切换和进度的有序控制。
1.if wtimer_active:
2. if wtimer_left > 0:
3. wcurr_time = int(time.time() - winit_time)
4. if prev_wcurr_time != wcurr_time:
5. wtimer_curr_rec_width += int(wtimer_width_step)
6. prev_wcurr_time = wcurr_time
7. wtimer_left -= 1
8. wmins, wsecs = divmod(wtimer_left, 60)
9. wtimer = '{:02d}:{:02d}'.format(wmins, wsecs)
10. else:
11. wtimer = 'Time is end!'
12. wtimer_text_size = 1
13. winit_time = time.time() # 重置一下
14.else:
15. winit_time = time.time()
项目展示:
开始运行时,系统会立即启动一个五分钟的倒计时。在这五分钟内,用户将跟随背景视频中的专业指导进行瑜伽动作练习。系统具备智能识别功能,当用户的动作符合标准时,界面上方的文字将变为绿色,提示用户当前姿态标准。