> 🌱 Deep Garden 游泳训练体系 · 个人 IP 内容。本技能及配套 IMA 知识库由 Deep Garden 整理沉淀,供游泳爱好者自学纠错与分享。同作者 SkillHub 投资研究系列:DeepGarden(新股研究 · 定期财报 · 研报精读)。转载 / 二次创作请注明出处「Deep Garden」。
游泳训练追踪(Swim Training Tracker)
Overview
把用户每天发来的运动手表截图和泳池视频,转化为一个自包含的交互式 HTML 看板:多日历史趋势、逐组 SWOLF 效率、成就徽章、以及「你的动作 vs 标准动作」GIF 连续对比;并基于参考技术规范给出文字版泳姿改进建议。看板零依赖(Chart.js 已本地化),可离线打开,也可托管到云端供手机访问。
适用于:业余游泳者 / 初学者(含 40 岁+ 人群),以及想把它分享给泳友的轻量化测试场景。看板内置《全国游泳锻炼等级标准》金海豚五级自动评级(填 50米成绩即出等级+冲刺金海豚计划),覆盖儿童/少年/成年/老年全年龄段。
何时使用
- 用户发来手表训练截图(含距离、各组配速、SWOLF)+ 说「分析今天的训练 / 更新游泳数据」。
- 用户发来泳池视频 + 说「看看我动作哪里要改 / 游泳动作分析」。
- 用户想初始化一个属于自己的空白看板。
- 用户想把看板分享给别人 / 配置手机端 IMA 智能体(见
ima/目录)。
核心资源
assets/dashboard-template.html—— 通用空白看板模板(数据外置,自带空状态引导;标准示范 GIF 缺失时优雅降级)。这是唯一要交付给用户的文件(连同assets/chart.umd.js和可选assets/correct_*.gif)。assets/chart.umd.js—— Chart.js 本地副本,必须和 html 同目录。assets/correct_freestyle.gif/correct_breaststroke.gif—— 开箱即用的标准示范动图(约 150KB,程序化生成、零版权风险,可删除,不影响功能;用户说「标准动作太占空间」时就删这俩)。references/—— 拍摄规范、数据质量规则、参考视频索引、泳姿技术规范摘要(分析时引用)。ima/—— 手机端 IMA 智能体的系统提示词 + 知识库文档(含 06-CSA海豚五级标准.md,自动评级依据)+ 零代码配置指南。scripts/merge_data.py—— 把单日 JSON 合并进swim-data.json(用于托管版自动更新)。
Workflow
步骤 0:初始化用户看板(首次)
- 把
assets/dashboard-template.html复制为用户自己的文件(如游泳看板.html),同目录保留chart.umd.js。 - 询问用户称呼/年龄/身高(只问一次),写进模板内
SWIM_DATA.profile(直接编辑 HTML 内联 JSON 即可:profile:{name,initial,age,height,streakText})。 - 交付:用户在浏览器打开即看到「欢迎/三步引导」空状态。
- 若用托管版(手机访问),额外生成
swim-data.json(运行python scripts/merge_data.py --init)并和 html 放同目录;模板会fetch('./swim-data.json')自动加载。
步骤 1:解析手表截图
- 用视觉识别读取截图:日期、总距离、各组(泳姿/距离/配速/休息/SWOLF)、异常值。
- 按
references/data-quality-rules.md判定并剔除异常。注意:SWOLF 是单趟(50米)指标,连续 100 米组须按单趟划手数 = SWOLF − 总用时÷趟数折算;游速合理但 SWOLF 看似异常的真实连续游应保留并折算,勿误删(详见规则文件「核心修正」)。 - 计算当日汇总:
dist(有效距离)、swimMin(纯游分钟)、avgSwolf(有效组均值)、sets(有效组数)、rawDist(原始)、excluded(剔除组数)。 - 把当日数据整理成下面的数据结构。
步骤 2:更新看板数据
本地版(file://):直接编辑用户 HTML 里的 SWIM_DATA 内联数据:
- 在 trainingDays 数组 push 一条当日汇总。
- 在 allSessions 对象加 日期: [逐组...]。
- 可选:motivationText[日期]、insightsByDay[日期] 写当日点评文案(不写则用通用兜底)。
- 注意:新增数据必须同时更新 trainingDays / allSessions 两处,并保持 currentDate 自动取最新。
托管版(手机/云端):把当日数据写成一个 JSON 片段,运行
python scripts/merge_data.py --data 新的一天.json --out swim-data.json
脚本会把新的一天合并进 swim-data.json(trainingDays + allSessions + motivation + insights + gifLog),模板刷新即可见。
步骤 3:视频动作分析(可选,建议有 Python 环境时做)
- 用
references/shooting-spec.md评估拍摄质量(机位/角度/完整度)。 - 用 opencv 抽帧生成用户动作 GIF(
wrong_*.gif,~380宽/6fps/中间段)。 - 对照
references/stroke-tech-brief.md+references/reference-video-index.md,以及ima/ima-knowledge-base/08 自由泳打腿节奏(二次/四次/六次腿判定)、09 蛙泳休闲与竞速(头部抬升/膝盖宽度/手脚节奏)、10 AI视频抽帧比对规则,在文字回复里指出 1–2 个最关键问题(结构:标准是 X,你现在是 Y,所以 Z)。自由泳先数一个完整划手周期的打腿次数匹配腿法,蛙泳先判休闲/竞速姿势,再匹配错误条目。 - 把「用户 GIF vs 标准 GIF」路径写进
strokeGifLog(标准 GIF 用assets/correct_*.gif或用户本地参考库)。 - 文字版结构化建议同时写进
insightsByDay[日期]和strokeIssues(问题注册表)。
步骤 4:给出当日小结(文字)
回复用户时包含:① 距离/效率达成 ② 异常提示 ③ 1–2 个动作改进点 ④ 「打开看板看完整趋势和对比」。语气鼓励、通俗易懂,术语要解释(SWOLF=省力指数,越低越省力)。
步骤 5:手机端 / 分享(⚠️ 强制设置访问口令)
> 强制规则:任何要生成「分享链接」(部署到 CloudStudio / 任何公开 URL)的看板,必须先设置访问口令,否则禁止部署。本地离线打开(file://)可忽略。
- 设置口令(部署前必做):打开你的看板 HTML 文件(如 dashboard/index.html 或复制出的 游泳看板.html),搜索 var PASS = '改成你自己的访问口令',把单引号里的内容换成用户自己的口令(建议字母+数字,如 swim2026)。若仍是占位符未改,看板打开会红字提醒"还没设置口令",此时不要发链接。
- 部署:把看板文件夹发给 WorkBuddy 说"部署到 CloudStudio",拿到链接。
- 分享:把链接 + 口令一起发给家人朋友(如微信:"看板链接 xxx,口令 swim2026")。提醒他们链接是私人训练数据,别转发到公开群。
- 要分享给泳友(纯本地):整个 assets/ 文件夹(html+chart.umd.js+correct_*.gif)发对方即可,对方浏览器打开就有自己的看板(若对方也要联网分享链接,同样先让他设自己的口令)。
- 要配置手机 IMA 教练:照 ima/ima-setup-guide.md 把 ima/ima-agent-prompt.md + ima/ima-knowledge-base/ 15 个文档配置进 IMA(零代码)。IMA 负责手机聊天式点评,完整看板仍在 WorkBuddy 端。
数据格式速查(SWIM_DATA 结构)
{
profile: { name:'', initial:'', age:'', height:'', streakText:'' },
trainingDays: [ { date:'2026-07-15', weekday:'周三', dist:700, swimMin:20, avgSwolf:109, sets:13, rawDist:700, excluded:0 } ],
allSessions: { '2026-07-15': [ { set:1, style:'breast', styleLabel:'蛙泳', dist:100, pace:"3'26\"", pacePer50:"3'26\"/47", swimTime:'03:26', restTime:'00:39', swolf:103 } ] },
motivationText: { '2026-07-15': { title:'', text:'' } },
insightsByDay: { '2026-07-15': [ { cls:'positive', icon:'✅', title:'', desc:'' } ] },
strokeIssues: [ { id:'F0', stroke:'free', strokeLabel:'自由泳', level:'P0', title:'', detail:'', fix:'', target:'', status:'first' } ],
strokeGifLog: [ { date:'2026-07-15', weekday:'周三', rows:[ { strokeLabel:'自由泳', yours:'assets/wrong_free.gif', standard:'assets/correct_freestyle.gif', noteYours:'', noteStd:'' } ] } ]
}
style 只能是 'free' 或 'breast'(CSS 据此上色)。cls 用 positive|neutral|tip。level 用 P0|P1|P2。status 用 first|verify|fixed。
注意事项
- 截图识别有 ±1 组 / 配速 ±2 秒误差,关键决策让用户回看原图核对。
- 标准示范 GIF(
correct_*.gif)若嫌占空间可直接删除,看板自动降级显示占位文字。 - 完整参考视频库(B站 10 个 mp4 + 细节 GIF)因版权+体积未打包,索引见
references/reference-video-index.md。 - 修改 HTML 内联 JS 后,务必用
node --check校验语法(曾因中文引号导致整页白屏)。