摘要
战场上每个兵堆脚下有一块数量牌,显示还剩几只生物。用户说明:数量牌上方的颜色条代表最上面那只生物的生命百分比——例如单只上限 20、当前 10,条就是一半宽。如果这条能可靠读出,就能算出整堆的总生命:(n−1)·H + r·H(n 是数量,H 是单只上限,r 是比例),从而看到那些“打了但没打死一只”的伤害。外部审阅也把它列为优先项。
本实验只做离线测量,没有接入生产读取器、状态估计(SE)或任何排除逻辑。结论:能读出来的条通常很准,但低血量样本几乎拿不到,而且有一种光晕导致的错值,暂不接入。
要回答的问题
用像素测量血条比例,能否得到与生物面板显示的“当前/最大”生命一致的比例?低血量和光效干扰下表现如何?
数据与来源
- 只用训练来源:用户自己的实时对局会话,以及三段训练录像(10 月 10 日 16:57、01:39,10 月 9 日 08:38)。没有冻结来源。
- 参考值:截图上开着生物面板时,面板显示该生物的当前/最大生命,比例即参考。难点是把面板对应到正确的数量牌上。
方法
测量:在数量牌框上沿附近逐行搜索,找一行“左侧是平坦的亮色填充(绿/黄/橙/红),接着是暗色空槽,两段连续覆盖大部分牌宽”。多行符合时选颜色最均匀的一行(牌上方的橙色光晕沿行变化,不是血条)。比例 = 亮段长度 / 整条长度。
对应面板与牌(逐步收紧):
- 最初假设:同一截图上恰好只有一个数量牌显示面板上的数量,就认为是同一兵堆。
- 身份把关:再读同一截图的行动条,只有当行动条上显示这个数量的卡全是面板那个兵种时才比较。
- 低血量样本:从三段录像里找生物面板帧、预筛受伤面板,送路由器读;自动链失败但牌可见时,由模型目视确认牌属于面板兵种并手工放框(单列为“手工层”,只检验读条,不和自动链混算)。
- 光效负例:挑法术预览、审判光束、浮动伤害数字等画面,看测量会不会出错。
设置
所有目视核对都是模型目视(MODEL_VISUAL_CHECKED),不是人工审核;下面的数字不是准确率。同一截图常被重复读,独立样本比读数少。
结果
初步验证(同数量唯一):38 个牌、32 个有测量。发现两个错误其实是参考对象错了——一次面板是黑色巨龙,它自己的牌被面板挡住,唯一读到的“5”是另一堆满血的红色巨龙;另一次面板是火焰幼虫,选中的“86”牌是另一只绿色生物。去掉这 2 个后 30 个中 29 个误差在 ±0.10 内,最大 0.127(这 30 个只来自 24 张截图)。另外 5 个测成 0.0 是因为选中了全暗的一行,改为“亮段少于 2 像素的行不考虑”后修好 3 个。
身份把关后:
| 身份结果 | 数量 | 说明 |
|---|---|---|
| 通过 | 25 | 比较血条 |
| 行动条上没有这个数量 | 8 | 行动条只显示一部分兵堆 |
| 行动条有歧义 | 3 | 含黑色巨龙那例 |
| 行动条上是另一兵种 | 2 | 含火焰幼虫那例 |
两个参考错误都被挡住。比较 23 个(来自 15 张截图):22 个误差在 ±0.10 内,16 个在 ±0.05 内,最大 0.127。但参考比例只覆盖 0.43–0.97,没有低于 40% 的样本。
低血量搜索:40 张面板显示低于 40% 的截图(26 个不同兵堆状态),自动链一张都没通过。
按参考比例分段(自动 = 自动链;手工 = 模型目视选牌放框):
| 层 | 参考段 | 截图 | 不同状态 | 有测量 | 未知 | ≤0.05 | ≤0.10 | >0.10 | 最大误差 |
|---|---|---|---|---|---|---|---|---|---|
| 自动 | <0.15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — |
| 自动 | 0.15–0.40 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — |
| 自动 | 0.40–0.70 | 17 | 14 | 13 | 4 | 7 | 13 | 0 | 0.091 |
| 自动 | >0.70 | 21 | 14 | 19 | 2 | 17 | 18 | 1 | 0.127 |
| 手工 | <0.15 | 13 | 7 | 9 | 4 | 6 | 6 | 3 | 0.967 |
| 手工 | 0.15–0.40 | 9 | 8 | 8 | 1 | 8 | 8 | 0 | 0.042 |
光效负例:13 个判断(75 个牌中 66 个有测量),没有错值——被浮动数字、光束、长矛、翅膀挡住的条正确给出未知;一帧所有牌上方都有光晕,满条仍测出 0.92–1.0。
失败与负结果
- 低血量兵堆在自动链里根本拿不到牌框:数量牌检测器本身用绿色或黄/橙色血条(宽度至少约条长的 35%)作为定位锚点,红色或很短的血条不会产生数量牌。这是低血量样本缺失的主要原因,不是运气。此外面板常挡住这堆自己的牌,雪地地图每帧只找到 1–3 个牌。
- 唯一的大错值来自光晕:一只魅魔生命 2/60,血条只有约 1 个亮像素,被“至少 2 个亮像素”跳过,于是牌上方颜色足够均匀的橙色光晕被当成满条,5 张截图里 3 张测出 1.0(参考 0.033)。
- 牌框偏左导致比例偏高:生产牌框以亮段为中心,部分受伤时框偏左,条的右端被截掉,0.40–0.50 的样本大多偏高 0.03–0.09。
- 低于约 4%(1 个像素以内)读不出来,给未知(这是对的);低血量的红/橙亮段略微读低。
- 探索性改法 v2(要求选中行足够宽、去掉条左边小暗段、暗槽为主时允许 1 个亮像素)在同样 60 张已比较截图上从 49 有测量/4 个错值变为 53/1,魅魔变为 0.043;但它是照着这些样本改的,在光效负例上又把长矛挡住的两个未知变成 1.0,还把两个低血量样本变成未知。不建议直接替换。
- 用
adjacent取面板前后帧补低血量样本的步骤,因用户开始玩游戏而暂停,没有完成。
局限
参考靠面板与牌的关联,即使加了行动条身份把关,样本也很少(23 个比较只来自 15 张截图);手工层的框比生产放得更好,身份也是目视的,只说明“读条”本身的能力。
结论与下一步
能读到的条通常在 ±0.05 内,但要进入生产至少还缺:不依赖亮段的牌框定位(从牌的红/蓝底和数字、行动条或身体定位);按整块牌宽放框;光晕保护(亮像素极少时要求所选行在暗槽上,低于约 4% 时输出“低于一个像素”);更多低血量样本(面板前后帧、底部行动 HUD 显示的当前行动兵堆生命、或规则模拟器生成的已知生命场景);以及读数给出区间(约 ±0.02),并确认只有顶部那只未满血。
Comments