羽毛球挥拍动作纠正 demo 应如何定义
问题
当前 sports-AI roadmap 已经有羽毛球的球路 tracking、stroke-level dataset、skeleton action recognition 和 adaptive explanation 证据。这个问题页把下一步 demo 收束成一个可执行定义:系统应输入一段羽毛球挥拍片段,输出 stroke type、关键动作阶段、错误模式、置信度和一句教练式反馈。
Demo 最小范围
建议先做 单人挥拍 / 单打片段 / 3–5 类错误模式,把问题控制在可复现范围内:
| 模块 | 最小输入 / 输出 | 对应证据 |
|---|---|---|
| 球路与击球时刻 | shuttle trajectory、击球前后短窗口 | sources/2026-04-25-tracknetv3、sources/2026-05-05-tracknetv4-motion-attention-maps |
| stroke-level 标签 | clear / drop / smash / net shot 等击球类型与落点 | sources/2026-05-16-shuttleset-stroke-level-badminton-dataset、sources/2026-05-16-bst-badminton-stroke-type-transformer |
| 姿态与骨架动作 | 关键帧、关键关节、身体链路 | sources/2026-05-16-tempose-badminton-fine-grained-motion、sources/2026-05-16-blockgcn-topology-aware-skeleton-action-recognition、sources/2026-05-16-skateformer-skeletal-temporal-transformer |
| 细粒度差异 | 相似动作之间的局部差异 | sources/2026-05-16-protogcn-skeleton-action-recognition |
| 解释策略 | 简短反馈 / 深解释切换 | sources/2026-05-12-videoauto-r1、sources/2026-05-05-finecausal-action-quality-assessment |
3–5 个建议错误模式
第一版 demo 可以先定义这些错误模式,便于标注和反馈模板对齐:
- 击球点过晚:击球帧相对身体重心和 shuttle trajectory 滞后,常导致被动回球。
- 引拍不足:击球前肩肘腕链路幅度太小,动作阶段缺少明显 backswing。
- 重心转移不足:髋 / 膝 / 脚步变化弱,击球主要依赖上肢。
- 随挥提前中断:击球后 follow-through 轨迹短,可能影响力量和稳定性。
- 步法到位滞后:击球前站位或启动不足,导致击球点和身体姿态都进入补偿状态。
这些标签不需要一开始就覆盖所有 badminton coaching 细节。第一版目标是验证“视频证据 → 结构化动作阶段 → 可读反馈”这条链路能否跑通。
标注协议 v0.1
第一版标注以 rally 片段中的一次击球 为基本样本。每条样本只标一个主 stroke、一个主错误模式和最多两个辅助错误模式,保证后续 baseline 容易评估。
样本切分
| 字段 | 定义 | 建议规则 |
|---|---|---|
clip_id | 视频片段 ID | 对应原始视频、rally、球员侧和击球序号 |
hit_frame | 击球帧 | 以 shuttle trajectory 速度突变、球拍接触附近帧、人工复核共同确定 |
window_start / window_end | 标注窗口 | 默认 hit_frame - 30 到 hit_frame + 30;高速片段可缩到 ±20 帧 |
player_side | 远端 / 近端 / 左侧 / 右侧 | 优先使用画面中稳定可见的一侧 |
stroke_type | 击球类型 | 第一版只保留 4–6 类高频 stroke,降低标签噪声 |
Stroke type 最小集合
第一版建议只保留这些类别:
cleardropsmashdrivenet_shotserveunknown_or_unclear
unknown_or_unclear 很重要:真实视频里球被遮挡、击球点模糊、姿态估计失败时,应允许标注员把样本放入复核池。
错误模式标签
| label | 中文名 | 正样本判定 | 主要证据 |
|---|---|---|---|
impact_timing_late | 击球点过晚 | 击球帧中 shuttle 已越过更理想击球区,身体进入被动补偿 | shuttle 位置、手腕 / 肘部、躯干朝向 |
backswing_insufficient | 引拍不足 | 击球前准备阶段肩肘腕活动幅度偏小 | hit 前 10–25 帧的上肢角度变化 |
weight_transfer_insufficient | 重心转移不足 | 下肢和髋部位移弱,上肢主导发力 | 髋、膝、脚步、躯干前移 |
follow_through_cut_short | 随挥提前中断 | 击球后手臂轨迹很快停止或回收 | hit 后 5–25 帧的腕肘轨迹 |
footwork_late | 步法到位滞后 | 击球前最后一步或站位调整滞后,身体姿态进入补偿 | 脚部位置、身体重心、hit 前移动速度 |
标注置信度
每个错误模式都标 confidence:
high:视频清楚、关键点稳定、错误证据集中在 hit 附近。medium:动作大体可见,但存在遮挡、角度或关键点抖动。low:只能作为候选样本,进入人工复核池。
质量控制
每 20 个样本抽 5 个做复核,优先检查 hit_frame、stroke_type 和主错误模式。若两个标注员对主错误模式分歧大,保留 needs_review: true,并把原因写进 review_note。
Baseline 规则 v0.1
第一版 baseline 先用规则系统验证任务形状,目标是形成可展示输出,而不是追求高分模型。
输入特征
inputs:
video_clip: path/to/clip.mp4
fps: 30
hit_frame: 128
shuttle_xy: [[frame, x, y, confidence], ...]
keypoints_2d:
format: coco17
values: [[frame, joint, x, y, confidence], ...]
court_region: optional
中间特征
features:
wrist_speed_peak_frame: int
elbow_angle_delta_pre_hit: float
shoulder_rotation_delta_pre_hit: float
hip_center_shift_pre_hit: float
knee_bend_delta_pre_hit: float
follow_through_length_post_hit: float
foot_adjustment_frames_pre_hit: int
shuttle_relative_position_at_hit: [dx, dy]
规则输出
rules:
impact_timing_late:
trigger: shuttle_relative_position_at_hit.dx < late_threshold and wrist_speed_peak_frame > hit_frame
backswing_insufficient:
trigger: shoulder_rotation_delta_pre_hit < shoulder_threshold and elbow_angle_delta_pre_hit < elbow_threshold
weight_transfer_insufficient:
trigger: hip_center_shift_pre_hit < hip_shift_threshold and knee_bend_delta_pre_hit < knee_threshold
follow_through_cut_short:
trigger: follow_through_length_post_hit < follow_through_threshold
footwork_late:
trigger: foot_adjustment_frames_pre_hit > footwork_threshold
这些阈值先通过 20–50 个人工样本粗调。后续若要训练模型,可把规则输出当作 weak labels 或 baseline 对照。
展示输出
clip_id: rally_003_player_near_hit_07
stroke_type: smash
stroke_confidence: 0.78
hit_frame: 128
primary_error:
label: impact_timing_late
confidence: medium
evidence_window: [118, 138]
key_evidence:
- shuttle 已接近身体侧后方
- wrist speed peak 晚于 hit_frame
- torso forward shift 较弱
feedback_short: 击球点偏晚,下一拍提前完成引拍,把击球点放到身体前侧。
feedback_detail: 片段中手腕加速峰值晚于击球帧,身体重心前移不足;这会让击球更被动,力量更多来自手臂补偿。
needs_review: true
review_note: shuttle 在击球帧附近有轻微遮挡,建议人工复核 hit_frame。
可执行脚手架
当前已经把标注与 baseline 文件落到 docs/sports-ai/badminton-stroke-correction-demo/:
README.md— demo 执行顺序。annotation-guideline-v0.1.md— 标注员可读说明。annotation-template.csv— 10 个击球样本的标注表模板。sample-manifest.yaml— 10 个样本的清单模板。baseline-output-schema.yaml— baseline 输出字段定义。baseline-rules-v0.1.py— 规则 baseline 脚本,读取 feature JSON 并输出 YAML 反馈。
最小验收标准
第一版 demo 可以用下面标准判定是否跑通:
- 能处理 10 个手工切好的击球片段。
- 每个片段都有
hit_frame、stroke_type、主错误模式和反馈文本。 - 至少 7 个片段的反馈被人工判断为“方向合理”。
- 每个低置信样本都进入
needs_review: true,并给出复核原因。 - 输出可以直接转成网页卡片或短报告。
输出格式建议
Demo 输出应尽量像教练反馈,而不是只给分类分数:
stroke_type: smash
confidence: 0.82
error_modes:
- name: impact_timing_late
confidence: 0.71
evidence_window: frames 42-56
key_body_parts: [right_wrist, right_elbow, torso]
feedback_short: 击球点略晚,下一次提前半拍完成引拍,让击球点更靠身体前侧。
feedback_explanation: 模型在击球前后窗口看到手腕和肘部加速滞后,同时重心没有充分前移;这会让击球更被动,力量主要来自手臂补偿。
needs_review: true
当前更倾向的技术路线
第一版优先走 模块化路线:TrackNetV3 / TrackNetV4 负责 shuttle cue,pose estimator 负责 skeleton,BST / TemPose / SAR baseline 负责 stroke semantics,VideoAuto-R1 式策略决定何时输出短反馈、何时展开解释。这样比端到端大模型更容易复现、诊断和人工复核。
topics/sports-ai-video-understanding 当前证据更支持“先把结构化中间层做稳,再谈教练式解释”。ShuttleSet 给数据结构,TemPose 给 skeleton + shuttle / court position attention 证据窗口,BST 给 hit-frame-centered clipping 与 stroke-type classification,BlockGCN / SkateFormer / ProtoGCN 给骨架动作方法线,TrackMAE / FineCausal / VideoAuto-R1 给动作纠正的解释接口。
深分析后的 demo 约束
本轮重读 ShuttleSet、TemPose 和 BST 后,demo v0.1 应固定三条约束:
- 样本围绕 hit frame:ShuttleSet 和 BST 都把 hit frame 作为 stroke record / clip 的核心,标注窗口默认
hit_frame ± 30,低清晰度片段可缩到±20。 - shuttle trajectory 是主证据:BST 的结果显示 ball information 对 stroke classification 很关键,输出里应保留 shuttle-relative-position、速度变化和轨迹置信度。
- 2D pose 先行:BST supplement 中 3D pose 估计出现朝向误差;第一版 demo 用稳定 2D keypoints、joint / bone 变化和球路证据,更适合转播或手机视频。
为什么还没有解决
- 公开数据多支持 stroke classification 或 tactical analysis,错误动作标签和教练反馈标签较少。
- 球路、姿态、场地位置、击球时刻之间需要时间同步;任一上游模块不稳都会影响解释。
- SAR 方法通常输出类别,demo 需要把类别、关键帧和局部身体部位转成可读反馈。
- 真实训练场视频和职业转播视频差异大,泛化协议需要单独设计。
下一步最有价值的证据
- 找到公开羽毛球挥拍 / stroke correction / coaching feedback 数据或视频样例。
- 用 TrackNetV3 真实 test split 跑出 shuttle trajectory,再选 5–10 个 rally 做人工片段标注。
- 为上述 5 个错误模式写最小 annotation guideline。
- 做一个不训练模型的 baseline:pose + trajectory + hand-crafted temporal rules,先验证反馈格式是否有用。
相关页面
- topics/sports-ai-video-understanding
- topics/sports-ai-roadmap
- topics/video-understanding
- sources/2026-05-16-bst-badminton-stroke-type-transformer
- sources/2026-05-16-shuttleset-stroke-level-badminton-dataset
- sources/2026-05-16-tempose-badminton-fine-grained-motion
- sources/2026-05-16-blockgcn-topology-aware-skeleton-action-recognition
- sources/2026-05-16-skateformer-skeletal-temporal-transformer
- sources/2026-05-16-protogcn-skeleton-action-recognition
2026-05-17 证据补强:系统边界、球员级数据与多传感器上界
本轮新增三条证据后,demo 的分层更清楚:sources/2026-05-17-structured-analysis-broadcast-badminton-videos 给出公开视频系统边界,先切 point / rally、定位球员、识别球员并标注 stroke;sources/2026-05-17-badmintondb-player-specific-match-analysis 提醒第一版之后要做 player-specific split 和跨球员泛化;sources/2026-05-17-multisensebadminton-biomechanical-dataset 则提供多传感器训练反馈上界,说明真正教练式反馈可以接入眼动、肌电、足压、落点和技能水平。
因此第一版执行策略保持轻量:公开视频 + 2D pose + shuttle trajectory + hit frame + 4–6 类 stroke type。第二阶段再把 BadmintonDB 式的 player-specific 评估和 MultiSenseBadminton 式的 biomechanical feedback 作为扩展目标。