Back to skills
extension
Category: Data & AnalyticsNo API key required

叠合板图纸钢筋表识别

预制构件钢筋下料单自动识别与统计。从 PDF 图纸中提取钢筋表(配筋表),按直径×形状×长度分组生成标准下料单(仅长度和数量两列),自动判断直段/单钩/双钩,内置数据验证。触发场景:统计钢筋下料单、钢筋表识别、配筋表统计、图纸钢筋统计、下料切割清单、钢筋规格统计、预制板钢筋表。

personAuthor: user_ca7097cdhubcommunity

钢筋下料单自动识别

概述

从 PDF 图纸中自动提取钢筋表(配筋表),解析每条钢筋的编号、规格、数量、 加工尺寸,按直径×形状×中间段长度分组生成工地标准下料单。

何时使用

  • 用户上传 PDF 图纸并要求"统计钢筋""下料单""钢筋表""配筋表"
  • 用户要求按长度和数量统计钢筋
  • 用户提及"单钩""双钩""直段"等钢筋加工术语

工作流程

1. 确认输入文件

确认用户提供的文件路径。支持格式:

  • PDF(有文字层):直接提取文字,精度最高
  • PDF(扫描件):需 OCR,精度较低(告知用户限制)
  • 图片:需 OCR,目前未内置(告知用户转 PDF 后再处理)
  • DWG:需先转 PDF/DXF(aspose-cad 转 DXF 会丢失文字,不推荐)

2. 运行识别脚本

使用 scripts/rebar_tool.py,命令格式:

python scripts/rebar_tool.py "<pdf路径>" --output "<输出目录>" --title "<标题>"

脚本自动完成 5 个步骤:

  1. 提取 PDF 文字(PyMuPDF)
  2. 解析钢筋表(自动检测构件编号、钢筋编号、规格、加工尺寸)
  3. 验证数据(根数×单根长=总长、形状判断、异常检测)
  4. 生成下料单分组(直径×形状×中间段长度)
  5. 输出 Excel + HTML + JSON

3. 检查验证结果

脚本运行结束后会输出验证结果:

  • ✓ 全部验证通过 → 数据可信,直接展示
  • ✗ N 个错误 → 需逐条检查,可能是 PDF 格式差异导致解析偏差

4. 展示结果

present_files 展示三个输出文件:

  • <标题>_下料单.html — 打印友好,只有"长度"和"数量"两列
  • <标题>_钢筋下料单.xlsx — 3 个 sheet:下料单/钢筋明细/下料单汇总
  • <标题>_钢筋数据.json — 原始数据 + 验证结果

核心规则

形状判断(关键)

| 加工尺寸段数 | 形状 | 示例 | |:---:|:---:|---| | 0 段 / 1 段 | 直段 | 3600 | | 2 段 | 单钩 | 40+2105(一端有弯钩) | | 3 段 | 双钩 | 40+2230+40(两端都有弯钩) | | 4+ 段 | 其他 | 复杂形状 |

中间段长度提取(参考用)

  • 直段:加工尺寸本身
  • 单钩/双钩:取 max(加工尺寸段)(弯钩值通常为 40,远小于中间段)
  • 此值仅用于钢筋明细表展示,不作为下料单的长度

下料单格式

  • Φ{直径}{形状} 分组(如 Φ8单钩、Φ8双钩、Φ8直段)
  • 每组内按下料长度排序
  • 只显示「长度(mm)」和「数量(根)」两列
  • 「长度」= 下料长 = 单根长 − 弯钩扣减(按下方差异化规则)
  • 每组末尾显示小计,最后显示总计

下料长度计算规则(差异化弯钩扣减)

下料长 = 单根长 − 弯钩扣减,扣减值按直径区分:

| 直径 | 直段 | 单钩扣减 | 双钩扣减 | |:----:|:----:|--------:|--------:| | Φ8 | 不减 | 63 | 126 | | Φ10 | 不减 | 79 | 158 | | Φ12 | 不减 | 95 | 190 | | Φ14 | 不减 | 111 | 222 | | Φ16 | 不减 | 127 | 254 |

扩展直径(18/20/22/25)也已内置,按 单钩=直径×8−1双钩=单钩×2 自动计算。 如果用户在对话中指定了不同的扣减规则,按用户当次指定的规则执行。默认使用此差异化规则表。

依赖

脚本依赖以下 Python 包(需安装到 WorkBuddy 托管的 Python 环境):

  • PyMuPDF(fitz)— PDF 文字提取
  • openpyxl — Excel 生成

安装命令(请用本机 WorkBuddy 托管的 Python 运行,python 即指代该解释器):

python -m pip install PyMuPDF openpyxl

常见问题处理

PDF 没有文字层(扫描件)

脚本会输出 未识别到任何钢筋数据。告知用户需要先用 OCR 工具(如 Adobe Acrobat)将扫描件转为可搜索 PDF,或提供截图进行手动 OCR 识别。

验证有错误

检查 JSON 中的 verification.errors

  • count × single_len ≠ total_len → 可能是规格行和数字行混合导致解析偏移
  • 形状判断错误 → 检查 process_parts 是否正确分离

构件编号未识别

脚本支持自动检测 3F-X4F-X5#-XA9-X 等格式。如果图纸使用其他编号格式,在 COMPONENT_PATTERNS 中添加正则。

钢筋编号未识别

支持 1#钢筋1a#钢筋JQJDD1aXH11a 等格式。如遇新格式,在 REBAR_ID_PATTERNS 中添加正则。

输出文件说明

Excel(3 个 sheet)

| Sheet | 内容 | |-------|------| | 钢筋下料单 | 按 Φ{直径}{形状} 分组,只有长度+数量两列 | | 钢筋明细 | 全部钢筋记录,含构件/编号/规格/加工尺寸/单根长/下料长/总长/总重/形状/中间段长 | | 下料单汇总 | 分组列表,含涉及构件 |

JSON 结构

{
  "title": "标题",
  "total_records": 313,
  "total_count": 3734,
  "total_weight_kg": 4025.96,
  "cutting_list_items": 70,
  "verification": { "errors": [], "warnings": [], "passed": true },
  "rebars": [
    {
      "component": "3F-1",
      "rebar_id": "1#钢筋",
      "diameter": 8,
      "count": 19,
      "process_parts": [40, 2380, 40],
      "single_len": 2506,
      "cutting_len": 2380,
      "total_len": 47622,
      "total_weight": 18.80,
      "shape": "双钩",
      "mid_len": 2380
    }
  ],
  "cutting_list": [
    { "diameter": 8, "shape": "双钩", "cutting_len": 2380, "count": 54 }
  ]
}