摘要

战场上每个兵堆脚下有一块数量牌,显示还剩几只生物。用户说明:数量牌上方的颜色条代表最上面那只生物的生命百分比——例如单只上限 20、当前 10,条就是一半宽。如果这条能可靠读出,就能算出整堆的总生命:(n−1)·H + r·H(n 是数量,H 是单只上限,r 是比例),从而看到那些“打了但没打死一只”的伤害。外部审阅也把它列为优先项。

本实验只做离线测量,没有接入生产读取器、状态估计(SE)或任何排除逻辑。结论:能读出来的条通常很准,但低血量样本几乎拿不到,而且有一种光晕导致的错值,暂不接入。

要回答的问题

用像素测量血条比例,能否得到与生物面板显示的“当前/最大”生命一致的比例?低血量和光效干扰下表现如何?

数据与来源

  • 只用训练来源:用户自己的实时对局会话,以及三段训练录像(10 月 10 日 16:57、01:39,10 月 9 日 08:38)。没有冻结来源。
  • 参考值:截图上开着生物面板时,面板显示该生物的当前/最大生命,比例即参考。难点是把面板对应到正确的数量牌上。

方法

测量:在数量牌框上沿附近逐行搜索,找一行“左侧是平坦的亮色填充(绿/黄/橙/红),接着是暗色空槽,两段连续覆盖大部分牌宽”。多行符合时选颜色最均匀的一行(牌上方的橙色光晕沿行变化,不是血条)。比例 = 亮段长度 / 整条长度。

对应面板与牌(逐步收紧):

  1. 最初假设:同一截图上恰好只有一个数量牌显示面板上的数量,就认为是同一兵堆。
  2. 身份把关:再读同一截图的行动条,只有当行动条上显示这个数量的卡全是面板那个兵种时才比较。
  3. 低血量样本:从三段录像里找生物面板帧、预筛受伤面板,送路由器读;自动链失败但牌可见时,由模型目视确认牌属于面板兵种并手工放框(单列为“手工层”,只检验读条,不和自动链混算)。
  4. 光效负例:挑法术预览、审判光束、浮动伤害数字等画面,看测量会不会出错。

设置

所有目视核对都是模型目视(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),并确认只有顶部那只未满血。