exercises-dataset 深度拆解:1,324 个健身动作 + 6 语言指令 + 开发者脚手架
posts posts 2026-07-01T15:03:41+08:00hasaneyldrm/exercises-dataset 是 1,324 个健身动作的结构化数据集,覆盖 6 种语言的逐步指导,含交互式浏览器与开发者脚手架(DB schema / API / LLM prompt)。本文拆解它的字段设计、翻译体系、配套 HTML 工具与适用边界。技术笔记fitness-dataset, multilingual, exercise-api, open-data, developer-scaffold, workout-app学习目标
读完本文后,你应该能够:
- 说出 exercises-dataset 的 7 个核心字段及其设计取舍
- 解释为什么 media_id 采用引用而非内嵌,以及这对生产部署的影响
- 用 Python 加载并过滤健身动作数据集
- 基于该数据集构建一个 LLM 健身问答机器人的 system prompt
- 判断你的项目是否适合使用 exercises-dataset
一句话判断
exercises-dataset 是「结构化健身数据集 + 开发者脚手架 + 多语言翻译」三位一体的开源资源——你不只是拿到 1,324 个动作的 JSON,还拿到 schema、API 代码模板、LLM prompt、交互式浏览器。GitHub trending daily 给它的位置很合理:健身 / 健康 / ML 推荐场景都在用这类数据。
项目速览
- 仓库:hasaneyldrm/exercises-dataset
- 数据规模:1,324 个动作(基础)+ 多语言指令
- Stars / Forks:约 7.4k / 858(截至 2026-07-01 trending 抓取时刻)
- License:需查证(README 未明示)
- 支持语言:🇬🇧 English · 🇪🇸 Spanish · 🇮🇹 Italian · 🇹🇷 Turkish · 🇷🇺 Russian · 🇨🇳 Chinese
- 配套工具:
index.html(浏览器)+setup.html(开发者脚手架)
⚠️ 重要说明:仓库不包含动作媒体(缩略图、动画 GIF)。媒体归属权复杂(基于 ExerciseDB v1 by AscendAPI 的 Kaggle re-host by omarxadel),故不在仓库内分发。仓库只发 metadata + 多语言翻译,每个记录保留 media_id 引用原 CDN。
为什么值得拆
健身类数据集开源做得不少,但 99% 都是「Excel / JSON 文档给你看一眼就完了」。exercises-dataset 的差异化是:
- 结构化字段完整:不仅有名字 + 类别,还有 target muscle、synergist muscles、equipment、step-by-step instructions
- 多语言翻译:6 种语言逐步指导,足够直接给到海外用户
- 开发者脚手架:
setup.html引导你生成 DB schema / API 代码 / LLM prompt——不是「给你数据自己想办法」,而是「给你数据 + 第一步怎么用」 - 交互式浏览器:
index.html打开即用,纯前端搜索 + 过滤 + 无限滚动
这三个加在一起,把"健身数据 → 应用"的距离从"几天"压缩到"几小时"。
目录
数据 Schema 拆解
每个动作的标准字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| Unique ID | string | 数字 ID(如 "0001") |
| Name | string | 完整动作名 |
| Category | string | 主要目标肌群 |
| Target | string | 具体目标肌肉 |
| Muscle Group | string | 协同 / 辅助肌群 |
| Equipment | string | 所需器械(或 bodyweight) |
| Instructions | object | 6 语言逐步指导(en/es/it/tr/ru/zh) |
| Media ID | string | 原 ExerciseDB v1 media 引用(媒体不在仓内) |
这个 schema 的设计取舍:
- Category / Target / Muscle Group 三层粒度:从"练什么"到"练哪块"到"哪块肌肉在工作",既支持粗粒度筛选也支持细粒度分析
- Equipment 显式标注:让"无器械 / 哑铃 / 杠铃 / 弹力带"等过滤条件成为 first-class
- Instructions 多语言:
{ "en": [...], "es": [...], ... }而不是 N 份表 join,避免关系查询
关键机制拆解
1. 多语言翻译体系
Instructions 字段是 6 语言并存的 dict 结构。意味着:
- 单一数据源,多语言展示
- 添加新语言时只需要补字段,不需要重整表结构
- LLM 翻译友好:直接以
{ language: [...] }形式喂给模型
但代价是翻译一致性需要人工 / 机器审查——README 提到 issue #5 报告了属性归属问题,说明维护者对数据卫生敏感。
2. media_id 引用而非内嵌
仓库不内嵌图像 / GIF 的决策原因 README 说得很清楚:
There are multiple, conflicting ownership claims over this media, so it is not redistributed in this repository.
这是合规优先于便利的典型案例。好处:
- 仓库体积小、克隆快、license 清晰
- 引用方按需拉取(如果他们有权使用 media)
- 权利方需要下架时,仓库侧无需任何改动
代价是完整功能依赖外部 CDN:如果上游 static.exercisedb.dev 不稳定,你的应用就会缺图。生产部署建议缓存到自有存储。
3. 交互式浏览器 index.html
README 描述:
A fully client-side exercise explorer with: Live search across all 1,324 exercises / Filter by category, equipment, and target muscle / Infinite scroll
关键特征是纯客户端:没有后端、没有数据库——打开 HTML 文件就能用。这意味着:
- 零部署成本(双击即用)
- 适合 demo、原型、内部工具
- 不能承载大量并发用户(毕竟本地)
4. 开发者脚手架 setup.html
setup.html 是这个仓库最有价值的差异化功能。它引导开发者:
- 选择数据库(Postgres / MySQL / SQLite)
- 选择 API 框架(Node / Python / Go …)
- 选择是否需要 LLM prompt 模板(用于健身问答机器人)
然后自动生成:
- 数据库 schema(对应上面 7 个字段)
- CRUD API 代码(针对所选语言)
- LLM prompt 模板(让模型基于该数据集回答健身问题)
这套脚手架把"数据 → 生产代码"的转换内化进仓库,是 GitHub trending 里很少见的"开发者体验型数据集"。
使用示例
数据加载(Python)
import json
with open("exercises.json") as f:
exercises = json.load(f)
# 查找所有背部动作
back_exercises = [e for e in exercises if e["category"] == "back"]
# 多语言指令
print(back_exercises[0]["instructions"]["zh"])构建 LLM 健身助手
import json
SYSTEM_PROMPT = """You are a fitness coach assistant.
Use the following exercise dataset to answer user questions.
Dataset:
{exercises_json}
"""
with open("exercises.json") as f:
exercises = json.load(f)
# 把数据塞进 system prompt
prompt = SYSTEM_PROMPT.format(exercises_json=json.dumps(exercises, ensure_ascii=False))
# 然后调用 LLM过滤 API 设计
脚手架生成的 API 通常包含:
GET /exercises # 列表 + 分页
GET /exercises?category=back # 按类别
GET /exercises?equipment=dumbbell # 按器械
GET /exercises/{id} # 单个动作
GET /exercises/{id}/instructions?lang=zh # 多语言指令适用边界
适合:
- 健身 / 训练规划 App 后端
- 健身动作识别 / 推荐 ML 项目
- 健康 / 健身研究数据集
- LLM 健身问答机器人
- 教育演示、原型、内部工具
不太适合:
- 需要完整媒体资源(动画演示)的应用(需自接 CDN)
- 商用分发动作 GIF(license 风险——README 明确说明媒体所有权复杂)
- 极高并发 SaaS(数据规模固定,需要考虑缓存层)
它没说什么
- License 类型:README 未明示具体 license,使用前必须看 LICENSE 文件
- 数据更新频率:1,324 是不是稳定规模?后续是否会扩展?
- 质量保证机制:翻译一致性如何校审?
阅读路径建议
- 先看
index.html:双击打开,直观感受数据集结构 - 读 README Schema 段:理解字段设计取舍
- 跑
setup.html:生成你的第一个 DB schema + API - 查
docs/:看脚手架生成的代码模板 - 再决定:是否贡献翻译 / 提交 PR / 接入生产
一句话总结
exercises-dataset 不只是「健身 JSON」,而是「结构化数据 + 多语言 + 开发者脚手架 + 浏览器」的组合。它把"数据 → 应用"的距离从几天压缩到几小时,对健身 / 健康 / ML / LLM 应用场景都是低门槛入门资源——但用前务必确认 license 和媒体使用边界。
自测清单
- 说出 exercises-dataset 的 7 个核心字段
- 解释为什么 media_id 采用引用而非内嵌
- 说出
setup.html能生成哪三类代码/配置 - 解释多语言 Instructions 字段的数据结构设计取舍
- 判断一个"健身 App"项目是否适合直接用该数据集
- 说出该数据集的两个主要适用边界
练习
练习 1:加载并过滤数据集
用 Python 完成以下任务:
- 加载
exercises.json - 找出所有"无器械"(bodyweight)的胸部训练动作
- 统计每个类别(category)有多少动作
- 输出中文指令的前 3 个步骤(如果有中文翻译)
练习 2:设计数据库 schema
基于文章的 schema 说明,写一个 SQLite 建表语句:
- 包含 7 个核心字段
instructions字段用 JSON 类型存储- 为
category、equipment、target建索引 - 写一条 INSERT 示例,插入一个动作
练习 3:构建 LLM 健身问答 prompt
设计一个 system prompt,让 LLM 能够:
- 根据用户的目标肌群推荐 3 个动作
- 根据用户有的器械过滤动作
- 用中文输出逐步指导
测试这个 prompt,看 LLM 能否正确使用该数据集回答问题。
练习 4:处理媒体引用
写一个脚本,给定 media_id,生成完整的 CDN URL:
- 研究 ExerciseDB v1 的媒体 URL 格式
- 处理
media_id到 URL 的转换 - 添加错误处理(如果媒体不存在)
- 考虑缓存策略(避免每次都请求 CDN)
进阶路径
路径 1:从使用到贡献
如果你已经在用 exercises-dataset,下一步可以:
- 贡献翻译:帮它加第 7 种语言(如日文、韩文、阿拉伯文)
- 贡献动作:如果发现有遗漏的常见动作,提交 PR
- 改进脚手架:给
setup.html加新的数据库或框架模板
路径 2:从数据集到应用
如果你在用这个数据集做健身 App,下一步可以:
- 做动作识别:用 MediaPipe 或类似工具,让用户摄像头部识别动作是否标准
- 做推荐系统:基于用户历史、目标、器械,推荐个性化训练计划
- 做进度追踪:记录用户完成的动作、组数、重量,可视化进步
路径 3:从单一数据集到生态
如果你在做健身 / 健康方向的创业或开源项目,下一步可以:
- 整合多个数据集:营养、饮食、睡眠、心率——把健身数据放到更大的健康上下文里
- 做数据质量审查:检查翻译一致性、动作描述准确性,建立数据质量评分
- 做标准化工作:推动健身数据的开源标准(类似 OpenFoodFacts 但 for fitness)
exercises-dataset 是入口,不是终点。它帮你建立"结构化健康数据"的直觉,下一步往哪个方向走看你的项目需求。