调研 · 2026-09-03 · 业余对战 · 后方角落单手机位
一段球场后方角落拍的业余对战视频,两个人都在画面里。现在靠击球声"一响一拍、一串响一回合"来数。这套办法靠不靠谱?别人是怎么做的?我们该怎么改?四路并行查证:学术论文、GitHub 开源、商业产品、声音法本身。
你说的"打了多少回合、挥了多少拍",其实牵扯三个不同的东西。它们各自对应不同的信号,这正是"一响一拍"不完全等于拍数的根本原因。
挥拍
人把拍子挥出去。挥空、假动作、试挥也算。
看人的动作能数
击球
拍子真的碰到了球。一次击球一定有一次挥拍,反过来不一定。
听声音、看球转向能数
回合
从发球到死球。中间有几次击球就是几拍。捡球、递球、走位不算。
要判"开始"和"结束",不是数响声
大家平时想要的"拍数"是每个人各自的击球次数,"回合数"是发球到死球的次数。声音数的是"响了几次",它既分不清是谁打的,也分不清这一串响是一个回合还是两个回合中间夹了个捡球。这就是你感觉"对也对,但不完全划等号"的来源。
羽毛球专门的击球声检测论文一篇也没查到,下面是乒乓球、网球、板网球的同类工作,原理相通。分数是论文原文报告的综合分(查全和查准的合并分,满分 100)。
| 工作 | 方法 | 成绩 | 失效原因 |
|---|---|---|---|
| 乒乓球 · Zhang 2006 | 只用能量峰(和我们现在一样) | 42 | 查准只有 28%,大量误报 |
| 同上 · 加声音分类器 | 能量峰提名,再用 MFCC+SVM 过一遍 | 81 | 查全掉到 73%,轻球漏掉 |
| 网球 · Huang & Cox 2011 | 纯声音 MFCC+GMM,换场地测试 | 41~50 | 掌声、场馆噪声遮盖 |
| 同上 · 加球轨迹窗口和击球间隔常识 | 声音提名,画面把关 | 77~84 | 提升约 30 分,全靠画面校验 |
| 网球 · IBM 美网 2019 | 8 层 CNN,四类(击球/掌声/播报/底噪),6568 个样本 | 92 | 原文明说击球声会被掌声盖住 |
| 板网球 · Decorte 2024 | CRNN 训练 2377 次击球,容差 ±250ms | 92 | 漏检 13%:喊叫、球拍撞铁架、跺脚 |
| 手表 · 2018 | 纯手表麦克风 | 80 | 加上手表动作传感器后 95.6 |
对我们现状的翻译:"一响一拍"在安静、单片场地、麦克风离球员近的情况下勉强能用;一旦多片场地同时打、有人喊叫、远端打轻球,就必然多数或漏数,而且没法靠调阈值修好。文献里唯一有效的解法,是让画面来当"门"。
| 路线 | 代表工作 | 信号 | 机位 | 成绩 | 能不能拿来用 |
|---|---|---|---|---|---|
| 看球 | MonoTrack / HitNet(CVPRW 2022) | 球轨迹 + 姿态 + 场地角点,再用"两人交替、相邻 ≥0.5s"规则优化 | 转播 | 94.6(无规则优化 86.3) | 非商用许可 规则思路可自写 |
| 看球 | Hsu 等,Sensors 2024 | TrackNet 轨迹 + YOLOv7 挥拍检测融合 | 转播 + 大学赛 | 72.3 → 90.5 | 说明"球 + 挥拍"融合比单看球强 18 分 |
| 看球 | WASB(BMVC 2023) | 更强的球检测网络 | 转播 720p | 93.1 | 不解决我们的问题 输入照样缩到 512×288 |
| 看人 | Tanaka 等,2023 | 两人位置 + 持拍手腕相对腰的位置,40 帧 LSTM,每人独立数 | 单固定机位职业赛 | 95.9(±20 帧≈0.7 秒) | 最贴近我们;作者自认做不到逐帧精度 |
| 看人 | Baek & Yun,2025 | ViT-Pose → ST-GCN → Transformer,每人独立判"击/没击" | 转播训练,双打测试 | 单打 86.2 / 双打 66.9 | 代码权重开源 可微调 |
| 看人 | Chien & Yu,2023 | 不用球:姿态序列预测球飞行方向,方向翻转 = 击球 | 转播 | ±5 帧 64 / ±15 帧 80 | MIT 但权重下载链接失效 |
| 看人 | See 等(Monash),2025 | 发球准备姿势判回合开始;连续无运动判结束 | 未注明 | 开始 ≈95 / 结束 95(187 回合) | 切回合不依赖球,思路可直接用 |
| 端到端 | E2E-Spot(ECCV 2022) | 纯画面帧序列,直接标出事件帧 | 网球转播 | 96.1(±1 帧) | BSD-3 可商用 要自己标数据训练 |
| 端到端 | F3Set(CVPR 2025) | 同上,羽毛球 ShuttleSet 上 | 转播 | 70(±1 帧,苛刻口径) | CC BY 4.0 |
| 声 + 画 | Decorte 板网球 2024 / Huang 网球 2011 | 声音定时刻,画面(手腕距离、球窗口)定是谁、去误报 | 固定机位 | 92 / 提升 30 分 | 就是我们该走的融合方式 |
| 项目 | 星 | 许可 | 数拍 / 切回合的办法 | 值得注意 |
|---|---|---|---|---|
| SoloShuttlePose | 68 | MIT | 纯球轨迹规则:球的纵坐标峰值 + 转角 >130°;有球场画面 = 回合中 | 用户 issue 反馈"球跟踪和击球检测不工作",不判谁打的 |
| racquet-sports-analyzer(HF) | — | MIT | 球方向反转 或 手腕速度尖峰,双信号同意置信 0.9 | 声称支持手机,零数字;融合逻辑可借鉴,球检测对羽毛球没用 |
| RallyClip | 26 | 无 | 球场 + 姿态 → BiLSTM 逐帧判"在打/没打",有 iOS 端 | 面向业余底线后手机视频;自评基准仅 14→31% |
| Automated-Hit-frame-Detection | 32 | MIT | 姿态 → 球方向 → 翻转 = 击球 | 转播;权重网盘失效 |
| MonoTrack | 56 | 非商用 | 球 + 姿态 GRU,再做约束优化 | 缺 3 个权重;2023 停更 |
| tennis_analysis | 885 | 无 | 球纵坐标变号且后续 30 帧中 24 帧保持 = 一拍 | 场上超过 2 人即崩 |
| E2E-Spot | 86 | BSD-3 | 端到端事件帧定位,450 万参数,单卡几分钟一轮 | 要自标击球帧 |
| TTNet(乒乓) | 759 | 无 | 9 帧堆叠直接出"落台/过网"事件 | 120fps 固定近机位,事件不含击拍;复现不到论文精度 |
| Good-Badminton | 915 | Apache-2.0 | 连续多帧是比赛视图 = 回合中 | README 明说击球点识别仍在迭代 |
音频这条线在 GitHub 上没有羽毛球项目,乒乓球只有一个 4 星的数据集加思路。
| 产品 | 信号 | 机位要求 | 用户怎么说 |
|---|---|---|---|
| SwingVision(网球) | 专利中的单机 3D 球轨迹 + 球员 + 场地线,纯视觉 | 底线后 1.8~3 米、离地 ≥1.4 米,两条底线都入画 | "它甚至跟错了球"、"把一片落叶当成球"、"打了两小时它以为我在跟发球机打" |
| 剪球 | 未公开,模型内置离线跑(推断纯视觉) | 官网称有拍摄建议,未展示 | App Store 4.7,"切分回合的精准度高" |
| 小球圈 | 未公开 | 无官方指导 | "同一次打球,不同机位和角度拍出来,分析结果天差地别";开发者回复"机位和角度确实有影响……后面会开展固定机位录制" |
| 好球哇 | 视觉算法识别高光,多机位切换 | 球馆固定安装,不是手机方案 | 未查到用户原话 |
| RallyVision(魔神智能) | "发球到死球"逻辑,剔除喝水擦汗捡球 | 未公开 | "功能还需要再完善" |
| 好球 / 球迹 / 羽记(手表) | 手表动作传感器,不是视频 | 手表戴持拍手 | "识别杀球和高远球数量太少,不准确" |
| Zepp Tennis(拍柄传感器) | 专利:回合 = 连续击球时间间隔阈值 + 发球动作开始 | — | "把截击记成普通击球" |
| goSmash(羽毛球) | 17 关节姿态 + 球轨迹 | 未公开 | 未公开准确率 |
专利侧的印证:国内专利 CN114882591A 把"击球"定义为"执拍手臂挥动幅度的变化状态",不用声音;CN117953588A 用骨骼 + TrackNet,要求"从对向半场角度采集"。Zepp 的另一份专利用声音,但用的是欢呼声找高光,球拍撞击声被明确归为非高光。
没有一家产品公开支持后方角落机位。要么正后方居中架高(SwingVision 的标准),要么球馆固定安装(好球哇、PlaySight),要么干脆不给指导然后被用户骂(小球圈)。
可用有条件 / 未验证不可用不需要
| 信号 | 数拍 | 分清谁打的 | 切回合 | 抗邻场噪音 | 后方角落机位 | 要训练吗 | 依据 |
|---|---|---|---|---|---|---|---|
| 击球声(现状) | 42~50 分 | 分不清 | 只能靠间隔 | 结构性失败 | 听得到 | 不用 | Zhang 2006 / Huang 2011 / 自家 8 月踩坑 |
| 球轨迹转向 | 转播 94.6 | 靠球在哪个半场 | 球在飞 = 回合中 | 无关 | 自测 26~44% | 有权重 | MonoTrack / 自家 8 月 spike |
| 人体姿态(手腕速度峰) | 固定机位 95.9 | 天然按人 | 发球姿势 95 | 无关 | 人能检出 99.8%,拍数未测 | 规则版不用 | Tanaka 2023 / See 2025 / 自家 Task 9 |
| 端到端逐帧模型 | 转播 96.1 | 可输出 | 可输出 | 无关 | 要自标数据 | 必须,要 GPU | E2E-Spot / F3Set |
| 声音提名 + 姿态把关 | 文献 +15~30 分 | 按手腕距离归人 84~87 | 配合发球姿势 | 无动作对应的声音直接丢弃 | 同上,未测 | 不用 | Huang 2011 / Decorte 2024 / ICASSP 2021 |
看这张表,答案很清楚:在这个机位上,唯一稳定可得的强信号是"人"。球太小看不见,声音分不清谁的、挡不住邻场。人物检出率在我们自己的素材上是 99.8%,而且两个人各自的手腕动作天然就把"谁打的"分开了。
按代价从小到大排三步,每一步都能独立交付,用已有的 am01 三回合金标验收。前一步的收益不依赖后一步。
文献证据:画面校验让声音法提升 15~30 分。这一步做完,现在那套"一响一拍"就变成"一响、且画面里有人在挥拍、且轮到他打,才算一拍"。
| 数据集 | 内容 | 机位 | 有没有逐拍击球帧 | 许可 |
|---|---|---|---|---|
| ShuttleSet / ShuttleSet22 | 44 场 + 9 场,36,484 拍 | 转播 | 有 | MIT(视频版权另算) |
| BFMD 2026 | 19 场全程 1687 回合 16,751 次击球逐帧标注 | 转播 | 有 | 未查到 |
| VideoBadminton 2024 | 校队 19 人自录,7822 段,含回合切分 | 底线后 2 米、高 4.5 米、60fps | 有回合,击球帧待确认 | CC BY-NC-SA,下载入口未找到 |
| F3Set | ShuttleSet 之上的逐帧事件标注 | 转播 | 有 | CC BY 4.0 |
| Mendeley 2026 | 884 段手机 / YouTube 视频 | 混杂 | 未见击球帧 | CC BY 4.0 |
结论:不存在"业余 + 非转播 + 逐拍击球帧"的公开数据集。任何方案在我们机位上的精度都得靠自己标金标来测。好消息是金标方法 8 月已经建立(音频提名加逐帧目检),am01 三回合可直接复用。
2026-09-03 · 四路并行调研(学术 / GitHub / 商业产品 / 声音法),全部数字取自原文,未查到处如实标注。自家实测数据引自 8 月对战 spike 记录。