摘要
战斗日志(Logs)是一个滚动窗口,最上面或最下面一行常常只露出一半。读取器发现某行格式不对(例如缺右括号)时,会请求对同一页重读;但如果这一行本来就是被窗口截断的,重读多少次也读不全,只是白白浪费 OCR 时间。
本实验做了一个私有的“边缘反馈”候选:从当前原始像素和当前 OCR 框提取浅色文字带,比较首尾两行与中间行的文字高度和边缘密度,标出“可能被截断”的首尾行。只因这类边缘候选产生的格式问题,不再触发同内容的整页重读;完整可见行的 OCR 问题仍允许有限次重读。原始文字、格式提示一律保留。
在训练回放的 500 帧上,第二次尝试从 12 次降到 8 次,读取正确性保持(三字段全对 113/114)。但新出现了 1 次队列溢出(经核查没丢独有内容,但不能证明溢出都安全)。结论写在报告标题里:少重试不能代替完整读取。
要回答的问题
能否只从当前这张图的像素判断日志首尾行是否被窗口截断,从而停止对这些行的无收益重读,同时不删掉任何原始文字、也不误把完整行当成截断?
数据与来源
- 训练:前一个实验用过的两个训练来源,共 500 帧、55 次既有读取。
- 评估:另一个以前曝光过的来源,80 帧;不是盲测。冻结测试素材没有打开。
- 人工式标注:助手逐条查看 55 次读取中 29 次带格式异常的 41 行及其上下文,只标“这行在屏幕上是否完整可见”,不当作 OCR 全文真值。
- 同一张原图、同一个框,复用前一实验真实跑过的 OCR 结果和实测耗时;新派发的帧实际运行 OCR。
方法
- 适用条件。 只在原生 2560×1440、至少 5 条事件、至少 3 条中间文字带、典型字高 20–32 像素时评估;不满足就保留原来的提示。
- 特征。 从当前原生 RGB 和当前 OCR 框提取浅色文字带,比较首尾事件与页内中间行的文字高度、边缘密度。不用固定的窗口 y 坐标、不用标签、玩家名或未来帧。
- 输出。 保留所有原始格式提示和边缘候选,另外给出重试建议:只因边缘候选产生的提示,不再导致同内容整页重试。“候选”不等于确认截断,更不等于读取成功。
- 计时进入调度。 反馈计算的真实耗时加进事件服务时间,结果在算完之前不可用。
- 训练上定好后冻结,再跑评估。
设置
调度回放沿用相同的稳定性提议、当前检测框和有界队列,按记录的完成时刻重放。
结果
可见性标注与反馈的对应:
| 助手标注 | 行数 | 被标为边缘候选 |
|---|---|---|
| 明显被截断 | 16 | 16 |
| 完整可见但 OCR 格式异常 | 22 | 0 |
| 边缘不确定 | 3 | 3 |
这是挑选过的训练异常行,不能据此说截断检测准确率 100%。典型完整行的“]”漏读、“获得了…”被截短、背景“敌方回合”混入,都仍保留重试。只看行在首尾的位置也不够:两条完整的顶行(“织光者”和“吟诵蜂”)被正确地保留为非截断。
训练调度回放(500 帧):
| 训练窗口 | 前一实验读取 | 本实验读取 | 第二次尝试 | 新实际 OCR |
|---|---|---|---|---|
| 长停留 1 | 25 | 23 | 2 | 1 |
| 长停留 2 | 30 | 28 | 6 | 6 |
| 合计 | 55 | 51 | 8(此前 12) | 7 |
51 次读取中 44 次复用历史真实 OCR,只有 7 次是本轮新 OCR。7 个部分页不再仅因边缘格式缺损反复重读。两个窗口的反馈计算 p95 约 33.9 / 32.4 毫秒(只算这个组件)。
四组同文字展示的 114 行:时钟 114、玩家 114、正文 113 正确,三项全对 113/114,与前一实验相同。两张新原图的 28 行逐行精审,字面与旧历史页一致;其余 5 张新读取没有全文精标,不推算全流精度。
冻结后的评估来源(80 帧):仍只读 1 次,28 条事件原观察不变,边缘候选 0。已知的一个回合标题“第 2 回合”(被读成“一第2回合”)未解析的问题仍是 0/1,没有被新反馈补回。这个来源没有截断的正例,所以无法验证跨来源的召回。
测试:新增 14 项、相关共 117 项通过;500 + 80 帧、52 次请求按记录耗时重放,派发、完成、反馈、决定和最终计数一致。
失败与负结果
- 新出现 1 次队列溢出。 某个候选帧在截图后约 0.4 秒被有界队列丢弃。查看前后帧原图:被丢的那帧 29 条可见日志与已读的前一帧一致;再后一帧滚动了一行,多出“卧底(125)攻击了鬼魂(150)”并被读到。这一例没有丢失独有内容,但不能证明所有溢出都安全;计数保留,也没有自动扩大队列。加入几十毫秒的反馈计算会改变派发时序,这正是下一步要测真实并行成本的原因。
- “死亡单位”漏字仍在;回合标题、整行漏读、格式正确但内容错字都未解决。
局限
- 截断正例只来自训练的两个来源;评估来源没有正例。
- OCR 耗时是回放,不代表已实现真实实时调度。
- 默认读取器、接口和 App 都没有接入,手动单图读取不换用后续帧。
- 全界面 95%、十场独立真实对战、App p95 ≤3 秒仍未达成。
结论与下一步
边缘反馈能可靠地挡掉一部分“读多少遍也读不全”的重试,但它只是减少浪费,不代表日志被完整读出。它保持为实验开关,等其他来源的截断正例和完整页误判都覆盖后再考虑默认启用。
下一优先级转向一个显式的时序入口:把真实的解码、检测、排队和读取组合起来,记录候选和结果可用的时刻、丢弃和字段缺口,用前面几个实验的固定用例验证短提示、小变化和恢复,而不是继续追加同类的局部实验。
Comments