家庭健身智能推荐与姿态监测系统

前言

此项目依赖于 Python3.8

功能

​ 为了给运动者提供一种更加科学、更加精准的个性化运动方案,设计实现了一个家庭健身智能推荐及姿态监测系统。

​ 系统根据已检测个体的身体指标,为其推荐个性化健身方案;通过动态采集肢体关节的运动数据值,将采集到的肢体关节的运动数据值与预设的肢体关节的运动数据域值进行实时比较,若超出预设的域值范围,则进行提示,以达到保持正确姿态的需求,从而实现对人体运动姿势的监测和报警等功能。

​ 运行程序之后,会调用摄像头,录制您的运动视频,接着在再对视频的姿态进行分析从而判断您的运动姿态是否标准。

第三方库

1
2
3
4
5
6
PIL       version == 8.4.0
pygame version == 2.0.2
eyed3 version == 0.9.6
python-opencv version == 4.5.5
mediapipe version == 0.8.9.1
numpy version == 1.21.4

目录

main.py

dispose.py

voice.py

camera.py

hand_test.py

部分代码展示

camera.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import cv2

def videocapture():
cap = cv2.VideoCapture(0) # 生成读取摄像头对象
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取视频的宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取视频的高度
fps = cap.get(cv2.CAP_PROP_FPS) # 获取视频的帧率
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) # 视频的编码
# 定义视频对象输出
writer = cv2.VideoWriter("./video_result.mp4", fourcc, fps, (width, height))
while cap.isOpened():
ret, frame = cap.read() # 读取摄像头画面
cv2.imshow('teswell', frame) # 显示画面
key = cv2.waitKey(24)


'''转化为灰度图像进行处理'''
# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将捕获的一帧图像灰度化处理
# frame = cv2.flip(gray, 1) # 图像翻转(0:垂直翻转;1:水平翻转;-1:垂直水平翻转)

# frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将捕获的一帧图像灰度化处理
# frame = cv2.flip(frame, 1)

writer.write(frame) # 视频保存
# 按Q退出
if key == ord('q'):
break
cap.release() # 释放摄像头
cv2.destroyAllWindows() # 释放所有显示图像窗口

dispose.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
import cv2
import mediapipe as mp
import time
import os

# os.environ["CUDA_DEVICES_ORDER"]="PCI_BUS_IS"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

def fun():
# mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils

# 参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 1, 1)
DrawingSpec_line = mp_drawing.DrawingSpec((173,255,47), 1, 1)

# mp.solutions.holistic是一个类别,是人的整体
mp_holistic = mp.solutions.holistic

# 参数:1、是否检测静态图片,2、姿态模型的复杂度,3、结果看起来平滑(用于video有效),4、检测阈值,5、跟踪阈值
holistic = mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5)

cap = cv2.VideoCapture('./video_result.mp4')

while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignoring empty camera frame.")
# open_mp3()
break
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 处理RGB图像
results = holistic.process(image1)
'''

mp_holistic.PoseLandmark类中共33个人体骨骼点
mp_holistic.HandLandmark类中共21个手部关键点
脸部有468个关键点
'''
# 省略部分核心代码

def analysic():
fun()
holistic.close()
cv2.destroyAllWindows()
cap.release()


项目成果

俯卧撑人体姿态分析 下蹲人体姿态分析 站立人体姿态分析

说明

为了知识产权,本项目的代码和资源文件不完整。

  1. 语音包换成一个无实际意义的语音
  2. 本项目dispose.pyhand_test.py删除了核心代码,无法完成核心功能。