目录

exercises-dataset 深度拆解:1,324 个健身动作 + 6 语言指令 + 开发者脚手架

学习目标

读完本文后,你应该能够:

  • 说出 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 的差异化是:

  1. 结构化字段完整:不仅有名字 + 类别,还有 target muscle、synergist muscles、equipment、step-by-step instructions
  2. 多语言翻译:6 种语言逐步指导,足够直接给到海外用户
  3. 开发者脚手架setup.html 引导你生成 DB schema / API 代码 / LLM prompt——不是「给你数据自己想办法」,而是「给你数据 + 第一步怎么用」
  4. 交互式浏览器index.html 打开即用,纯前端搜索 + 过滤 + 无限滚动

这三个加在一起,把"健身数据 → 应用"的距离从"几天"压缩到"几小时"。

目录

数据 Schema 拆解

每个动作的标准字段:

字段类型说明
Unique IDstring数字 ID(如 "0001"
Namestring完整动作名
Categorystring主要目标肌群
Targetstring具体目标肌肉
Muscle Groupstring协同 / 辅助肌群
Equipmentstring所需器械(或 bodyweight)
Instructionsobject6 语言逐步指导(en/es/it/tr/ru/zh)
Media IDstring原 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 是这个仓库最有价值的差异化功能。它引导开发者:

  1. 选择数据库(Postgres / MySQL / SQLite)
  2. 选择 API 框架(Node / Python / Go …)
  3. 选择是否需要 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 是不是稳定规模?后续是否会扩展?
  • 质量保证机制:翻译一致性如何校审?

阅读路径建议

  1. 先看 index.html:双击打开,直观感受数据集结构
  2. 读 README Schema 段:理解字段设计取舍
  3. setup.html:生成你的第一个 DB schema + API
  4. docs/:看脚手架生成的代码模板
  5. 再决定:是否贡献翻译 / 提交 PR / 接入生产

一句话总结

exercises-dataset 不只是「健身 JSON」,而是「结构化数据 + 多语言 + 开发者脚手架 + 浏览器」的组合。它把"数据 → 应用"的距离从几天压缩到几小时,对健身 / 健康 / ML / LLM 应用场景都是低门槛入门资源——但用前务必确认 license 和媒体使用边界。

自测清单

  • 说出 exercises-dataset 的 7 个核心字段
  • 解释为什么 media_id 采用引用而非内嵌
  • 说出 setup.html 能生成哪三类代码/配置
  • 解释多语言 Instructions 字段的数据结构设计取舍
  • 判断一个"健身 App"项目是否适合直接用该数据集
  • 说出该数据集的两个主要适用边界

练习

练习 1:加载并过滤数据集

用 Python 完成以下任务:

  1. 加载 exercises.json
  2. 找出所有"无器械"(bodyweight)的胸部训练动作
  3. 统计每个类别(category)有多少动作
  4. 输出中文指令的前 3 个步骤(如果有中文翻译)

练习 2:设计数据库 schema

基于文章的 schema 说明,写一个 SQLite 建表语句:

  1. 包含 7 个核心字段
  2. instructions 字段用 JSON 类型存储
  3. categoryequipmenttarget 建索引
  4. 写一条 INSERT 示例,插入一个动作

练习 3:构建 LLM 健身问答 prompt

设计一个 system prompt,让 LLM 能够:

  1. 根据用户的目标肌群推荐 3 个动作
  2. 根据用户有的器械过滤动作
  3. 用中文输出逐步指导

测试这个 prompt,看 LLM 能否正确使用该数据集回答问题。

练习 4:处理媒体引用

写一个脚本,给定 media_id,生成完整的 CDN URL:

  1. 研究 ExerciseDB v1 的媒体 URL 格式
  2. 处理 media_id 到 URL 的转换
  3. 添加错误处理(如果媒体不存在)
  4. 考虑缓存策略(避免每次都请求 CDN)

进阶路径

路径 1:从使用到贡献

如果你已经在用 exercises-dataset,下一步可以:

  1. 贡献翻译:帮它加第 7 种语言(如日文、韩文、阿拉伯文)
  2. 贡献动作:如果发现有遗漏的常见动作,提交 PR
  3. 改进脚手架:给 setup.html 加新的数据库或框架模板

路径 2:从数据集到应用

如果你在用这个数据集做健身 App,下一步可以:

  1. 做动作识别:用 MediaPipe 或类似工具,让用户摄像头部识别动作是否标准
  2. 做推荐系统:基于用户历史、目标、器械,推荐个性化训练计划
  3. 做进度追踪:记录用户完成的动作、组数、重量,可视化进步

路径 3:从单一数据集到生态

如果你在做健身 / 健康方向的创业或开源项目,下一步可以:

  1. 整合多个数据集:营养、饮食、睡眠、心率——把健身数据放到更大的健康上下文里
  2. 做数据质量审查:检查翻译一致性、动作描述准确性,建立数据质量评分
  3. 做标准化工作:推动健身数据的开源标准(类似 OpenFoodFacts 但 for fitness)

exercises-dataset 是入口,不是终点。它帮你建立"结构化健康数据"的直觉,下一步往哪个方向走看你的项目需求。