当前位置: 首页 > news >正文

健身API开发者的数据难题:Exercises Dataset 1324个动作5分钟上手

健身API开发者的数据难题:Exercises Dataset 1324个动作5分钟上手

【免费下载链接】exercises-dataset1,324-exercise fitness dataset — animation GIFs, 180×180 thumbnails, muscle-group & equipment data, and step-by-step instructions in 6 languages. The exercise data layer behind the LogPress app.项目地址: https://gitcode.com/GitHub_Trending/ex/exercises-dataset

做健身应用的开发者,十有八九会卡在同一个环节:动作数据。Exercises Dataset 是一个收录了 1324 个健身动作的开源数据集,自带动画 GIF、肌肉与器械分类,以及中、英、西、意、土、俄 6 种语言的逐步动作指导,让后端开发可以跳过数据收集,直接进入业务逻辑。本文会从一个真实的需求出发,带你走完"看数据 → 起接口 → 进数据库 → 出训练计划"的全过程。

让项目停摆的,往往不是逻辑,而是数据

去年我想做一个"居家健身"小程序,功能很简单:用户选一个部位,我给他推荐动作。听起来不难,对吧?

真正动手才发现坑全在数据上。翻遍全网,英文动作库倒是不少,可要么接口要付费,要么数据是抓来的,动作名、器械名五花八门对不齐;想做成多语言版本,还得自己找人翻译几百条动作要领;更别提每个动作还要配图、配动图——光想到这个工作量,我差点就放弃了。

如果你也经历过这种"代码还没写,先被数据劝退"的滋味,Exercises Dataset 就是为你准备的。它把健身应用最吃力的那部分——结构化的动作数据、多语言文案、配套媒体文件——一次性打包好了。

先看看口袋里有什么:一条动作记录能拆出几层信息

项目根目录下的data/exercises.json是唯一的核心数据文件,一个 JSON 数组,装了全部 1324 条动作记录。随便挑第一条,长这样:

{ "id": "0001", "name": "3/4 sit-up", "category": "waist", "body_part": "waist", "equipment": "body weight", "instructions": { "en": "Lie flat on your back ...", "es": "Túmbate sobre tu espalda ...", "it": "Sdraiati sulla schiena ...", "tr": "Sırt üstü yatın ...", "ru": "Лягте на спину ...", "zh": "平躺,膝盖弯曲,双脚平放在地上 ..." }, "instruction_steps": { "zh": ["平躺,膝盖弯曲,双脚平放在地上。", "将双手放在脑后,肘部朝外。", "..."] }, "muscle_group": "hip flexors", "secondary_muscles": ["hip flexors", "lower back"], "target": "abs", "image": "images/0001-2gPfomN.jpg", "gif_url": "videos/0001-2gPfomN.gif" }

把字段拆开看,信息量比想象中大:

  • 分类三件套category/body_part(身体部位)、target(主练肌群)、muscle_groupsecondary_muscles(协同肌群),做筛选和推荐时直接拿来当索引。
  • 6 语言说明instructions下挂着 en、es、it、tr、ru、zh 六份完整文案,中文也在其中,做国际化产品不用再逐条翻译。
  • 分步拆解instruction_steps把一段说明拆成了步骤数组,App 里可以按步骤逐条展示,体验比一大段文字好得多——这是很多同类数据集没有的细节。
  • 媒体路径image指向 180×180 缩略图,gif_url指向同尺寸动画,1324 个动作每个都配齐了,前端直接引用本地路径即可。

别急着写代码:双击就能用的动作浏览器

写接口之前,建议你先花两分钟把数据"看"一遍,建立直觉。仓库里自带了一个纯前端的浏览工具index.html,不需要装任何依赖,双击用浏览器打开就行。

它干了几件事:顶部实时搜索框可以跨全部 1324 条记录检索动作名;左侧可以按身体部位、器械、目标肌肉做组合筛选;往下滚是无限流式的卡片网格,点开任意一张卡,就能看到该动作的缩略图、动图,以及 6 种语言下各自的动作要领。

对产品经理、设计师,乃至想先验证想法的你来说,这相当于一个零成本的"数据预览台"——数据是否够用、分类是否合理,扫一眼就有答案,不必等后端写完再返工。

最省事的搭法:零依赖跑起一个健身 API

确认数据没问题,就可以动手了。这里给一个"纯净版"方案:只用 Python 标准库,不装 Flask、不装任何第三方包,把文件保存成server.pypython3 server.py就能跑起来。

# server.py —— 零依赖健身 API import json from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse, unquote # 启动时一次性加载全部数据,避免每次请求都读文件 with open("data/exercises.json", encoding="utf-8") as f: EXERCISES = json.load(f) class Handler(BaseHTTPRequestHandler): def do_GET(self): path = unquote(urlparse(self.path).path) # 路由一:返回全部动作,/api/exercises if path == "/api/exercises": body = json.dumps(EXERCISES, ensure_ascii=False).encode("utf-8") # 路由二:按身体部位筛选,/api/exercises/chest elif path.startswith("/api/exercises/"): category = path.split("/")[-1] matched = [e for e in EXERCISES if e["category"] == category] body = json.dumps(matched, ensure_ascii=False).encode("utf-8") # 路由三:按 id 取指定语言说明,/api/instructions/0001/zh elif path.startswith("/api/instructions/"): _, _, ex_id, lang = path.split("/") ex = next((e for e in EXERCISES if e["id"] == ex_id), None) if not ex or lang not in ex["instructions"]: self.send_response(404); self.end_headers(); return body = json.dumps( {"name": ex["name"], "instruction": ex["instructions"][lang]}, ensure_ascii=False).encode("utf-8") else: self.send_response(404); self.end_headers(); return # 统一返回 JSON,注意 UTF-8,中文才不会乱码 self.send_response(200) self.send_header("Content-Type", "application/json; charset=utf-8") self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) if __name__ == "__main__": HTTPServer(("0.0.0.0", 8000), Handler).serve_forever()

跑起来后,浏览器里可以直接验证三个接口:

  • http://localhost:8000/api/exercises—— 全量数据
  • http://localhost:8000/api/exercises/chest—— 只看胸部动作(163 条)
  • http://localhost:8000/api/instructions/0001/zh—— 中文动作要领

ensure_ascii=False这行是关键,不然中文会被转义成\uXXXX,接口就没法直接用了。

想上生产?把 1324 条数据一键倒进数据库

接口验证通过后,下一步通常是落库。手动写 1324 条 INSERT 语句不现实,好在仓库里的setup.html就是干这个的。

这是一个开发者向导页面,同样双击即可打开。里面按数据库类型分了四个页签:SQL Server、PostgreSQL、MySQL、SQLite。选好类型、填上你要的字段,点击生成,浏览器会直接产出一份包含建表语句和全部 1324 条 INSERT 的.sql文件,下载后导入你的数据库即可。

以 SQLite 为例,生成的建表语句大致是这个形态:

CREATE TABLE exercises ( id VARCHAR(10) PRIMARY KEY, -- 动作唯一编号 name VARCHAR(255), -- 动作名称 category VARCHAR(50), -- 身体部位分类 equipment VARCHAR(50), -- 所需器械 instructions_en TEXT, -- 英文说明 instructions_zh TEXT, -- 中文说明 muscle_group VARCHAR(100), -- 协同肌群 target VARCHAR(100), -- 目标肌肉 image VARCHAR(255), -- 缩略图路径 gif_url VARCHAR(255) -- 动图路径 );

多语言说明在 JSON 里是嵌套对象,在关系库里拍平成instructions_eninstructions_zh这样的独立列即可,setup.html已经帮你处理好了这一层映射。导入完成后,查询、分页、加索引都交给数据库,性能不再是问题。

让 AI 替你写后端:一条提示词换一个完整 REST API

如果你连接口都不想手写,setup.html里还藏着一个更"偷懒"的选项:Ask Your LLM模块。

它会根据你的选择(框架 + 数据库)拼出一段结构化的提示词,你只需要把它粘贴给 ChatGPT、Claude、Gemini 之类的模型,就能一次生成一个可上生产的 REST API。支持的组合覆盖了主流技术栈:

  • 后端框架:Express.js、FastAPI、ASP.NET Core、Spring Boot、Laravel、Gin
  • 配套数据库:就是前面那四种,SQL Server / PostgreSQL / MySQL / SQLite

生成完别忘了两件事:一是把数据从 JSON 导入到你选的数据库,二是让 AI 参照data/exercises.json的真实字段来定义模型,接口才会和你本地数据对得上。

这套数据到底够不够用:规模与分布速览

决定要不要用它之前,先看分布。1324 个动作按身体部位拆开是这样的:

身体部位速览

  • 上臂 292 · 大腿 227 · 背部 203 · 腰部 169
  • 胸部 163 · 肩部 143 · 小腿 59 · 前臂 37
  • 有氧 29 · 颈部 2

器械维度同样值得留意,因为它直接决定了"用户在家能不能练":

器械分布速览

  • 自重 325 · 哑铃 294 · 绳索 157 · 杠铃 154
  • 固定器械 81 · 弹力带 54 · 史密斯机 48 · 壶铃 41
  • 负重 36 · 健身球 28 · EZ 杠铃 23 · 其他 83

两组数字放在一起看,两个结论很直观:全身各部位都有覆盖,没有明显短板;约四分之一的动作不需要任何器械,做"居家训练""零器械计划"这类场景素材完全够用。

收个尾:写一个能出训练计划的生成器

最后,把前面用到的能力串起来,写一个真正能用的东西:随机训练计划生成器。这次换成 Node.js 版本,和前面的 Python 接口正好凑齐两种语言。

// workout.js —— 根据部位与器械随机生成训练计划 const exercises = require("./data/exercises.json"); // 筛选 + 洗牌 + 截取前 n 条 function buildPlan(category, equipment = null, count = 5) { const pool = exercises.filter(ex => ex.category === category && (!equipment || ex.equipment === equipment) ); for (let i = pool.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); // Fisher-Yates 洗牌 [pool[i], pool[j]] = [pool[j], pool[i]]; } return pool.slice(0, count).map(ex => ({ name: ex.name, target: ex.target, equipment: ex.equipment, zh: ex.instructions.zh, // 直接带上中文要领,App 端免翻译 })); } // 生成一套 4 个动作的杠铃练腿计划 const plan = buildPlan("upper legs", "barbell", 4); console.log(JSON.stringify(plan, null, 2));

运行node workout.js,输出的就是一份带动作名、目标肌群和中文要领的训练计划。往这个思路上再走一步,就能扩展出"按用户已有器械过滤""按目标肌肉打分排序"这类更聪明的推荐逻辑——数据字段都现成,差的只是你的想象力。

动图与图片能用吗?先看清楚版权红线

有一件事必须在动手前说清楚。这个仓库的代码与结构化数据(动作名、分类、多语言文案)遵循 MIT 协议,可以放心商用;但images/ 和 videos/ 下的全部媒体文件归 Gym visual 所有,属于授权转发,使用时有两条硬性约束:

  • 只能在180×180 分辨率下使用,不得放大、二次加工后分发;
  • 任何使用场景都必须保留© Gym visual署名,每条 JSON 记录里的attribution字段就是给你预留的版权声明位。

如果你打算把动图用在商业 App 里,建议先查阅 Gym visual 的使用条款,必要时直接向其获取授权。媒体只是锦上添花,真正可自由使用的"动作数据 + 多语言文案"已经足够撑起一个产品的核心功能了。

读完这篇文章,你的下一步

五分钟很短,但足够你做完三件事:把仓库克隆下来(git clone https://gitcode.com/GitHub_Trending/ex/exercises-dataset),用浏览器打开index.html把 1324 个动作翻一遍,再把上面的零依赖 API 跑起来试试。

如果你正好在做一个健身类产品,这里有几个可以立刻上手的方向:

  • setup.html生成 SQL,把数据导入数据库,先跑通"查动作"这条主链路;
  • 用 Ask Your LLM 的提示词生成一个带筛选接口的后端,前端直接对接;
  • 基于targetequipment字段做一个"根据我的器械推荐动作"的小功能,验证你的产品想法。

数据是健身应用的底座,而 Exercices Dataset 把这块底座打磨好了。剩下的,就是把你的业务逻辑盖上去——动手吧。💪

【免费下载链接】exercises-dataset1,324-exercise fitness dataset — animation GIFs, 180×180 thumbnails, muscle-group & equipment data, and step-by-step instructions in 6 languages. The exercise data layer behind the LogPress app.项目地址: https://gitcode.com/GitHub_Trending/ex/exercises-dataset

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1400409/

相关文章:

  • 禹州恒达金郡专业户型设计公司推荐 - 猜不透的vv
  • 近酒吧街大理古城附近别墅 月租8折旅居体验解析 - 全域品牌推荐
  • 15个boolinq核心操作符详解:从where到groupBy的终极教程
  • 告别Excel资产台账:用Snipe-IT开源资产管理系统管好每一台设备
  • 5分钟上手gemma4-browser-extension:从安装到高效使用的快速入门教程
  • Welcome UI核心组件解析:Button、Modal与Form组件的实战应用
  • 2026天猫养车加盟保证金能退吗?退费条款、签约前必问清单 - Chencen
  • RemoteCam完全指南:从安装到OBS设置,3分钟打造专业直播摄像头
  • 51P001.基于51单片机的智能温度控制系统Proteus仿真
  • 2026年8月衢州涂料门店综合盘点:按人群需求选更省心 - 滚动商讯
  • 澄城白水城乡住宅现浇楼梯改造,资质核验避开土建改造陷阱 - 名字不是很重要
  • 从源码到可视化:Torchvista如何追踪PyTorch模型前向传播的技术原理
  • 2026 北京救护车出租转运公司推荐 长途转院车辆预约卧床患者接送服务 - 产品推荐官
  • COLMAP点云可视化完整教程:从照片到可分析的3D点云只需4步
  • Sentient安全与隐私设置:保护你的个人数据
  • 架构图不敢上云?我花了一周时间把企业画图工作流整体搬到本地
  • 从安装到发布:Vue Chrome Extension Template完整部署指南
  • Locust Plugins完全指南:10大核心插件助你轻松实现高性能负载测试
  • 多语言场景下的lm-watermarking应用:跨语种文本追踪技术
  • 渭南县域自建房现浇楼梯改造,资质才是工程安全第一道防线 - 名字不是很重要
  • angular/router未来路线图:即将到来的5大令人兴奋的新功能
  • 优选算法的时序之窗:滑动窗口专题(二)
  • 从架构图到代码实现:BailingMoeV3ForCausalLM核心组件深度剖析
  • 如何安装与配置Jumpcut?macOS剪贴板增强工具新手入门指南
  • 5分钟让OBS直播实时显示键盘和手柄按键:input-overlay完整上手指南
  • 深度学习激活函数实战指南:从ReLU到GELU与SELU的原理、选型与调优
  • 国产数据库gbase8s安装-网盘-试用版
  • 告别SSH来回切换!1Panel服务器文件管理实战指南
  • trash-cli 实战教程:5 个命令构建你的 Linux 命令行回收站
  • AI智能体开发从零到实战:8周18课,做出能落地的企业级智能体系统