Exercises Dataset 是一份面向健身App开发者的开源JSON数据集,收录1324个动作,覆盖部位、器械、目标肌群和6种语言说明。适用Web、Python、Node.js等项目,附带浏览器检索和后端生成向导,拿来做训练计划原型很省事,但不含图片/GIF素材。

🎤 引言

做健身 App 原型时,最容易卡住的不是页面,也不是登录系统,而是动作库。胸、背、腿、肩,每个部位要列哪些动作?每个动作要怎么写步骤?器械、目标肌肉、辅助肌群怎么标?如果还想做多语言版本,数据整理会直接变成体力活。

Exercises Dataset 解决的就是这个痛点。它不是一个完整健身 App,而是一份面向开发者的结构化 JSON 数据集:1324 个健身动作、10 个身体部位、12 类主流器械、6 种语言动作说明,还附带一个纯前端浏览器和 setup 向导。GitHub 当前约 10.8k Stars、1.2k Forks,项目热度非常高。

需要先说清楚一个关键点:仓库现在是数据 + 开发者向导,不打包缩略图和 GIF 动画。README 已经明确说明媒体素材因为权属争议不再随仓库分发,每条记录只保留 media_id。如果项目需要商用素材,这一点必须提前评估。


⭐ 核心功能

1324 条结构化动作数据

主数据文件是 data/exercises.json,格式非常直接:一个 JSON 数组,每条记录就是一个动作。字段包含 idnamecategorybody_partequipmenttargetmuscle_groupsecondary_musclesinstructionsmedia_id 等。

官方 README 给出的分类统计很实用:

部位动作数量
Upper Arms292
Upper Legs227
Back203
Waist169
Chest163
Shoulders143
Lower Legs59
Lower Arms37
Cardio29
Neck2

比如做一个训练计划 App,可以直接按 category 做部位筛选,按 equipment 做器械筛选,按 target 做目标肌群标签。对独立开发者来说,这比从零手动整理动作表轻松太多。

6 种语言动作说明

每个动作的 instructions 字段包含 enesittrruzh 六种语言。也就是说,如果项目要做国际化,不需要先花时间把英文动作教程翻译成中文、西班牙语或俄语。

这个设计很适合两类场景:一类是跨境健身内容产品,比如英文 + 中文双语动作库;另一类是 AI/LLM 原型,比如把动作说明喂给模型生成训练计划、康复建议或问答助手。数据字段已经足够规整,后面接 RAG 或搜索索引都很顺手。

纯前端浏览器和 setup 向导

仓库里还有两个 HTML 文件:

  • index.html:本地直接打开即可浏览动作库,支持搜索、按部位/器械/目标肌肉筛选、无限滚动和详情页。
  • setup.html:开发者集成向导,可生成数据库建表 SQL、API 调用示例和 LLM 提示词。

setup.html 这一点比较有意思。它不是简单写一段 README,而是把 SQL Server、PostgreSQL、MySQL、SQLite 的建表和 INSERT 生成逻辑做进浏览器里,还提供 JavaScript、Python、C#、Java、PHP、Go、cURL 示例。小团队要搭一个后端动作库,可以少写不少胶水代码。


📥 安装使用

这个项目不需要复杂部署。最简单的方式就是 clone 仓库,然后读取 JSON 文件:

git clone https://github.com/hasaneyldrm/exercises-dataset.git
cd exercises-dataset

Python 里可以这样筛选胸部动作和自重训练:

import json
from pathlib import Path

with Path("data/exercises.json").open("r", encoding="utf-8") as f:
    exercises = json.load(f)

print(f"Total exercises: {len(exercises)}")

chest = [x for x in exercises if x["category"] == "chest"]
bodyweight = [x for x in exercises if x["equipment"] == "body weight"]

print(f"Chest exercises: {len(chest)}")
print(f"Bodyweight exercises: {len(bodyweight)}")

sample = bodyweight[0]
print(sample["name"])
print(sample["instructions"]["zh"])

Node.js 项目也很直接:

const exercises = require("./data/exercises.json");

const byCategory = exercises.reduce((acc, item) => {
  const key = item.category;
  acc[key] = acc[key] || [];
  acc[key].push(item);
  return acc;
}, {});

console.log("upper arms:", byCategory["upper arms"].length);
console.log("first zh instruction:", exercises[0].instructions.zh);

如果想快速看数据长什么样,直接在浏览器打开 index.html。界面有搜索框、筛选按钮、动作卡片和详情弹窗,虽然没有图片/GIF,但用来检查字段、验证筛选逻辑、给产品经理演示原型已经够用。


🎯 适用场景

健身 App / 小程序原型

比如要做一个「居家训练计划」小程序,最小闭环可以是:选择目标部位 → 选择器械条件 → 返回动作列表 → 展示中文步骤。Exercises Dataset 里 325 个自重动作 很适合居家训练,Dumbbell、Cable、Barbell 等器械字段也能覆盖健身房场景。

AI 训练计划生成器

如果要做一个 AI 私教,可以把 categorytargetequipment 作为检索条件,把 instructions.zh 作为动作说明,再结合用户目标生成训练计划。数据本身不是医学建议,但作为演示、教育和原型数据很合适。

数据分析和课程内容整理

研究健身内容分布时,也可以直接用 Pandas 做统计:哪个部位动作最多,哪类器械覆盖最广,哪些目标肌肉缺动作。比如官方统计里 Upper Arms 有 292 个动作,Neck 只有 2 个动作,这种不均衡在产品设计时就要考虑推荐策略。


🔍 对比/替代方案

方案优点局限
Exercises DatasetJSON 开箱即用,1324 条动作,6 语言说明,适合本地原型不含图片/GIF,许可和媒体权属需自行评估
ExerciseDB API有官方数据接口和媒体 CDN 线索API/条款依赖外部服务,商用前要看清授权
Kaggle 健身数据集数据集选择多,适合分析实验字段结构不一定统一,中文说明通常缺失
自己整理动作库字段、版权、内容完全可控成本高,动作说明和多语言翻译很费时间

Exercises Dataset 最大优势是省时间:JSON 文件拿来就能跑,字段也足够贴近真实健身产品。缺点也很明确:它不是一个完整内容资产包,尤其不提供动作图片和 GIF。对只做数据原型、课程分类、AI Demo 的项目,这是优点;对要直接上线商用健身 App 的项目,就不能偷懒。


⚠️ 注意事项

媒体素材不在仓库内

README 里多次强调,imagegif_url 字段为 null,每条记录只保留 media_id。如果界面要展示动作动画,需要自己准备素材,或者确认对应 CDN 和素材授权。不要看到早期介绍里写有图片/GIF,就默认当前仓库还能直接拿来用。

许可证信息不明确

GitHub API 当前没有返回明确 license 字段。README 也提示基础数据来自 ExerciseDB v1,并建议复用前查看相关条款。用于学习、研究、内部原型问题不大;如果要做公开商业产品,建议先做一次数据和媒体权属审查。

数据不是专业医疗建议

动作说明适合做教育展示,但不能替代教练、医生或康复师建议。比如深蹲、硬拉、卧推这类动作,错误姿势风险很高。产品上线时最好加入风险提示、禁忌说明和用户确认机制。

字段命名需要二次封装

categorybody_part 当前语义接近,前端展示时可能要统一成中文枚举;equipmenttarget 也建议做一层映射表,不要直接把英文原字段暴露给中文用户。比如 body weight 可以显示为「自重」,upper arms 显示为「上臂」。


✅ 总结

Exercises Dataset 的定位很清晰:它不是健身 App 成品,也不是素材图库,而是一份开发者友好的健身动作结构化数据底座。1324 条动作、6 种语言说明、JSON 文件、前端浏览器、数据库/API/LLM 向导,这几件东西组合在一起,足够支撑一个训练计划产品的早期原型。

推荐指数:4/5

适合:健身 App 原型、训练计划生成器、运动课程分类、AI 私教 Demo、数据分析实验。

不适合:想直接拿图片/GIF 上线的商业健身 App,或对版权链路要求极高的内容平台。

如果你正在做运动健康类小项目,可以先把 GitHub 仓库 clone 下来,跑一遍 index.htmlsetup.html。只要接受「媒体素材自己解决」这个前提,它确实是一块挺省事的基础砖。