Drawing Dimension Parser - PDF图纸关键尺寸解析
Overview
本技能从PDF工程图纸中提取带 * 号标注的关键尺寸,解析尺寸类型与公差,生成质检用Excel清单。支持矢量PDF(CAD导出)和扫描件PDF两种来源,扫描件结果标注置信度。
Trigger Conditions
触发此技能的场景:
- 用户上传PDF图纸文件,要求提取/解析/读取尺寸
- 用户提到"关键尺寸"、"图纸尺寸"、"质检尺寸"等关键词
- 用户要求生成尺寸清单用于质检/检验
- 用户说"看看尺寸"、"这图关键尺寸有哪些"等隐含意图
不触发的场景:
- 非PDF格式的图纸(DWG/DXF需先转换为PDF)
- 非尺寸提取需求(如仅查看图纸内容、提取BOM等)
- 纯文字PDF文档(非工程图纸)
Prerequisites
运行前检查以下Python依赖,缺失则提示用户安装:
pip install PyMuPDF pdfplumber pytesseract openpyxl Pillow
系统依赖:
- Tesseract OCR 引擎(扫描件OCR必需)
- Windows: 安装 Tesseract-OCR,确认
tesseract在 PATH 中 - 或通过
pytesseract.pytesseract.tesseract_cmd指定路径
- Windows: 安装 Tesseract-OCR,确认
Execution Workflow
Step 1: File Validation
- 确认输入文件为
.pdf格式 - 检查文件大小(>100MB 警告)
- 获取PDF页数,记录总页数
- 一次仅处理一个PDF文件
Step 2: PDF Type Detection
判断PDF类型,决定后续解析路径:
- 使用
scripts/parse_pdf_dimensions.py --detect检测 - 判定逻辑:
- 提取前N页文本内容,若文本量 > 阈值(如200字符/页)→ 矢量PDF(路径A)
- 文本量极少或为空 → 扫描件PDF(路径B)
- 混合情况(部分页有文本、部分无)→ 逐页判断,分别走对应路径
Step 3: Dimension Extraction
路径A: 矢量PDF
- 执行
scripts/parse_pdf_dimensions.py <pdf_path> --mode vector - 脚本使用 PyMuPDF 提取文本层,保留坐标信息
- 正则匹配尺寸标注模式(见
references/dimension_notation.md) - 记录每个尺寸的页码和坐标位置
路径B: 扫描件PDF
- 执行
scripts/parse_pdf_dimensions.py <pdf_path> --mode scan - 脚本将PDF页面渲染为高分辨率图像(300 DPI)
- 使用 pytesseract OCR 识别文本
- 正则匹配尺寸标注模式
- 对每个识别结果评估置信度(见 Confidence Scoring Rules)
Step 4: Key Dimension Filtering
- 从所有提取的尺寸中,筛选标注前含
*号的尺寸 *号识别规则:- 矢量PDF:文本中紧邻尺寸值前的
*字符 - 扫描件:OCR结果中尺寸值前的
*(需注意OCR可能将*误识为其他字符,置信度降低)
- 矢量PDF:文本中紧邻尺寸值前的
- 不含
*的尺寸不输出
Step 5: Tolerance Parsing
对每个关键尺寸解析公差信息,详细规则见 references/tolerance_parsing.md。
支持的公差格式:
| 格式 | 示例 | 解析结果 |
|------|------|----------|
| 对称公差 | *Ø50±0.02 | nominal=50, upper=+0.02, lower=-0.02 |
| 不对称公差 | *50 +0.1/-0.05 | nominal=50, upper=+0.1, lower=-0.05 |
| 配合代号(孔) | *Ø50 H7 | 查表换算为数值公差 |
| 配合代号(轴) | *Ø50 g6 | 查表换算为数值公差 |
| 螺纹公差 | *M8-7H | 螺纹中径/大径公差 |
| 无公差 | *50 | 按GB/T 1804未注公差(标注"未注公差") |
Step 6: Confidence Assessment
对每个提取的尺寸评估置信度:
| 置信度等级 | 分值范围 | 条件 | Excel标记 | |-----------|---------|------|-----------| | HIGH | 0.9-1.0 | 矢量PDF,文本清晰,*号明确 | 无特殊标记 | | MEDIUM | 0.7-0.89 | 矢量PDF但部分字符模糊,或扫描件OCR质量好 | 黄色底色 | | LOW | 0.5-0.69 | 扫描件OCR质量一般,号识别不确定 | 橙色底色 + "人工复核"标记 | | VERY LOW | <0.5 | 扫描件质量差,尺寸值或号无法确认 | 红色底色 + "人工复核"标记 |
Step 7: Duplicate Dimension Handling
同一尺寸在多视图中重复标注时的处理:
- 比对规则:名义值 + 尺寸类型 + 公差均相同 → 判定为重复标注
- 重复标注的尺寸全部列出(不合并、不去重)
- 在 Excel "备注" 列标注 "重复标注-人工复核"
- 在 "页码" 列列出所有出现的页码(如 P1, P3)
Step 8: Excel Output Generation
- 执行
scripts/generate_inspection_excel.py <json_data> -o <output_path> - 生成质检用Excel文件
输出文件名: {图号或文件名}_关键尺寸清单_{YYYYMMDD}.xlsx
Excel 列定义:
| 列序 | 列名 | 说明 | 填写方 | |------|------|------|--------| | A | 序号 | 自增编号 | 自动 | | B | 图号 | 标题栏提取,无法提取则用文件名 | 自动 | | C | 页码 | 尺寸所在页码 | 自动 | | D | 尺寸标注 | 原始标注文本(含*号) | 自动 | | E | 尺寸类型 | 线性/直径/角度/螺纹/半径 | 自动 | | F | 名义值 | 数值 | 自动 | | G | 上偏差 | 数值 | 自动 | | H | 下偏差 | 数值 | 自动 | | I | 上限 | 名义值 + 上偏差 | 自动 | | J | 下限 | 名义值 + 下偏差 | 自动 | | K | 单位 | mm 或 inch | 自动 | | L | 置信度 | HIGH/MEDIUM/LOW/VERY LOW | 自动 | | M | 位置描述 | 视图名称+大致区域 | 自动 | | N | 备注 | 重复标注/未注公差/人工复核等 | 自动 | | O | 实测值 | | 质检待填 | | P | 判定 | 合格/不合格 | 质检待填 | | Q | 不合格原因 | | 质检待填 | | R | 检验员 | | 质检待填 | | S | 检验日期 | | 质检待填 |
Excel 格式规则:
- 表头:深蓝底白字,加粗,居中
- 置信度颜色标记:按 Step 6 规则填充行底色
- 质检待填列(O-S):浅灰底色,提示用户填写
- 冻结首行
- 列宽自适应
- 添加自动筛选
Error Handling
| 异常场景 | 处理方式 | |---------|---------| | PDF加密/密码保护 | 提示用户解除密码后重试 | | PDF损坏无法打开 | 报错退出,提示文件可能损坏 | | 依赖缺失(PyMuPDF/ocr等) | 提示安装命令,不继续执行 | | 矢量PDF无文本层 | 自动切换到扫描件路径B | | OCR引擎未安装 | 提示安装Tesseract,仅支持矢量PDF路径 | | 未提取到任何关键尺寸 | 输出空Excel(仅表头),备注"未检测到带*号的关键尺寸" | | 标题栏信息无法识别 | 图号列填入PDF文件名 | | 配合代号无法查表 | 公差列填入原始代号,上下偏差标注"需人工查表" |
Units Handling
- 默认单位 mm
- 若标题栏或图纸标注中检测到 inch/in/IN 标记 → 单位切换为 inch
- 输出Excel中K列明确标注单位
- 同一图纸中不混用单位(以标题栏声明单位为准)
Resources
scripts/
- parse_pdf_dimensions.py - PDF解析主脚本。输入PDF文件路径,输出JSON格式的尺寸数据。支持
--detect(检测PDF类型)、--mode vector(矢量模式)、--mode scan(扫描模式)参数。 - generate_inspection_excel.py - Excel生成脚本。输入JSON数据,输出质检用.xlsx文件,含置信度高亮和重复标注标记。
references/
- tolerance_parsing.md - 公差解析详细规则,含ISO配合代号查表(孔H系列、轴g/h/k/n/p/s系列常用等级)、螺纹公差解析规则、未注公差等级表(GB/T 1804)。
- dimension_notation.md - 尺寸标注识别规则,含正则表达式模式库、GB制图标准尺寸标注格式说明、常见标注变体处理。
微信扫一扫