现状 · 2026-09-07 · 看人数拍 v2

看人数拍·现在到哪了

给一段业余对战视频,程序现在能切出回合、数出每个人各打了几拍。这页回答两件事:停在哪,效果到底怎么样。数字全部来自正式流程跑整片的结果,不是原型。

停在哪:定稿版本是 Codex 提交 5c0b796(分支 claude/badminton-app-ui-feedback-777abd),R1 到 R9 九张卡全部验收完,没有正在进行的卡。流程默认走"看人",两人识别覆盖不够时自动退回旧的"听声"。

效果:正后方视频回合 29 对人工 31,拍数六成准、谁打的 75% 准;角落视频拍数 65 分、谁打的 92% 准。比三天前的听声法(47 分、分不清谁打)强一大截,离"准到不用看"还有距离。

没做的:集锦阶段在 Mac 上会挂死(另立卡);角落回合有合并过头;速度再降要换轻量模型。以及你要做的两件事:关 iCloud"优化储存"、自己拍一场正后方素材。

效果一:回合切得对不对(正后方整片 7 分 20 秒)

灰条是我人工从缩略图数的 31 个回合,蓝条是程序切出的 29 个。对上 28 个,多 1 个,3 段各把两个回合连在了一起。

人工程序 0s60s120s180s240s300s360s420s

效果二:每一拍知道是谁打的

下面是程序自己标出的击球瞬间,黄框是近端球员、红框是远端球员。这几张是随机抽的,不是挑好的。

正后方 100.8 秒 · 近端
正后方 237.0 秒 · 近端
正后方 128.4 秒 · 远端
正后方 219.5 秒 · 远端
角落 78.9 秒 · 近端
角落 189.1 秒 · 近端
角落 84.1 秒 · 远端
角落 177.7 秒 · 远端

效果三:两条整片的数字

素材回合拍数(近端 / 远端)金标窗综合分 / 谁打的远端识别覆盖"看挥拍"耗时判定
YouTube 正后方 7 分 20 秒29(人工 31)257(134 / 123)60 / 75%92%时长 2.7 倍达标
B 站角落 4 分 57 秒14196(101 / 95)65 / 92%91%时长 3.5 倍达标

"金标窗综合分"是在人工逐拍标注过的一段(正后方 46 秒、角落 36 秒)上算的查全查准综合分,满分 100,容差 0.35 秒。三天前的听声法在角落那段是 47 分。

正后方:程序切出的回合

#起止(秒)拍数近 / 远
10.0–8.884 / 4
210.8–25.6168 / 8
331.3–35.953 / 2
442.1–50.273 / 4
552.4–57.143 / 1
662.0–73.294 / 5
777.0–88.6116 / 5
896.8–111.4115 / 6
9125.3–135.072 / 5
10154.9–162.895 / 4
11166.3–180.8137 / 6
12182.4–207.62513 / 12
13209.3–223.9148 / 6
14225.2–229.031 / 2
15234.5–246.8126 / 6
16247.7–254.141 / 3
17255.3–258.342 / 2
18262.9–268.942 / 2
19279.1–287.054 / 1
20292.2–300.663 / 3
21301.7–312.2116 / 5
22321.6–329.663 / 3
23333.2–342.675 / 2
24343.8–355.2104 / 6
25358.9–380.8148 / 6
26382.6–389.574 / 3
27398.2–417.3158 / 7
28419.1–423.032 / 1
29426.8–438.574 / 3

角落:程序切出的回合

#起止(秒)拍数近 / 远
10.0–24.62816 / 12
225.0–34.264 / 2
340.9–50.353 / 2
451.8–95.33319 / 14
596.6–110.6106 / 4
6112.8–124.074 / 3
7126.8–141.694 / 5
8144.2–160.0104 / 6
9162.2–171.673 / 4
10173.1–182.783 / 5
11187.1–250.44421 / 23
12252.6–261.564 / 2
13263.6–271.752 / 3
14274.5–295.9188 / 10

效果四:五条不同机位的素材,正式服务实跑(2026-09-08)

定稿版本部署成正式服务后,把手头所有对战素材各跑了一遍。看两件事:走没走上"看人"路径,以及退回时有没有老实退。

素材机位走的路径回合拍数(近 / 远)说明
YouTube 单打 7 分 20 秒正后方看人29257(134 / 123)与验收一致
B 站单打 4 分 57 秒后方角落看人14196(101 / 95)与验收一致
B 站单打 2 分 06 秒后方角落,22.5 帧看人(R10 后)877(45 / 32)R10 前退回听声(远端只跟到 37%);R10 后远端跟到 83%
李宗伟 7 分 47 秒高机位,有看台看人(R10 后)8263(135 / 128)R10 前退回听声(远端只跟到 17%,看台观众把远端身高带偏成 89);R10 后远端跟到 83%
B 站少儿 2 分 48 秒侧面退回听声390 声侧面机位两人一左一右、无近远之分,不在支持范围,退回是预期内的

2026-09-09 更新:R10 上线(划远端区域只看会动、且身高不低于近端 0.35 倍的人),李宗伟和第二条角落两条都走上了看人路径,远端跟踪从 17%、37% 升到 83%,老素材没退步;战报页也已显示近端/远端拍数和每一拍的标记(W1)。原结论(9 月 8 日):五条里两条走上看人路径,三条退回听声,退回时都没有乱报。三条退回里,侧面机位是范围外;另外两条暴露了同一个新毛病:场边有一群坐着不动的人(看台观众、等场的人)时,自动划区域会把"远端球员的身高"估错,导致选人漏掉真球员。业余球馆人少没暴露,一到有看台的场馆就会出。修法明确:划远端区域只看"会动的人"。这是下一张卡(R10)。另外,集锦在新环境里五条全部合成成功,此前的"挂死"确认是 iCloud 云端化所致,不是代码问题。

效果五:训了一个小模型来认"这一下是不是击球"(2026-09-09)

之前数拍靠的是手写规则(手腕甩到最快的那一下算一拍,再用交替、间隔去掉假的),天花板在七成上下。这次用公开的职业比赛逐拍标注(桃田 vs 安赛龙一场,756 拍)加上我们自己五条业余视频的半自动标注,在 Mac 上训了一个小模型,让它看前后 0.6 秒的双人姿态曲线自己判断"这一下是不是击球"。训练只要几秒钟,不用显卡;模型已经装进正式流程,默认走模型,模型文件坏了会自动退回原来的规则。

素材(同一段标准答案)原规则小模型说明
正后方 YouTube 单打,0–46 秒0.600.64报出来的拍 64% 是真的,真拍抓到 64%;谁打的 11/16 对
后方角落 B 站单打,40–76 秒0.630.77报出来的拍 88% 是真的,真拍抓到 68%;谁打的 14/15 对

分数是"准和全"的综合分(满分 1)。角落机位涨得最多,原因是模型比规则更挑:以前把捡球、挥空当成击球的情况少了很多。整片数字:正后方 29 回合不变,拍数从 257 降到 215(假拍少了);角落回合数从 14 变成 11——有三处回合被粘在了一起,是模型在回合间隙给出了几拍低信心的判断,这是下一步"回合边界"要修的,得先人工标一段角落视频的回合起止。

中间踩过一个坑:第一次接线把模型候选也塞进了原来给规则用的"没声音就得幅度特别大才算"的门,结果没声音的拍全被丢了,分数掉到 0.38。在 Mac 上用固件把四种门控方案都跑了一遍,结论是模型给的击球时刻比声音更准(嘈杂角落球馆的声峰反而会把时间拽偏),于是定了新规矩:走模型时声音只负责标"有声/无声"和信心高低,一拍都不丢、时间也不挪。

再往上涨要靠干净的业余标签:现在业余视频的标注只有八九成准,所以紧接着做了一个打标工具(2026-09-10 上线):在回合回看页点"编辑模式",点一下删一拍、改近端远端,把视频拖到击球那一刻点击球条加一拍,改动即时保存、刷新不丢,战报页会给改过的回合打"已修正"角标。接下来用它把五条业余视频的标签一条条过干净,再训第二轮模型。

接下来

三天沉淀下来最值钱的东西:两条素材的"正确答案"固件加走产品真实路径的回放测试,以后任何改动跑一下就知道有没有把哪条素材改坏。完整过程见 看人数拍实测,调研见 回合与拍数怎么数。