Good-GYM 是一款基于 AI 姿态检测技术的智能健身助手,通过摄像头实时追踪您的运动姿态,自动计数并提供语音反馈。项目采用 Google MediaPipe 进行姿态检测,支持 Docker 容器化部署,可通过 Web 界面远程访问。
- 🤖 AI 姿态检测 - 采用 MediaPipe Pose Landmarker 实现精准的 33 关键点追踪
- 🎬 多源视频支持 - 支持本地摄像头、RTSP 网络摄像头、本地视频文件
- 🐳 Docker 部署 - 一键启动,支持打包成 FPK 部署到 FNOS/Docker 环境
- 🌐 Web 界面访问 - 通过浏览器远程访问,支持桌面端和移动端
- 🔊 智能语音播报 - TTS 语音播报次数,里程碑音效(每 10 次)
- 💾 设置持久化 - 运动类型、摄像头地址等配置自动保存
- 📊 运动统计 - 实时追踪健身进度和历史记录
- 🎨 可视化骨骼 - 实时显示人体骨骼和关键角度
- 海康威视 (Hikvision):
rtsp://admin:密码@IP地址:554/h264/ch1/main/av_stream - TP-Link / TAPO:
rtsp://admin:密码@IP地址:554/stream1 - 小米/大方:
rtsp://IP地址:8554/unicast
-
Web 界面配置:
- 打开 Good-GYM 网页 (
http://IP:6080) - 点击右下角【控制面板】
- 将【视频源】选择为
RTSP - 在下方输入框填入完整 RTSP 地址
- 点击【保存设置】,页面会自动刷新
- 打开 Good-GYM 网页 (
-
配置文件配置 (Docker):
- 修改
docker-compose.yml:environment: - RTSP_URL=rtsp://admin:password@192.168.1.100:554/stream1
- 修改
- iOS/Android: 安装 "IP Webcam" 或 "DroidCam" 应用。
- 获取 RTSP/HTTP 流地址(例如
http://192.168.1.5:8080/video)。 - 在 Good-GYM 中填写该地址。
-
下载 FPK 包
git clone https://github.com/yanfeng17/Good-GYM.git
-
安装到 FNOS
- 在飞牛 OS 应用商店中选择"本地安装"
- 上传
fpk/goodgym.fpk文件 - 安装完成后,在浏览器访问
http://[NAS_IP]:6080
docker-compose up -dpip install -r requirements.txt
python run.py| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Windows 10 / macOS 10.15 / Linux | Windows 11 / macOS 12+ / Ubuntu 20.04+ |
| Python | 3.9 | 3.9 或 3.10 |
| 摄像头 | 任意 USB/网络摄像头 | 1080p 摄像头 |
| Docker | Docker 20.10+ | Docker 24.0+ |
访问 http://[设备IP]:6080:
- 🎥 视频显示区 - 实时显示摄像头画面和骨骼追踪
- 📊 控制面板 - 选择运动类型、调整设置
- 🔊 音频状态 - 右上角显示音频连接状态(绿色=已连接)
- 🎯 计数显示 - 大字显示当前次数
系统通过计算特定关节点的角度变化来判定动作是否完成。一般逻辑为:
- 准备/拉伸阶段:角度大于
开始角度,进入 "UP" 状态。 - 发力/收缩阶段:角度小于
触发角度,且处于 "UP" 状态 -> 计数 +1。
| 运动类型 | 中文名 | 关键部位 (角度计算点) | 计数逻辑 (角度阈值) | 说明 |
|---|---|---|---|---|
| Squat | 深蹲 | 髋部-膝盖-脚踝 | >160° 站立 -> <110° 下蹲 | 站直后下蹲到大腿约为水平位置 |
| Push-up | 俯卧撑 | 肩膀-手肘-手腕 | >160° 手臂伸直 -> <110° 手臂弯曲 | 手臂伸直后下放身体直到手肘弯曲约90度 |
| Sit-up | 仰卧起坐 | 肩膀-髋部-膝盖 | >170° 躺平 -> <145° 坐起 | 平躺后上半身坐起,使身体折叠 |
| Bicep Curl | 弯举 | 肩膀-手肘-手腕 | <60° 手臂弯曲 (反向) -> >160° 下放 | 注意:此处逻辑为手臂先弯曲(举起)再下放复位 |
| Lateral Raise | 侧平举 | 髋部-肩膀-手肘 | <80° 手臂平举 -> >30° 手臂放下 | 注意:测量的是腋下角度。手臂抬平后放下复位 |
| Overhead Press | 推举 | 髋部-肩膀-手肘 | >150° 手臂上举 -> <30° 手臂放下 | 测量腋下角度,手臂上举伸直后下放 |
| Leg Raise | 抬腿 | 肩膀-髋部-膝盖 | >160° 腿部伸直 -> <130° 抬腿 | 身体平躺,腿部伸直后向上抬起 |
| Knee Raise | 抬膝 | 髋部-膝盖-脚踝 | >160° 腿部伸直 -> <110° 提膝 | 站立状态下将膝盖提起 |
| Knee Press | 压膝 | 髋部-膝盖-脚踝 | >160° 腿部伸直 -> <110° 弯曲 | 膝盖按压运动,检测腿部角度变化 |
| Crunch | 卷腹 | 肩膀-髋部-膝盖 | >175° 躺平 -> <150° 卷起 | 类似仰卧起坐,亦检测上半身抬起角度 |
提示:所有角度阈值均可在
data/exercises.json文件中自定义修改。例如觉得深蹲太难触发,可以将down_angle改大一点(如 120)。
欢迎提交 Pull Request!
- yo-WASSUP/Good-GYM - 本项目基于此项目进行开发
- Google MediaPipe - 提供强大的姿态检测能力
Made with ❤️ by yanfeng17