feat: 尺度精修上线,首次机器 PASS(live_160548 s=1.0375)
- method_l_shape: OK 候选尺度 ±0.0375 精修(步长 0.0125 + ±6px 窗口), GT live_165204 Δ 179→176(真人 177),离线 9/10 保持 - 插桩 JSON.stringify 捕获 SDK 日志明文;指针 probe 排除 coalesced/pressure - 拖动不跟手指标作废:post_pos 晚于 SDK 重置滑块,鼠标事件流始终完整 - 剩余 VerifyErr = 候选整体选错(视觉确证),方向:多候选质量评估 - docs: experiments/solution/retrospective 同步收尾
This commit is contained in:
@@ -124,6 +124,80 @@ result = solve(big_image_b64, mark_image_b64) # 支持 dataURI 前缀
|
||||
- 洞叠在深色照片上时"内-环亮度差"约束减弱,可提高方向倒角权重;
|
||||
- 若验证码改用亮色覆盖物,需要把亮度差项改为双向(|内-环|)并重标权重。
|
||||
|
||||
## 线上增强:tip_y 锚定与 flatness 贴片检测(2026-05-15)
|
||||
|
||||
线上实测发现题目分布漂移:覆盖物从离线样本的暗色洞变为**亮白半透明贴片**,
|
||||
方法 L 分数从 1–3 恶化到 3.6–7.7,且出现假峰(chamfer 精修分 2.6 的雪枝纹理
|
||||
压过真缺口 8.3)—— 边界/纹理特征在亮贴片雪景题上完全失灵。
|
||||
|
||||
两阶段解决:
|
||||
|
||||
### 1. 坐标系修正(bug 修复)
|
||||
|
||||
服务端 `question.tip_y×2` 是**画布坐标系**(mark 全图左上)缺口顶 y 真值,
|
||||
而求解器内部候选 `e.y` 是 alpha-bbox 左上 y,两者相差 `bbox_y0 × scale`
|
||||
(实测 ≈9px)。不换算会把真候选推出 ±8px 锚窗、错误候选反而入选。
|
||||
换算关系(由离线 GT 实证):**canvas = bbox − bbox_y0×s**。
|
||||
|
||||
### 2. flatness 贴片检测(线上新特征,决定性)
|
||||
|
||||
亮白半透明贴片的物理特征:**把盖住的背景“贴平”** —— 贴片区域内纹理方差
|
||||
远低于周围。定义 flatness = 掩码内灰度 std / 环形外灰度 std:
|
||||
|
||||
- 线上真缺口 flatness 实测 **0.04–0.28**(live_145400 GT 位置 0.056);
|
||||
- 同图假峰(雪枝纹理)0.49–0.67,区分度巨大;
|
||||
- 内部纹理 zNCC、亮度抬升等其它特征在此类题上全部失效(实测)。
|
||||
|
||||
求解流程(tip_y 提供时):各尺度在 y 条带内用 filter2D 向量化扫描 flatness,
|
||||
取画布 y 落在锚窗(±8px)内的最低值位置;flatness ≤ 0.30 判 OK(method
|
||||
= "flatness")。无匹配或未提供 tip_y → 回退 chamfer 路径(离线逻辑不变)。
|
||||
|
||||
**验证结果**:
|
||||
|
||||
- 线上 batch 8/8 全 OK(此前 3 道 AMBIGUOUS 全修复),dy ≤ 8 全部满足;
|
||||
- live_145400(chamfer 假峰题)flatness 命中 (407,64),与 IoU 亚像素实证
|
||||
GT (412,68) 差 (5,4)px;
|
||||
- 离线 10 题无 tip_y 走原逻辑,9/10 保持(4db94793 为历史已知边界)。
|
||||
|
||||
`solve(big, mark, tip_y=...)` 返回新增 `method` 字段;score 量纲随 method
|
||||
变化(flatness 为 0–1 比值,chamfer 为 px 分)。
|
||||
|
||||
### 3. flatness 路径最终降级为禁用(2026-05-15 晚,真人 GT 实证)
|
||||
|
||||
flatness 在线批量指标全绿,但**位置真值校准暴露系统性偏差**。用真人手拖
|
||||
(轨迹录制器采样 down→up 位移)拿到 4 个真值:
|
||||
|
||||
| 题 | flatness | chamfer(tip_y 锚定) | 真人 GT | 判定 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| live_165204 | — | 179 | 177 | chamfer ✓(真人 PASS) |
|
||||
| live_172458 | 433 (s=0.70) | 388 | 388 | flatness +45px ✗ |
|
||||
| live_173321 | 209 (s=0.825) | 391 | 391 | flatness −182px ✗ |
|
||||
| live_180227 | 266 (s=0.95) | 257 | (用户拖偏,不采信) | — |
|
||||
|
||||
结论:**chamfer(tip_y 锚定 + refined 排序)3/3 命中(dx=0/0/2),
|
||||
flatness 每次都大幅偏移**。平坦区特征在雪景题上会吸到贴片内部/
|
||||
天空等大平坦区,且可与同样为假的弱 chamfer 候选互相“掩护”
|
||||
(交叉验证被穿透,live_173321 实测)。
|
||||
|
||||
处理:`FLAT_DISABLED = True` 禁用 flatness 选点(`flatness_scan`
|
||||
函数保留供参考);主路径 = tip_y 锚定 chamfer。采题侧把
|
||||
“flatness/chamfer 共识”作为加分项但不作硬依赖。
|
||||
|
||||
同时期的输入层排除(详见 experiments.md):CDP 合成指纹、事件指纹、
|
||||
时序积压均被 xdotool 硬件输入 + 60Hz 样条加密重放排除——
|
||||
**此前所有失败案例事后看都是位置错,不存在独立的“输入指纹拒”**。
|
||||
|
||||
### 4. 尺度精修 + 首次机器 PASS(2026-09-15 深夜)
|
||||
|
||||
SCALES 网格步长 0.025,真尺度落在步间时轮廓对齐可偏 5-15px —— 正是 VerifyErr
|
||||
(社区资料确认其语义 = 缺口距离错,非轨迹问题)的量级。修法:对入选 OK 候选在
|
||||
s±0.0375(步长 0.0125)重扫 + ±6px 窗口局部最优,取 rotation_scan refined 最低者。
|
||||
|
||||
- GT live_165204:179 → 176(真人 177,Δ −1);离线回归 9/10 保持
|
||||
- **机器 PASS**:live_160548 x=255 **s=1.0375**(精修值,网格外),拖 157.1px → code=200
|
||||
- 剩余 VerifyErr 案例视觉确证为候选整体选错(如 s=0.7 网格下边界假峰),
|
||||
方向:多候选质量评估 / 不像就 refresh 换题
|
||||
|
||||
## 复现
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user