Validations
问题描述
目前当脚本发生导航超时、像素匹配失败或模板未命中时,会自动保存原始截图(如 NavError_*.png、debug_screenshot.png)。然而这些截图仅仅是未经任何标注的游戏原图,开发者在事后排查时面临以下困难:
- 难以定位检测区域:代码中使用的是相对坐标(如
0.802, 0.389),需要手动换算到具体像素位置,才能在截图上找到程序“正在看哪里”。
- 动态区域无法直观判断:对于模板匹配(
ImageChecker)或 OCR 裁切区域,失败时并不知道实际搜索的是屏幕的哪一块。
- 颜色误判无从考证:像素检测(
PixelChecker)失败时,无法直接看到探测点处的真实颜色,经常需要再次跑 tools/pixel_marker.py 或 tools/debug_screenshot.py 去复测。
这导致很多“看一眼图就知道”的问题,反而需要花费大量时间在坐标换算和二次验证上。
解决方案
在截图保存前增加一层可选的可视化标注(Annotation Layer),将当前检测上下文绘制到图像上再落盘。
-
扩展 save_image API
为 autowsgr.infra.logger.save_image 增加一个可选参数 annotations,支持传入一组标注对象,例如:
save_image(
image=screen,
tag='NavError',
annotations=[
PointAnnotation(x=0.802, y=0.389, color='red', label='challenge_probe'),
RectAnnotation(x1=0.15, y1=0.05, x2=0.65, y2=0.10, color='green', label='tab_bar'),
TextAnnotation(text="Expected: Color(33,132,226)", position='top-left'),
]
)
-
在核心视觉层自动收集 ROI
- PixelChecker:当
check_pixel / check_signature 失败时,可返回失败的规则坐标,供上层绘制十字或圆点。
- ImageChecker:模板匹配失败时,将搜索的
roi 以半透明矩形框标注出来。
- NavigationError:
wait_for_page / click_and_wait_for_page 超时保存截图时,如果调用方传入了 checker,尝试提取 checker 内部关联的像素规则或模板区域并一并绘制。
-
统一标注规范(示例)
- 探测点:红色十字
+ 或圆点,附带坐标文本(适用于 PixelChecker 单点检测)
- 矩形 ROI:绿色/黄色半透明边框(适用于模板匹配搜索区、OCR 裁切区)
- 策略结果:左上角文字,标注期望颜色 vs 实际颜色(适用于像素匹配失败对比)
- 页面状态:顶部横幅文字,标注当前识别到的页面或“未知”(适用于
NavigationError 场景)
-
向后兼容
annotations 默认为 None,不传时行为与现在完全一致,不影响任何正常流程的性能。
- 仅在
DEBUG 日志级别或显式开启调试模式时才自动附加详细标注,避免生产环境截图过大。
预期效果
拿到 NavError 截图后,能直接看到:
- 红色的探测点落在了哪里
- 绿色的模板搜索框覆盖了哪个区域
- 期望的颜色值和实际检测到的颜色值
从而将“坐标换算 -> 二次验证 -> 定位 Bug”的周期从十几分钟缩短到几秒钟。
Validations
问题描述
目前当脚本发生导航超时、像素匹配失败或模板未命中时,会自动保存原始截图(如
NavError_*.png、debug_screenshot.png)。然而这些截图仅仅是未经任何标注的游戏原图,开发者在事后排查时面临以下困难:0.802, 0.389),需要手动换算到具体像素位置,才能在截图上找到程序“正在看哪里”。ImageChecker)或 OCR 裁切区域,失败时并不知道实际搜索的是屏幕的哪一块。PixelChecker)失败时,无法直接看到探测点处的真实颜色,经常需要再次跑tools/pixel_marker.py或tools/debug_screenshot.py去复测。这导致很多“看一眼图就知道”的问题,反而需要花费大量时间在坐标换算和二次验证上。
解决方案
在截图保存前增加一层可选的可视化标注(Annotation Layer),将当前检测上下文绘制到图像上再落盘。
扩展
save_imageAPI为
autowsgr.infra.logger.save_image增加一个可选参数annotations,支持传入一组标注对象,例如:在核心视觉层自动收集 ROI
check_pixel/check_signature失败时,可返回失败的规则坐标,供上层绘制十字或圆点。roi以半透明矩形框标注出来。wait_for_page/click_and_wait_for_page超时保存截图时,如果调用方传入了checker,尝试提取 checker 内部关联的像素规则或模板区域并一并绘制。统一标注规范(示例)
+或圆点,附带坐标文本(适用于PixelChecker单点检测)NavigationError场景)向后兼容
annotations默认为None,不传时行为与现在完全一致,不影响任何正常流程的性能。DEBUG日志级别或显式开启调试模式时才自动附加详细标注,避免生产环境截图过大。预期效果
拿到
NavError截图后,能直接看到:从而将“坐标换算 -> 二次验证 -> 定位 Bug”的周期从十几分钟缩短到几秒钟。