|
| 1 | +# V4 M1 结果:本地录像的失败归因原型 |
| 2 | + |
| 3 | +**状态:已完成**(项目负责人在 2026-10-16 确认)。计划和你定的规则见 [`plan.md`](plan.md),脚本清单见 [`README.md`](README.md)。范围是原版 1.06、天守阁苇名弦一郎三个阶段,2560×1440 录像。 |
| 4 | + |
| 5 | +## 交付了什么 |
| 6 | + |
| 7 | +- **一条命令出失败报告**:`scripts/hud_pipeline.py <录像>` 读 HUD,找出扣血、被打崩、死亡、狼的忍杀和回生,跟踪 Boss,再给每次失败配上招式。开发者菜单录像的答案直接来自叠加层,其他录像给出前三个候选,同一次出招的几下自动合并成一次失败。 |
| 8 | +- **核对页面**:`scripts/review_events.py`,在 Chrome 或 Edge 里打开 http://127.0.0.1:8770。 |
| 9 | + - "事件"视图:逐条核对检测到的事件,补漏检。 |
| 10 | + - "招式"视图:点候选按钮确认招式,可以把被拆开的两次失败合并;右边按招式统计失败次数,这就是失败报告。 |
| 11 | + - `/progress`:处理进度。 |
| 12 | +- **新的开发者菜单录像**:`scripts/overlay_run.py` 一条命令读出叠加层的动画编号,导出到 `research/ground_truth/observations/`,用 AI 链核对动作衔接(衔接不上的地方就是可能读错的地方),再生成招式答案。读出的录像同时扩充认招式的参考库。 |
| 13 | +- **答案集**:7 段录像的每个事件、每次失败的招式都经你核对,存在 `research/ground_truth/annotations/vanilla/genichiro/`。 |
| 14 | + |
| 15 | +## 用到的录像 |
| 16 | + |
| 17 | +| 录像 | 类型 | 时长 | 事件 | 失败 | 结果 | |
| 18 | +|---|---|---|---|---|---| |
| 19 | +| 2026-10-09-castle | 开发者菜单(V3.1) | 412 s | 35 | 21 | 三阶段战死 | |
| 20 | +| 2026-10-13-castle | 开发者菜单(V3.1) | 450 s | 29 | 20 | 赢 | |
| 21 | +| 2026-10-16-castle-1 | 无菜单测试 | 273 s | 18 | 9 | 赢 | |
| 22 | +| 2026-10-16-castle-2 | 无菜单测试 | 299 s | 21 | 13 | 赢 | |
| 23 | +| 2026-10-16-castle-3 | 无菜单测试 | 235 s | 12 | 5 | 赢 | |
| 24 | +| 2026-10-16-castle-4 | 开发者菜单 | 378 s | 12 | 7 | 赢 | |
| 25 | +| 2026-10-16-castle-5 | 开发者菜单 | 268 s | 14 | 7 | 赢 | |
| 26 | +| 合计 | | 39 分钟 | 141 | 82 | | |
| 27 | + |
| 28 | +"事件"包括扣血、被打崩、死亡、回生和忍杀;"失败"是按你的规则合并之后的次数。 |
| 29 | + |
| 30 | +## 结果 |
| 31 | + |
| 32 | +**失败事件检测**:141 个事件你全部核对为正确,没有漏检。检测规则是边看测试录像 1、2 的问题边改的;没参与修改的测试录像 3 和第 4、5 段(38 个事件)也全对。 |
| 33 | + |
| 34 | +**认招式**,只算参数从没在上面调过的录像,参考库是开发者菜单录像: |
| 35 | + |
| 36 | +| 录像 | 第一候选正确 | 正确答案在前三 | |
| 37 | +|---|---|---| |
| 38 | +| 测试录像 1 | 9/9 | 9/9 | |
| 39 | +| 测试录像 2 | 12/13 | 13/13 | |
| 40 | +| 测试录像 3 | 3/5 | 3/5 | |
| 41 | +| 第 4 段(只用别的录像做参考) | 6/7 | 6/7 | |
| 42 | +| 第 5 段(只用别的录像做参考) | 6/7 | 7/7 | |
| 43 | +| **合计** | **36/41(88%)** | **38/41(93%)** | |
| 44 | + |
| 45 | +第 1、2 段(参数在上面调过,所以偏乐观):只用别的录像做参考时,第一候选 35/40、前三 37/40。 |
| 46 | + |
| 47 | +**合并**:自动把同一次出招的几下合成一次失败,你一次都没需要手动合并。 |
| 48 | + |
| 49 | +## 方法要点 |
| 50 | + |
| 51 | +- **HUD 在不在**:看狼血条右端的灰色端盖。空血槽是半透明的,残血时的红色暗角和闪光会骗过颜色判断,端盖不会。 |
| 52 | +- **扣血**:从挨打前的稳定血量算起(闪光和樱花会让读数瞬间往上跳);画面淡出黑屏时 Boss 血条也一起变暗,不算挨打。 |
| 53 | +- **死亡**:以画面中央的"死"字为准。血量读到 0 不一定是死:一击可能留下读不出来的一丝血。 |
| 54 | +- **被打崩**:认崩条那一帧,躯干条变成一根两倍宽的细亮红线。**狼的忍杀**:Boss 血量一帧清空、清掉的部分变成浅色残影;忍杀时狼的躯干条会自动清空,不算被打崩。 |
| 55 | +- **认招式**:以 Boss 身上的白色锁定点为中心截图,用 DINOv2 提特征,减去前后 0.5 秒的平均值(去掉场景和光线的影响),把掉血前 1.5 秒到后 1.0 秒的画面,和参考库里每次攻击判定开始时刻的同一段比较,按当前阶段的产品招式排序。 |
| 56 | +- **看不到致命一击的死亡**:在"死"字出现前 1.6–2.9 秒的窗口里识别(你核对过的死亡里,致命一击都在这个范围)。 |
| 57 | + |
| 58 | +## 你定的规则(2026-10-16) |
| 59 | + |
| 60 | +- 每一次扣血都算一次失败;被打崩和死亡单独统计。 |
| 61 | +- 被打崩:躯干条满或接近满,没完美格挡,被打出硬直,躯干条随后彻底清空;看崩条那一帧。躯干条清空时要检查是不是狼自己的忍杀。 |
| 62 | +- 打崩之后硬直中的追击并入这次打崩,算打崩躯干的那一招。 |
| 63 | +- 3068 单独打中也算飞渡浮舟;飞渡浮舟起手两刀没接 3092 时,答二连横砍也算对。 |
| 64 | +- 拼刀反斩和强弹反斩动作基本一样,答哪个都算对。 |
| 65 | + |
| 66 | +## 局限 |
| 67 | + |
| 68 | +- 样本小:独立测试只有 41 次失败,准确率的误差还比较大。 |
| 69 | +- 认不准的集中在两类:三阶段贴身、画面模糊的时候(横砍、二连横砍);以射箭开头、要看后续才能分清的招式(涨潮、退潮、巴之雷)。 |
| 70 | +- 致命一击在血条上看不出来时,只能估计时间,候选也不稳。 |
| 71 | +- 第 4、5 段的叠加层读数没有逐条人工核对,只核对了 AI 链标出的可疑处(说明在各自的 `observations/.../README.md`)。 |
| 72 | +- 只覆盖天守阁弦一郎原版 1.06、2560×1440、16:9 的录像。 |
| 73 | + |
| 74 | +## 下一步:M2 可靠性验证 |
| 75 | + |
| 76 | +- 用更多独立录像(不开开发者菜单)测失败检测和认招式的准确率与召回率,结果仍由你核对。 |
| 77 | +- 改进认招式:加上计划里的 AI 链时间约束,专门针对三阶段和射箭开头的招式;多录三阶段的开发者菜单录像扩充参考库。 |
| 78 | +- 之后是 M3:网站上的录像上传和失败报告。 |
0 commit comments