闸修(shot_checker色数阈值64→40·用户裁): A段唯一色数改正常实测地板余量制——现行七屏实测60(营地场景图,七屏最低)~1579,阈值40=地板2/3,低于一切正常屏;行内语义改「色数异常回落」,camp=32特判随零特判令删除;头注补双名分(std≥8=圣经§7.2文字4.5:1推论下界之下+正常实测最低19.3之上的空屏绊线;色数40=正常地板余量);art-pipeline-tools口径行同步

This commit is contained in:
DKChan committed 2026-11-01 23:17:02 +08:00
1 parent f33f9c1cfe
commit c3206f86b2
2 files changed
+8 -9

No files matched your search

+1 -1
View File
@@ -176,7 +176,7 @@ python tools/shot_checker.py <截图目录>
python tools/shot_checker.py <截图目录> shot_menu.png shot_battle.png
```
**判据或口径**:A 屏级骨架——PNG 存在、任一边 1280、灰度 std 不低于 8、唯一色数不低于 64(camp 屏不低于 32——对齐场景环境子板每屏 ≤32 色硬上限,环境层未渲染只剩 UI 面即触红;防空白语义由 std 判据承担)。B 文字对比——战斗 C 区面板与明细带提示的 WCAG 不低于 4.5:1。C 明度三档——战斗屏信息面高于世界中,世界中高于世界底。D 文字禁压纹理——文字框背景中带灰度 std 不高于 18。F 文字在——菜单标题框内与中位灰度差大于 60 的像素占比落在 2% 到 55%。B/C/D 只在清单含 `shot_battle.png` 时跑,F 只在含 `shot_menu.png` 时跑,其余屏只跑 A。全过 0,缺参数或任一失败 1。
**判据或口径**:A 屏级骨架——PNG 存在、任一边 1280、灰度 std 不低于 8(取值在圣经 §7.2 文字 4.5:1 推论下界之下、正常实测最低 19.3 之上)、唯一色数不低于 40(正常实测地板 60 的 2/3,低于一切正常屏;色数异常回落=画面异常信号)。B 文字对比——战斗 C 区面板与明细带提示的 WCAG 不低于 4.5:1。C 明度三档——战斗屏信息面高于世界中,世界中高于世界底。D 文字禁压纹理——文字框背景中带灰度 std 不高于 18。F 文字在——菜单标题框内与中位灰度差大于 60 的像素占比落在 2% 到 55%。B/C/D 只在清单含 `shot_battle.png` 时跑,F 只在含 `shot_menu.png` 时跑,其余屏只跑 A。全过 0,缺参数或任一失败 1。
**已知坑与适用边界**:截图必须由窗口化 `shot_probe` 产出;headless 没有渲染面,截图是空的。`shot_meta.json` 缺失时 B/C/D 直接判 meta 几何缺失,不会跳过。尺寸断言按「任一边等于 1280」放行;1920×1080 截图两边都不等于 1280,会被判非工程档,与文件头「1920 档 1.5×」说明不一致,按源码为准。焦点预算是目检项,机检不判。
+7 -8
View File
@@ -6,9 +6,9 @@ r"""shot_checker.py — 整屏样张闸机检(B 档断言骨架扩全)。
= shot_probe 输出的控件实测几何,为文字框/明度带取样坐标源——分辨率档位自适应,禁硬编码像素)。
断言(整屏样张闸 §1.4 四项的机检可判面):
A 屏级骨架: PNG 存在/尺寸=工程档/灰度 std≥8/唯一色数≥64(渲染真实发生;camp 屏 ≥32——
营地场景联合色板恰 32 色=圣经 §4.1 场景环境子板每屏 ≤32 色上限值,环境层未渲染只剩
UI 面(≈28 色)即触红,防空白语义由 std≥8 承担);
A 屏级骨架: PNG 存在/尺寸=工程档/灰度 std≥8/唯一色数≥40(渲染真实发生——std≥8 取值在
圣经 §7.2 文字 4.5:1 推论下界之下、正常实测最低 19.3 之上;色数 40=正常实测地板 60
〔营地场景图,七屏最低〕的 2/3,低于一切正常屏,色数异常回落=画面异常信号,停下人工复查);
B 文字对比度: 已知文字框〔主墨/暖白 文字簇 vs 背景簇 p2/p98 极性无关〕WCAG ≥4.5:1
(战斗 C 区面板/结算明细提示等已知文字框——圣经 v3.5 §7.2 全局文字硬指标机检面);
C 明度三档带: 战斗屏 信息面(C 区面板均值) > 世界中(棋盘区均值) > 世界底(舞台无光柱区均值)
@@ -137,11 +137,10 @@ def main() -> int:
colors = len(set(img.getdata()))
if std < 8.0:
failures.append("%s: 灰度 std %.1f < 8(疑似空白/纯色)" % (name, std))
# camp 屏=场景图:阈值取场景环境子板每屏 ≤32 色上限值(营地联合色板=32)——
# 环境层未渲染只剩 UI 面(≈28 色)即触红;其余屏沿用防占位屏 64 色。
min_colors = 32 if name == "shot_camp.png" else 64
if colors < min_colors:
failures.append("%s: 唯一色数 %d < %d(疑似占位屏)" % (name, colors, min_colors))
# 唯一色数下限=正常实测地板 60(营地场景图,七屏最低)的 2/3——低于一切正常屏;
# 色数异常回落=画面异常信号,停下人工复查。
if colors < 40:
failures.append("%s: 唯一色数 %d < 40(色数异常回落)" % (name, colors))
print("[shot_checker] %s — %s std=%.1f colors=%d" % (name, "x".join(map(str, img.size)), std, colors))
# B+C+D 断言(battle/menu 两屏为机检承载屏;camp/level 走骨架+目检清单)