feat(tiling): CAD 实测标定 R_text/R_line + 瓦片粒度内容过滤 + 默认参数定稿
Stage B2(CAD 实测标定)与收尾:
- 新增 verify_text_resolution.py:临时加字(字高 200 图形单位 = 1:100 纸面 2mm)+
平行线对,按目标像素换算 zoom 窗口 → 截图 → 问 VLM;测完 delete_entities 清理不保存。
- 标定结论:
* **可读下限与字体强相关**——离线合成(Consolas 抗锯齿填充字体)12px;
真实 CAD 单线体 .shx(描边字体)6px 即可读对(3/3,两轮)。
* 线条「1 条 vs 2 条」:2/3/4px 失败,5/8/12px 成功 → R_line ≈ 5px。
* **必须用 ACI 7 白字**:实测红字(ACI 1)12px 因对比度不足完全读不出。
- config 定稿:TEXT_READABLE_PX=8(折中)、LINE_READABLE_PX=6、
EVIDENCE_MAX_IMAGES=12(原 5 会把规划结果截到只剩 4 张瓦片)。
- 新增 heatmap.occupied_boxes:占用格的**世界 bbox**。
- tiling.plan_regions 新增 keep 谓词;evidence._plan_tiles 按占用格剔除**空瓦片**
(簇 bbox 是包围盒,L 形/斜向分布含大片空白,实测有效)。
- 测试:test_heatmap 补 occupied_boxes;test_tiling 补 keep 过滤;全量 286 项全绿。
- 真实图纸端到端验证:A0 图框出 12 张(1 整体 + 11 瓦片),单框审查 1m38s 通过。
- 记忆库同步:工具语义坑(type_filter 必须传列表 / layer_filter 是通配字符串 /
add_* 返回句柄在 created 键)、标定结论与默认值。
This commit is contained in:
1 parent
cba05b0c65
commit
9c4ab62dc1
9 files changed
+454
-11
No files matched your search
@@ -189,6 +189,21 @@ def test_plan_regions_text_cluster_prioritized_on_truncation():
|
||||
assert wins[0]["min_x"] >= 2000 and wins[0]["min_y"] >= 1000
|
||||
|
||||
|
||||
def test_plan_regions_keep_filters_empty_tiles():
|
||||
"""`keep` 谓词按占用情况剔除空瓦片(L 形分布时省下大片空白)。"""
|
||||
frame = _frame((0, 0, 2000, 1000))
|
||||
clusters = [_cluster((0, 0, 2000, 1000))]
|
||||
assert len(tl.plan_regions(frame, clusters, s_line=10.0, view_px=(100, 50))) == 4
|
||||
|
||||
def keep_top(win):
|
||||
return win["min_y"] >= 500 # 只保留上半(row 0)
|
||||
|
||||
wins = tl.plan_regions(frame, clusters, s_line=10.0, view_px=(100, 50),
|
||||
keep=keep_top)
|
||||
assert len(wins) == 2
|
||||
assert all(w["min_y"] >= 500 for w in wins)
|
||||
|
||||
|
||||
def test_plan_regions_degrades():
|
||||
frame = _frame((0, 0, 1000, 500))
|
||||
clusters = [_cluster((0, 0, 1000, 500))]
|
||||
|
||||
Reference in new issue
Block a user