hasaneyldrm/exercises-dataset
GitHub: hasaneyldrm/exercises-dataset
收录 1,324 项健身练习的多语言结构化数据集,附带 GIF 动画、缩略图和交互式浏览器,为健身类应用开发与研究提供开箱即用的数据基础。
Stars: 2943 | Forks: 329
# 💪 练习数据集
## ⚠️ 免责声明
## 📦 数据来源与归属
本仓库中的练习数据、缩略图和动画 GIF 来源于
**[Kaggle 上由 *omarxadel* 提供的 Fitness Exercises Dataset](https://www.kaggle.com/datasets/omarxadel/fitness-exercises-dataset)**。
- 英文说明及**所有媒体内容**(图片和 GIF)均来自该数据集。
- **西班牙语 🇪🇸、意大利语 🇮🇹 和土耳其语 🇹🇷 翻译**是在原始英文数据的基础上,由本仓库添加的。
## 📋 目录
- [数据来源与归属](#-data-source--attribution)
- [概述](#-overview)
- [交互式浏览器与开发者设置](#-interactive-browser--developer-setup)
- [文件结构](#-file-structure)
- [统计数据](#-statistics)
- [数据 Schema](#-data-schema)
- [练习示例](#-sample-exercises)
- [用法示例](#-usage-examples)
- [许可证](#-license)
## 🔍 概述
本数据集是为教育和研究目的而整理的 **1,324 项健身练习**合集。它涵盖了广泛的肌肉群、器械类型和练习类别 —— 非常适合用于:
- 构建健身或锻炼计划应用程序
- 涉及动作识别或推荐的机器学习项目
- 健康与保健研究
- 教学演示与原型设计
每个练习条目包含:
| 字段 | 描述 |
|---|---|
| 唯一 ID | 数字标识符(例如 `"0001"`) |
| 名称 | 完整的描述性练习名称 |
| 类别 | 针对的主要肌肉群 |
| 目标 | 特定的目标肌肉 |
| 肌肉群 | 辅助/协同肌肉 |
| 器械 | 所需器械(自重训练则为 `body weight`) |
| 说明 | 每项练习的分步说明 |
| 可用语言 | 🇬🇧 英语 · 🇪🇸 西班牙语 · 🇮🇹 意大利语 · 🇹🇷 土耳其语 |
| 缩略图 | 静态 `.jpg` 预览图 |
| 动画 GIF | 展示动作的 `.gif` 动画 |
## 🖥️ 交互式浏览器与开发者设置
本仓库包含两个开箱即用的 HTML 工具 —— 无需服务器,直接在浏览器中打开即可。
### `index.html` — 练习浏览器
一个完全在客户端运行的练习浏览器,具备:
- 对所有 1,324 项练习的实时搜索
- 按类别、器械和目标肌肉进行筛选
- 带有缩略图预览的无限滚动网格
- 点击任意卡片即可查看完整详情、GIF 动画以及英语、西班牙语、意大利语或土耳其语的说明
### `setup.html` — 开发者设置指南
将数据集集成到你自己的应用程序的分步指南:
1. **数据库设置** — 适用于 SQL Server、PostgreSQL、MySQL 和 SQLite 的 `CREATE TABLE` SQL 语句。在你的浏览器中直接生成包含所有 1,324 条 INSERT 语句的、可立即运行的 `.sql` 文件。
2. **API 集成** — 提供 **JavaScript、Python、C#、Java、PHP、Go 和 cURL** 的客户端代码,展示如何调用你的后端 API。输入你的基础 URL,所有示例都会实时更新。
3. **询问你的 LLM** — 提供一个结构化的 prompt(选择你的框架 + 数据库),你可以将其粘贴到 ChatGPT、Claude 或 Gemini 中,一次性生成完整且可用于生产环境的 REST API。支持 Express.js、FastAPI、ASP.NET Core、Spring Boot、Laravel 和 Gin。
## 📂 文件结构
```
exercises-dataset/
├── data/
│ └── exercises.json # Full dataset — 1,324 exercise records (JSON array)
├── images/ # Exercise thumbnail images (.jpg) — 1,324 files
├── videos/ # Exercise animation GIFs (.gif) — 1,324 files
├── index.html # Interactive exercise browser (client-side, no server needed)
├── setup.html # Developer setup guide (DB import + API integration)
└── README.md
```
### 关键文件
- **`data/exercises.json`** — 主数据文件。一个包含 1,324 个练习对象的 JSON 数组,包含所有元数据以及指向相应媒体文件的路径。
- **`images/`** — 1,324 张以练习 ID 命名的缩略图 JPG(例如 `0001-2gPfomN.jpg`)。
- **`videos/`** — 1,324 个展示每个动作的 GIF 动画(例如 `0001-2gPfomN.gif`)。
- **`index.html`** — 独立的练习浏览器。可在任何现代浏览器中直接打开。
- **`setup.html`** — 面向开发者的指南,涵盖数据库设置、API 集成以及 LLM 辅助的后端生成。
## 📊 统计数据
| 指标 | 数量 |
|---|---|
| 练习总数 | **1,324** |
| 动画 GIF | **1,324** |
| 缩略图 | **1,324** |
### 按身体部位的练习统计
| 身体部位 | 练习数量 |
|---|---|
| 上臂 | 292 |
| 大腿 | 227 |
| 背部 | 203 |
| 腰部 | 169 |
| 胸部 | 163 |
| 肩部 | 143 |
| 小腿 | 59 |
| 前臂 | 37 |
| 有氧 | 29 |
| 颈部 | 2 |
### 按器械的练习统计
| 器械 | 练习数量 |
|---|---|
| 自重 | 325 |
| 哑铃 | 294 |
| 绳索 | 157 |
| 杠铃 | 154 |
| 杠杆器械 | 81 |
| 弹力带 | 54 |
| 史密斯机 | 48 |
| 壶铃 | 41 |
| 负重 | 36 |
| 瑞士球 | 28 |
| EZ 杠铃 | 23 |
| 其他 | 83 |
## 🗂️ 数据 Schema
`data/exercises.json` 中的每条记录都遵循以下结构:
| 字段 | 类型 | 描述 |
|---|---|---|
| `id` | `string` | 唯一的数字标识符(例如 `"0001"`) |
| `name` | `string` | 完整的练习名称(例如 `"3/4 Sit-up"`) |
| `category` | `string` | 身体部位类别(例如 `"upper arms"`、`"chest"`、`"back"`) |
| `body_part` | `string` | 与 `category` 相同 —— 针对身体部位 |
| `equipment` | `string` | 所需器械(例如 `"dumbbell"`、`"body weight"`) |
| `instructions.en` | `string` | 完整的英语分步说明 |
| `instructions.es` | `string` | 完整的西班牙语分步说明 |
| `instructions.it` | `string` | 完整的意大利语分步说明 |
| `instructions.tr` | `string` | 完整的土耳其语分步说明 |
| `muscle_group` | `string` | 主要协同肌肉群 |
| `secondary_muscles` | `array[string]` | 参与的其他肌肉 |
| `target` | `string` | 主要目标肌肉(例如 `"biceps"`、`"pectoralis major"`) |
| `image` | `string` | 缩略图的相对路径(例如 `"images/0001-2gPfomN.jpg"`) |
| `gif_url` | `string` | 动画 GIF 的相对路径(例如 `"videos/0001-2gPfomN.gif"`) |
| `created_at` | `string` | ISO 8601 格式的记录创建时间戳 |
### 示例记录
```
{
"id": "0001",
"name": "3/4 sit-up",
"category": "waist",
"body_part": "waist",
"equipment": "body weight",
"instructions": {
"en": "Lie flat on your back with your knees bent and feet flat on the ground. Place your hands behind your head with your elbows pointing outwards. Engaging your abs, slowly lift your upper body off the ground, curling forward until your torso is at a 45-degree angle. Pause for a moment at the top, then slowly lower your upper body back down to the starting position. Repeat for the desired number of repetitions.",
"es": "Túmbate sobre tu espalda con las rodillas flexionadas y los pies apoyados en el suelo. Coloca las manos detrás de la cabeza con los codos apuntando hacia afuera. Activando el abdomen, levanta lentamente la parte superior del cuerpo del suelo, curvándote hacia adelante hasta que tu torso forme un ángulo de 45 grados. Haz una pausa por un momento en la parte superior, luego baja lentamente la parte superior del cuerpo de vuelta a la posición inicial. Repite el número de repeticiones deseado.",
"it": "Sdraiati sulla schiena con le ginocchia piegate e i piedi appoggiati a terra. Metti le mani dietro la testa con i gomiti rivolti verso l'esterno. Coinvolgendo gli addominali, solleva lentamente la parte superiore del corpo da terra, piegandoti in avanti finché il busto non forma un angolo di 45 gradi. Fermati per un momento in alto, quindi abbassa lentamente la parte superiore del corpo fino alla posizione di partenza. Ripetere per il numero di ripetizioni desiderato.",
"tr": "Sırt üstü yatın, dizlerinizi bükün ve ayaklarınızı yere düz koyun. Ellerinizi başınızın arkasına, dirsekleriniz dışa bakacak şekilde yerleştirin. Karın kaslarınızı kasarak üst vücudunuzu yerden kaldırın ve gövdeniz 45 derecelik açıya gelene kadar öne doğru kıvırın. Bir an için bu pozisyonda bekleyin, ardından yavaşça başlangıç konumuna geri dönün. İstenen tekrar sayısı için hareketi tekrarlayın."
},
"muscle_group": "hip flexors",
"secondary_muscles": ["hip flexors", "lower back"],
"target": "abs",
"image": "images/0001-2gPfomN.jpg",
"gif_url": "videos/0001-2gPfomN.gif",
"created_at": "2026-03-18 12:31:32.854798+00:00"
}
```
## 🎬 练习示例
### 1 — 杠铃卧推 · 胸部
杠铃卧推是胸部训练的基石,也是力量举的“三大项”之一。平躺在卧推凳上,将负重的杠铃降至胸部,然后爆发性地推起。它同时调动胸大肌、肱三头肌和三角肌前束,使其成为提升上肢推力和增加胸肌围度最有效的单项练习。
**关键要领:** 脱架前收紧并下沉肩胛骨。双脚平踩地面,腰部自然反弓,保持与肩同宽的握距。控制杠铃下落至胸部中段,通过脚跟发力推起。
### 2 — 杠铃硬拉 · 大腿 / 背部
杠铃硬拉被广泛认为是终极的全身力量练习。它几乎动用了后链(包括臀大肌、腘绳肌和下背部)中的每一块主要肌肉,同时也对上背部、斜方肌和握力提出了极高的要求。正确的脊柱排列和支撑核心技巧对运动表现和安全性都至关重要。
**关键要领:** 站位时杠铃应位于足弓正上方。屈髋,握距略宽于腿,用力收紧核心,并在整个提拉过程中保持杠铃贴紧小腿。蹬地发力,在顶部通过夹紧臀部并完全伸展髋部来锁定动作。
### 3 — 杠铃全蹲 · 大腿
杠铃全蹲常被称为“所有练习之王”,它要求整个下肢和核心具备协调的力量。与半蹲相比,蹲至低于平行线能最大程度地激活臀大肌和腘绳肌。它是几乎所有力量和增肌计划的基础。
**关键要领:** 杠铃放在上斜方肌(高杠)或后三角肌(低杠)位置。下蹲前收紧核心,膝盖朝脚尖方向打开,屈髋向后坐,直到大腿超过与地面平行的位置。通过整个脚掌发力站起。
### 4 — 哑铃弯举 · 上臂
哑铃弯举是最受认可的手部孤立练习。独立训练每一侧有助于发现并纠正肢体间的力量不平衡。旋前(掌心向上)握法能在动作顶点最大化肱二头肌的收缩。
**关键要领:** 挺胸站立,手肘紧贴身体两侧。弯举时手腕外旋,在顶部收紧,控制下放速度且不要借助身体摇晃。避免利用肩部或下背部的惯性。
### 5 — 引体向上 · 背部
引体向上是衡量上肢拉力的黄金标准自重练习。它主要锻炼背阔肌 —— 从而塑造出令人向往的倒三角体型 —— 同时也极大地调动了肱二头肌、后三角肌和核心稳定肌群。可以从新手(弹力带辅助)到高级(负重)进行扩展。
**关键要领:** 采用正握完全悬垂,握距与肩同宽或略宽。通过下沉肩胛骨用背阔肌发力,将胸部拉向单杠。在动作之间完全下放以保持完整的运动范围。
### 6 — 哑铃侧平举 · 肩部
哑铃侧平举是增加肩部宽度的首选孤立练习。它直接针对三角肌的侧头(中间头),这正是打造宽肩外观的关键。控制的节奏和严格的姿势远比重量更重要。
**关键要领:** 站立时手肘始终保持微曲。将哑铃向两侧平举,直到手臂与地面平行 —— 不要举得更高。以手肘发力引导,而不是手腕。缓慢控制下放,以最大化肌肉的受力时间。
## 🚀 用法示例
### Python — 加载与筛选
```
import json
with open("data/exercises.json", "r", encoding="utf-8") as f:
exercises = json.load(f)
print(f"Total exercises loaded: {len(exercises)}")
# 按类别 Filter
chest_exercises = [ex for ex in exercises if ex["category"] == "chest"]
print(f"Chest exercises: {len(chest_exercises)}")
# -> 胸部 exercises: 163
# 按 equipment Filter
bodyweight = [ex for ex in exercises if ex["equipment"] == "body weight"]
print(f"Bodyweight exercises: {len(bodyweight)}")
# -> 自重 exercises: 325
# 获取所有唯一类别
categories = sorted({ex["category"] for ex in exercises})
print("Categories:", categories)
# 访问多语言说明
ex = exercises[0]
print(ex["instructions"]["en"]) # English
print(ex["instructions"]["es"]) # Spanish
print(ex["instructions"]["it"]) # Italian
print(ex["instructions"]["tr"]) # Turkish
```
### Python — 使用 Pandas 加载
```
import json
import pandas as pd
with open("data/exercises.json", "r", encoding="utf-8") as f:
data = json.load(f)
df = pd.DataFrame(data)
# 按 exercise 数量排名的顶级类别
print(df["category"].value_counts().head(10))
# 所有针对上腿部 的 barbell exercises
barbell_quads = df[(df["equipment"] == "barbell") & (df["category"] == "upper legs")]
print(barbell_quads[["name", "target", "equipment"]])
```
### JavaScript / Node.js
```
const exercises = require("./data/exercises.json");
console.log(`Total exercises: ${exercises.length}`);
// Bodyweight exercises only
const bodyweight = exercises.filter(ex => ex.equipment === "body weight");
console.log(`Bodyweight exercises: ${bodyweight.length}`);
// -> Bodyweight exercises: 325
// Group exercises by category
const byCategory = exercises.reduce((acc, ex) => {
acc[ex.category] = (acc[ex.category] || []);
acc[ex.category].push(ex);
return acc;
}, {});
// Access multilingual instructions
const ex = exercises[0];
console.log(ex.instructions.en); // English
console.log(ex.instructions.es); // Spanish
console.log(ex.instructions.it); // Italian
console.log(ex.instructions.tr); // Turkish
```
### TypeScript — 类型安全用法
```
interface Exercise {
id: string;
name: string;
category: string;
body_part: string;
equipment: string;
instructions: {
en: string;
es: string;
it: string;
tr: string;
};
muscle_group: string;
secondary_muscles: string[];
target: string;
image: string;
gif_url: string;
created_at: string;
}
import exercises from "./data/exercises.json";
const data = exercises as Exercise[];
const shuffled = data.sort(() => Math.random() - 0.5);
const randomWorkout: Exercise[] = shuffled.slice(0, 6);
console.log("Random 6-exercise workout:", randomWorkout.map(e => e.name));
```
## 📄 许可证
本项目仅供**教育和非商业用途**。
- 你**可以**将此数据集用于个人项目、研究和学习。
- 你**不得**将此数据集或其媒体用于任何商业应用或产品。
- 所有图片和视频均归各自版权所有者所有。
- 如需商业使用,请直接联系原始内容所有者。
如果你是版权所有者并希望删除你的内容,请[提交一个 issue](../../issues)。标签:Homebrew安装, 健身, 后端开发, 多媒体, 多模态安全, 多语言, 数据可视化, 运动与健康, 静态资源