全图纸语义理解升级方案:用OpenVINO™加速及部署PaddleOCR-VL
文档版本 : v1.0
创建日期 : 2026-04-04
面向版本 : QuoteApp v2.0(升级目标)
作者 : 方案设计
状态: 待审核

1. 背景与动机
1.1 当前能力边界
当前 QuoteApp v1.x 的图纸解析能力定位于数字提取层,主要做:
| 能力 | 当前实现 | 置信度 |
|---|---|---|
| 轮廓尺寸(L/W/H) | 正则 + 工程图过滤 | 0.78~0.85 |
| 孔径/孔数 | OCR + 正则 | 0.80 |
| 材质关键词 | 文本模式匹配 | ~0.65 |
| 表面粗糙度 Ra | ❌ 未实现 | - |
| 形位公差 | ❌ 未实现 | - |
| 焊接符号 | ❌ 未实现 | - |
| 技术要求文本块 | ❌ 未实现 | - |
| 热处理要求 | 关键词匹配(粗) | ~0.55 |
| 标题栏结构化 | 正则匹配(不稳定) | ~0.60 |
1.2 缺失信息对报价的影响
这些未识别字段直接影响工序工时与成本计算的准确性:
表面粗糙度 Ra1.6 → 需要精磨工序(GRIND 工时 × 2.0)
形位公差 ±0.005 → 精密级定额(MILL/TURN 工时 × 1.5~2.0)
焊接符号存在 → 触发焊接工序(当前无 WELD 工序)
热处理要求(淬火+回火)→ HEAT 工时准确性从 ±50% 降至 ±15%
当前系统因缺少这些信息,报价误差约 ±25~40%,对精密件、焊接件尤其突出。

1.3 升级目标
v2.0 语义理解层要实现:
- 识别形位公差 --- 平面度、圆柱度、垂直度、同轴度、位置度等 14 种 GD&T 符号 + 数值
- 识别表面粗糙度 --- Ra/Rz 数值,覆盖全图面要求和局部标注
- 识别焊接符号 --- 焊缝类型、尺寸、工艺要求
- 识别技术要求文本块 --- 热处理规格、涂装要求、检验要求等非结构化文本
- 结构化标题栏 --- 材料牌号、设计者、图号、图幅、版本等完整字段
- 反向提升工艺推断 --- 以上信息写入
GeometryFeatures扩展字段,自动校正工时定额
2. 技术选型分析
2.1 候选方案对比
| 方案 | 核心技术 | 形位公差 | 焊接符号 | 文本块 | 本地运行 | 模型大小 | 延迟 |
|---|---|---|---|---|---|---|---|
| A: PaddleOCR-VL + OpenVINO | VLM(PP-DocBee/InternVL) | ✅ 高 | ✅ 高 | ✅ 高 | ✅ 可 | 5~8 GB INT8 | 30~120s/页 |
| B: 专用符号检测(YOLO + OCR) | YOLOv8 + PaddleOCR | ✅ 中 | ✅ 中 | ❌ 弱 | ✅ 可 | ~200 MB | 2~5s/页 |
| C: 云端 API(GPT-4V / Qwen-VL) | 商业 VLM API | ✅ 高 | ✅ 高 | ✅ 高 | ❌ 需联网 | - | 5~15s/页 |
| D: 混合方案(B + 规则增强) | YOLO + OCR + 规则引擎 | ✅ 高 | ✅ 高 | ✅ 中 | ✅ 可 | ~400 MB | 3~8s/页 |
2.2 推荐方案:D(混合方案)
选型理由:
- 形位公差 和焊接符号 是图形符号 + 数值 的组合,属于小目标检测任务,YOLOv8 在定制训练后精度高(mAP > 0.90),且可完全本地运行
- 技术要求文本块是自然语言理解任务,用规则引擎 + 关键词匹配即可覆盖 80% 的场景(工程图技术要求格式相对固定),不必上 VLM
- PaddleOCR-VL (方案 A)保留为可选增强路径,在规则引擎无法处理的边缘情况下用于兜底
- 总模型大小 ~400 MB,打包后 exe 约 70~80 MB(对比现在 50.1 MB),可接受
- 延迟 3~8s/页,用户体验可接受(可配合 ProgressBar 优化感知)
3. 架构设计
3.1 扩展后的解析层级图
┌─────────────────────────────────────────────────────────────────┐
│ 输入文件 │
│ STEP / STL / PDF / DXF / DWG │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────┴─────────────┐
│ │
┌───────▼────────┐ ┌─────────▼────────────┐
│ 几何解析链 │ │ 语义解析链(新增) │
│ (v1.x 保持) │ │ │
│ │ │ ① 图纸图像预处理 │
│ STEP_OCC │ │ ↓ │
│ STEP_TRIMESH │ │ ② GD&T 符号检测 │
│ STL │ │ (YOLOv8-GDT) │
│ PDF_VECTOR │ │ ↓ │
│ PDF_OCR │ │ ③ 焊接符号检测 │
│ PDF_FALLBACK │ │ (YOLOv8-WELD) │
│ DXF │ │ ↓ │
│ DWG_VIA_ODA │ │ ④ 标题栏解析 │
└───────┬────────┘ │ (PaddleOCR-Table) │
│ │ ↓ │
│ │ ⑤ 技术要求文本块提取 │
│ │ (规则引擎) │
│ │ ↓ │
│ │ ⑥ [可选] VL增强兜底 │
│ │ (PaddleOCR-VL) │
│ └─────────┬────────────┘
│ │
└─────────────┬─────────────┘
│
┌─────────────▼─────────────────┐
│ ExtendedGeometryFeatures │ ← 新数据类
│ (v1.x GeometryFeatures 超集) │
└─────────────┬─────────────────┘
│
┌─────────────▼─────────────────┐
│ 增强工艺推断引擎 │
│ process_engine_v2.py │
│ (利用语义字段校正工时) │
└─────────────┬─────────────────┘
│
┌─────────────▼─────────────────┐
│ 成本核算(不变) │
│ cost_calculator.py │
└───────────────────────────────┘
3.2 新增数据结构 ExtendedGeometryFeatures
python
# src/core/geometry_extractor.py 扩展
@dataclass
class GDTAnnotation:
"""单条形位公差标注"""
symbol: str # 符号代码: FLATNESS/CYLINDRICITY/PERPENDICULARITY/
# PARALLELISM/CIRCULARITY/STRAIGHTNESS/
# CONCENTRICITY/SYMMETRY/POSITION/
# TOTAL_RUNOUT/CIRCULAR_RUNOUT/ANGULARITY/
# PROFILE_LINE/PROFILE_SURFACE (14种)
tolerance_mm: float # 公差数值 (mm)
datum: str = "" # 基准标识,如 "A", "B-C"
confidence: float = 1.0
bbox: tuple = () # 在图纸上的位置 (x, y, w, h) 归一化坐标
@dataclass
class WeldAnnotation:
"""单条焊接标注"""
weld_type: str # FILLET/BUTT/GROOVE/PLUG/SLOT/SEAM/SPOT
size_mm: float = 0.0 # 焊脚尺寸 (mm)
length_mm: float = 0.0 # 焊缝长度
process_note: str = "" # 工艺说明,如 "连续焊" "断续焊"
confidence: float = 1.0
bbox: tuple = ()
@dataclass
class SurfaceFinishAnnotation:
"""表面粗糙度标注"""
symbol: str # Ra / Rz
value: float # 数值,如 Ra 1.6 → 1.6
scope: str = "LOCAL" # LOCAL(局部)/ GLOBAL(全图)
bbox: tuple = ()
@dataclass
class TechRequirement:
"""技术要求条目(文本块解析结果)"""
category: str # HEAT_TREATMENT/COATING/INSPECTION/
# TOLERANCE_GENERAL/SURFACE_TREATMENT/OTHER
raw_text: str # 原始文本
structured: dict = field(default_factory=dict)
# 结构化示例:
# HEAT_TREATMENT: {"process": "淬火+低温回火", "hardness": "HRC 45~50"}
# COATING: {"type": "发黑", "standard": "GB/T 15519"}
@dataclass
class TitleBlockData:
"""标题栏结构化数据"""
part_name: str = ""
part_number: str = ""
material: str = "" # 比 material_hint 更准确(来自 VL/OCR-Table)
designer: str = ""
checker: str = ""
date: str = ""
drawing_scale: str = "" # 如 "1:2"
sheet_size: str = "" # 如 "A2"
version: str = ""
company: str = ""
confidence: float = 0.0
@dataclass
class ExtendedGeometryFeatures(GeometryFeatures):
"""
v2.0 扩展几何特征:在 v1.x GeometryFeatures 基础上增加语义字段。
完全向下兼容,GeometryFeatures 的所有字段和方法均可用。
"""
# 形位公差
gdt_annotations: List[GDTAnnotation] = field(default_factory=list)
# 最严公差(用于工时校正)
tightest_tolerance_mm: float = -1.0 # -1 = 未识别
# 表面粗糙度
surface_finishes: List[SurfaceFinishAnnotation] = field(default_factory=list)
# 全图最高粗糙度要求(Ra,数值越小越精密)
tightest_ra: float = -1.0 # -1 = 未识别
# 焊接标注
weld_annotations: List[WeldAnnotation] = field(default_factory=list)
has_weld: bool = False # 是否含焊接工序
# 技术要求
tech_requirements: List[TechRequirement] = field(default_factory=list)
# 标题栏(替代 material_hint,更完整)
title_block: TitleBlockData = field(default_factory=TitleBlockData)
# 语义解析元数据
semantic_parse_mode: str = "NONE" # NONE/RULE/YOLO/VL
semantic_confidence: float = 0.0
3.3 新增解析模式枚举
python
class ParseMode(Enum):
# v1.x 模式(保持不变)
STEP_OCC = "STEP_OCC"
STEP_TRIMESH = "STEP_TRIMESH"
STL = "STL"
PDF_VECTOR = "PDF_VECTOR"
PDF_OCR = "PDF_OCR"
PDF_FALLBACK = "PDF_FALLBACK"
DXF = "DXF"
DWG_VIA_ODA = "DWG_VIA_ODA"
UNKNOWN = "UNKNOWN"
# v2.0 新增
PDF_SEMANTIC = "PDF_SEMANTIC" # 语义增强解析(YOLO + Table OCR + 规则)
PDF_VL = "PDF_VL" # PaddleOCR-VL 兜底(可选)
4. 各子模块设计
4.1 子模块 A:GD&T 符号检测(YOLOv8-GDT)
职责:在图纸图像上定位并分类 14 种形位公差符号,提取关联数值和基准标识。
技术实现:
python
# src/core/semantic/gdt_detector.py
class GDTDetector:
"""
基于 YOLOv8n(nano 版,~6MB)的形位公差符号检测器。
模型来源:在 GD&T 数据集上微调的 YOLOv8n,
或使用基于规则的图像处理方案(无模型依赖)。
"""
# 检测策略优先级:
# 1. YOLOv8 (如已安装 ultralytics)
# 2. OpenCV 模板匹配(14个符号模板,内置于安装包)
# 3. 正则匹配标准 GD&T 文本表示(如 "⊙0.05 A")
def detect(self, image: np.ndarray) -> List[GDTAnnotation]:
...
def _detect_by_yolo(self, image: np.ndarray) -> List[GDTAnnotation]:
...
def _detect_by_template(self, image: np.ndarray) -> List[GDTAnnotation]:
"""
14个符号模板存储于 src/core/semantic/gdt_templates/ 目录。
无外部依赖,仅需 opencv-python(已是现有依赖)。
精度约 mAP 0.75(对标准图纸),YOLOv8 可达 0.92。
"""
...
def _detect_by_regex(self, text: str) -> List[GDTAnnotation]:
"""
在 OCR 结果中用正则匹配 GD&T 文本形式,如:
⊙0.02 A / ⊕Ø0.05 A-B / ∥ 0.01 A
作为图像检测的补充(PDF 矢量图文字可直接读取)。
"""
...
14种符号与类别映射:
| 符号 | 代码 | 类别 |
|---|---|---|
| ─── | STRAIGHTNESS | 形状 |
| □ | FLATNESS | 形状 |
| ○ | CIRCULARITY | 形状 |
| ⌭ | CYLINDRICITY | 形状 |
| ⌒ | PROFILE_LINE | 形状 |
| ⌓ | PROFILE_SURFACE | 形状 |
| ∥ | PARALLELISM | 方向 |
| ⊥ | PERPENDICULARITY | 方向 |
| ∠ | ANGULARITY | 方向 |
| ◎ | CONCENTRICITY | 位置 |
| ⊕ | POSITION | 位置 |
| ≡ | SYMMETRY | 位置 |
| ↗ | CIRCULAR_RUNOUT | 跳动 |
| ⟲ | TOTAL_RUNOUT | 跳动 |
4.2 子模块 B:焊接符号检测(YOLOv8-WELD)
职责:检测焊接符号箭头线(基准线+引线),提取焊缝类型和尺寸。
技术实现:
python
# src/core/semantic/weld_detector.py
class WeldDetector:
"""
焊接符号检测:
- 优先:OpenCV 轮廓分析 + 模板匹配(焊接符号标准形式较固定)
- 增强:YOLOv8(可选,需下载 weld_detector.pt,~8MB)
- 补充:正则匹配 "⌇", "∨", "△" 等文本形式焊接符号
"""
# 支持的焊缝类型
WELD_TYPES = {
"FILLET": "角焊缝",
"BUTT": "对接焊缝",
"GROOVE": "坡口焊缝",
"PLUG": "塞焊缝",
"SLOT": "槽焊缝",
"SEAM": "缝焊缝",
"SPOT": "点焊缝",
}
def detect(self, image: np.ndarray, ocr_texts: List[str]) -> List[WeldAnnotation]:
...
触发逻辑 :检测到焊接符号 → 自动在 process_engine_v2.py 中添加 WELD 工序。
4.3 子模块 C:标题栏结构化(OCR-Table)
职责:定位并解析图纸右下角标题栏(通常是 15~40 个单元格的表格)。
技术实现:
python
# src/core/semantic/title_block_parser.py
class TitleBlockParser:
"""
标题栏解析策略(三级降级):
Level 1: PaddleOCR table 任务
→ 输出 Markdown 表格 → 规则匹配字段
→ 置信度 ~0.90
Level 2: pymupdf 矢量文字 + 区域裁剪 + 正则
→ 仅限 PDF 矢量版,置信度 ~0.75
Level 3: 标准正则(现有 _extract_material_hint_from_text)
→ 仅提取材质,置信度 ~0.60(现有水平)
"""
# 标题栏通常位于图纸右下角 20~30% 区域
TITLE_BLOCK_REGION = (0.65, 0.80, 1.0, 1.0) # (x1, y1, x2, y2) 归一化
def parse(self, image: np.ndarray, pdf_text: str = "") -> TitleBlockData:
...
# 字段映射规则(支持中英文标题栏)
FIELD_PATTERNS = {
"material": [r"材\s*料", r"material", r"mat\.?"],
"part_number": [r"图\s*号", r"drawing\s*no", r"part\s*no"],
"designer": [r"设\s*计", r"designed\s*by", r"designer"],
"scale": [r"比\s*例", r"scale"],
"version": [r"版\s*本", r"rev\.?", r"revision"],
}
4.4 子模块 D:技术要求文本块提取(规则引擎)
职责:找到图纸上的"技术要求"文本区域,解析为结构化条目。
技术实现:
python
# src/core/semantic/tech_req_parser.py
class TechRequirementParser:
"""
技术要求解析(纯规则,无需模型,轻量高速)。
定位策略:
- "技术要求" / "技术条件" / "TECHNICAL REQUIREMENTS" 关键词定位
- 定位后提取该区域所有文本行
分类规则(正则 + 关键词):
"""
# 热处理识别
HEAT_PATTERNS = {
"淬火": {"process": "淬火", "hardness_re": r"HRC\s*(\d+)[~~-](\d+)"},
"渗碳": {"process": "渗碳", "depth_re": r"(\d+\.?\d*)\s*mm"},
"氮化": {"process": "氮化", "depth_re": r"(\d+\.?\d*)\s*mm"},
"退火": {"process": "退火"},
"调质": {"process": "调质", "hardness_re": r"HB\s*(\d+)[~~-](\d+)"},
"时效": {"process": "时效处理"},
}
# 涂装/表面处理识别
SURFACE_PATTERNS = [
r"发黑|氧化|镀铬|镀锌|阳极氧化|喷漆|喷塑|抛丸|电泳",
r"BLACKENING|CHROME|ZINC|ANODIZE|PAINT|SHOT_BLAST",
]
# 检验要求识别
INSPECTION_PATTERNS = [
r"未注公差|一般公差|GB\s*1804|GB/T\s*1804",
r"未注圆角|全部倒角",
r"磁粉探伤|超声波检测|UT|MT|PT",
]
def parse(self, ocr_texts: List[str]) -> List[TechRequirement]:
...
4.5 子模块 E:可选 VL 增强兜底
python
# src/core/semantic/vl_enhancer.py
class VLEnhancer:
"""
PaddleOCR-VL(PP-DocBee / InternVL2)在 OpenVINO 上的增强路径。
触发条件(任一满足):
1. GDT 检测器置信度 < 0.70(形位公差识别不确定)
2. 标题栏置信度 < 0.75(材料字段缺失)
3. 技术要求文本行数 > 10 且未分类行 > 3(复杂文本块)
4. 用户手动勾选"VL 增强解析"
模型选择(按性能/大小权衡):
- PP-DocBee-2B INT8(约 2GB):适合日常使用
- InternVL2-1B INT8(约 800MB):轻量选项
任务类型:ocr + table(不使用 chart/formula,节省推理时间)
"""
def enhance(
self,
image: np.ndarray,
existing: ExtendedGeometryFeatures,
tasks: List[str] = ["ocr", "table"]
) -> ExtendedGeometryFeatures:
"""仅补充 existing 中置信度不足的字段,不覆盖已有高置信度字段。"""
...
5. 工艺推断引擎升级(process_engine_v2.py)
5.1 新增校正系数表
基于语义字段自动调整工时定额:
python
# 表面粗糙度校正(Ra 越小,磨削工时越长)
RA_GRINDING_FACTORS = {
(0.0, 0.4): 3.0, # Ra 0.4 以下:超精密磨,3x 工时
(0.4, 0.8): 2.0, # Ra 0.8:精磨,2x
(0.8, 1.6): 1.5, # Ra 1.6:半精磨,1.5x
(1.6, 3.2): 1.0, # Ra 3.2:基准(现有定额)
(3.2, 12.5): 0.6, # Ra 12.5:粗磨/不磨,0.6x
}
# 形位公差校正(公差越紧,铣/车工时越长)
TOLERANCE_MACHINING_FACTORS = {
(0.0, 0.005): 2.5, # IT5 级以上:精密加工
(0.005, 0.01): 2.0,
(0.01, 0.05): 1.5,
(0.05, 0.1): 1.2,
(0.1, float("inf")): 1.0,
}
# 热处理工序细化
HEAT_TREATMENT_HOURS = {
"淬火+低温回火": {"HEAT": 4.0, "note": "HRC 45~50"},
"渗碳淬火": {"HEAT": 8.0, "note": "渗碳层 0.8~1.2mm"},
"调质": {"HEAT": 6.0, "note": "HB 220~250"},
"氮化": {"HEAT": 40.0, "note": "渗氮层 0.3~0.5mm"},
"退火": {"HEAT": 3.0},
"时效": {"HEAT": 12.0, "note": "去应力时效"},
}
5.2 新增 WELD 工序
python
# WELD 工序工时估算
def calc_weld_time(weld_annotations: List[WeldAnnotation]) -> float:
"""
焊接工时计算:
- 角焊缝:0.15 h/m(标准焊脚)
- 对接焊缝:0.20 h/m
- 坡口焊缝:0.30 h/m
- 每道焊缝最小工时:0.1 h(含引弧+收弧)
"""
...
6. 数据库扩展
6.1 新增字段到 quote_records 表
sql
-- 迁移脚本: migrations/002_add_semantic_fields.sql
ALTER TABLE quote_records ADD COLUMN tightest_tolerance_mm REAL DEFAULT -1;
ALTER TABLE quote_records ADD COLUMN tightest_ra REAL DEFAULT -1;
ALTER TABLE quote_records ADD COLUMN has_weld BOOLEAN DEFAULT 0;
ALTER TABLE quote_records ADD COLUMN semantic_parse_mode TEXT DEFAULT 'NONE';
ALTER TABLE quote_records ADD COLUMN title_block_json TEXT DEFAULT '{}';
ALTER TABLE quote_records ADD COLUMN gdt_annotations_json TEXT DEFAULT '[]';
ALTER TABLE quote_records ADD COLUMN tech_requirements_json TEXT DEFAULT '[]';
6.2 新增 weld_annotations 子表
sql
CREATE TABLE IF NOT EXISTS weld_annotations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
quote_id INTEGER NOT NULL REFERENCES quote_records(id),
weld_type TEXT,
size_mm REAL,
length_mm REAL,
process_note TEXT,
confidence REAL
);
7. UI 集成设计

7.1 DimReviewDialog 扩展
在现有的"手动校正"弹窗中增加语义解析结果预览:
┌─────────────────────────────────────────────────────────┐
│ 图纸解析结果校正 │
├────────────────────┬────────────────────────────────────┤
│ 几何信息(原有) │ 语义识别结果(新增) │
├────────────────────┼────────────────────────────────────┤
│ L: [125.5] mm │ 形位公差: ⊥0.02A, ⊙0.05A │
│ W: [ 80.0] mm │ 最严公差: 0.02mm (精密级) │
│ H: [ 45.0] mm │ 表面粗糙度: Ra1.6 (最高要求) │
│ 孔数: [4] │ 焊接: 无 │
│ 复杂度: [中等] │ 热处理: 调质 HB 220~250 │
│ │ 材质: 45钢 (标题栏) │
│ │ 图号: ZJ-2026-001 │
├────────────────────┼────────────────────────────────────┤
│ 置信度: 0.85 │ 语义置信度: 0.88 │
└────────────────────┴────────────────────────────────────┘
7.2 报价面板增加语义字段展示
在现有报价面板的"零件信息"卡片中增加语义字段行,鼠标悬停显示详情。
7.3 设置面板新增"语义解析"配置卡
语义解析设置
├── 启用 GD&T 符号检测 [✅ 开关]
├── 启用焊接符号检测 [✅ 开关]
├── 启用标题栏结构化 [✅ 开关]
├── 启用技术要求解析 [✅ 开关]
├── 启用 VL 增强兜底 [☐ 开关](需要下载 ~2GB 模型)
│ 模型状态: [未下载] [下载] [测试]
└── 语义解析超时: [10] 秒
8. 实施计划
阶段一:基础语义层(预计 3 周)
| 任务 | 优先级 | 工时 | 依赖 |
|---|---|---|---|
设计 ExtendedGeometryFeatures 数据类 |
P0 | 0.5d | 无 |
实现 TitleBlockParser(OCR-Table) |
P0 | 2d | PaddleOCR |
实现 TechRequirementParser(规则引擎) |
P0 | 2d | 现有 OCR |
扩展 DimReviewDialog 语义字段展示 |
P0 | 1d | 上两项 |
| 数据库迁移脚本 | P0 | 0.5d | 无 |
| 单元测试(5条典型图纸样本) | P0 | 1d | 上述全部 |
阶段二:符号检测层(预计 4 周)
| 任务 | 优先级 | 工时 | 依赖 |
|---|---|---|---|
| GD&T 模板匹配实现(OpenCV,无模型) | P1 | 3d | opencv-python |
| 焊接符号模板匹配实现 | P1 | 2d | opencv-python |
process_engine_v2.py 校正系数表 |
P1 | 2d | 阶段一完成 |
| WELD 工序工时计算 | P1 | 1d | 阶段一完成 |
| YOLOv8-GDT 模型训练(或采用预训练) | P2 | 5d | ultralytics |
| 设置面板语义解析配置卡 | P1 | 1d | 阶段一 |
阶段三:VL 增强兜底(可选,预计 2 周)
| 任务 | 优先级 | 工时 | 依赖 |
|---|---|---|---|
| PaddleOCR-VL + OpenVINO 环境集成 | P2 | 3d | openvino>=2025.4 |
VLEnhancer 实现 |
P2 | 2d | 上项 |
| 打包适配(模型按需下载) | P2 | 1d | PyInstaller |
里程碑
Week 1-3: 阶段一完成 → 标题栏、技术要求、材质字段准确率提升至 ~85%
Week 4-7: 阶段二完成 → 形位公差/焊接/工时校正全线可用,报价误差降至 ±10%
Week 8-9: 阶段三完成 → VL 兜底可选,复杂图纸覆盖率接近 95%
9. 风险与应对
| 风险 | 概率 | 影响 | 应对方案 |
|---|---|---|---|
| GD&T 符号检测精度不足(图纸质量差) | 中 | 中 | 保持手动复核入口,低置信度自动弹出校正弹窗 |
| PaddleOCR-VL 模型下载慢/失败 | 高 | 低 | 阶段三为完全可选,不影响主功能 |
| 公差识别影响工时导致报价偏高 | 低 | 高 | 增加"保守报价/精确报价"模式切换,用户可选 |
| 标题栏格式多样(非标准) | 高 | 中 | 三级降级兜底,不识别时回退到现有 material_hint |
| YOLOv8 依赖(ultralytics)打包体积增加 | 中 | 低 | 模板匹配方案作为 ultralytics 不可用时的降级 |
| 渗碳/氮化等长工时热处理引发用户质疑 | 低 | 中 | 在报价单中注明"热处理工时含炉次分摊" |
10. 成功指标
升级完成后,对 50 份典型图纸样本(含精密件、焊接件、铸件)的测试目标:
| 指标 | v1.x 基线 | v2.0 目标 |
|---|---|---|
| 材质识别准确率 | 65% | 88% |
| 形位公差识别率 | 0% | 80% |
| 表面粗糙度识别率 | 0% | 85% |
| 焊接符号识别率 | 0% | 75% |
| 技术要求提取率 | 0% | 78% |
| 综合报价误差(精密件) | ±35% | ±10% |
| 综合报价误差(焊接件) | ±40% | ±12% |
| 单张图纸处理时间 | 2~5s | 5~15s(可接受) |
11. 附录
附录 A:GD&T 数据集资源
- MechanicaViz GD&T Dataset(GitHub 开源,~2000 标注图)
- 自建数据集:从现有客户图纸中标注,推荐至少 500 张/类
- 数据增强:旋转/缩放/噪声/模糊(工程图纸常见退化方式)
附录 B:技术要求典型格式
技术要求(样本):
1. 调质处理 HB 220~250。
2. 未注公差按 GB/T 1804-m。
3. 未注倒角 C1。
4. 加工面粗糙度 Ra 3.2,标注面按图。
5. 发黑处理。
6. 与 ZJ-2026-003 配合精度 H7/k6。
对应解析结果:
json
[
{"category": "HEAT_TREATMENT", "structured": {"process": "调质", "hardness_spec": "HB 220~250"}},
{"category": "TOLERANCE_GENERAL", "structured": {"standard": "GB/T 1804", "grade": "m"}},
{"category": "SURFACE_TREATMENT", "structured": {"type": "发黑"}},
{"category": "INSPECTION", "structured": {"fit": "H7/k6", "mating_part": "ZJ-2026-003"}}
]
附录 C:相关开源资源
| 资源 | 用途 | 许可证 |
|---|---|---|
| ultralytics/ultralytics | YOLOv8 训练/推理 | AGPL-3.0 |
| PaddlePaddle/PaddleOCR | 表格识别 + OCR | Apache-2.0 |
| zhaohb/paddleocr_vl_ov | VL 增强兜底(阶段三) | Apache-2.0 |
| openvinotoolkit/openvino | 推理加速 | Apache-2.0 |
| ISO 1101 GD&T 符号标准 | 符号定义参考 | ISO 标准文档 |
本方案采用分阶段、可降级的设计原则,阶段一和阶段二均可独立交付价值,阶段三为可选增强。所有改动对 v1.x 功能完全向下兼容。