全图纸语义理解升级分析

全图纸语义理解升级方案:用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 语义理解层要实现:

  1. 识别形位公差 --- 平面度、圆柱度、垂直度、同轴度、位置度等 14 种 GD&T 符号 + 数值
  2. 识别表面粗糙度 --- Ra/Rz 数值,覆盖全图面要求和局部标注
  3. 识别焊接符号 --- 焊缝类型、尺寸、工艺要求
  4. 识别技术要求文本块 --- 热处理规格、涂装要求、检验要求等非结构化文本
  5. 结构化标题栏 --- 材料牌号、设计者、图号、图幅、版本等完整字段
  6. 反向提升工艺推断 --- 以上信息写入 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 功能完全向下兼容。

相关推荐
书到用时方恨少!4 小时前
Python Pandas 使用指南:数据分析的瑞士军刀
python·数据分析·pandas
智算菩萨5 小时前
【Pygame】第8章 文字渲染与字体系统(支持中文字体)
开发语言·python·pygame
qh0526wy5 小时前
pathlib 核心功能一览
python
Hello eveybody6 小时前
PyCharm性能调优避坑录
python·pycharm
¥-oriented6 小时前
【Python桌面应用开发环境搭建指南】
开发语言·python
Etherious_Young6 小时前
用u2写一个实况足球图像识别自动化脚本(3)
python·自动化·游戏自动化
项目管理小胡6 小时前
2026年项目管理工具选型指南:功能对比、适用场景与避坑建议
java·python·安全·团队开发·个人开发
雷帝木木6 小时前
Python 数据库 ORM 实战:SQLAlchemy 详解
人工智能·python·深度学习·机器学习
在放️7 小时前
Python 爬虫 · http 协议基础
python