CAD 内嵌图片/Excel 的识别
在 CAD 图纸中设计说明、材料表、桩表等内容有时不是普通 CAD 文字或线条而是通过 OLE、截图、Excel 粘贴等方式嵌入的对象。普通 CAD 解析只能看到一个区域例如OLE2FRAME无法直接得到里面的文字和表格。因此识别这类内容通常要分两步先定位嵌入区域再对区域内容做专门识别。整体流程将 DWG 转为 DXF。扫描 DXF 中的OLE2FRAME或图片对象。读取该对象在 CAD 中的坐标范围bbox。如果是 OLE Excel尝试从 OLE 数据中提取 Office 包。如果能提取 Excel则直接读取单元格内容。如果是普通图片则裁剪该区域图片调用 OCR 识别。将识别结果转成统一的 CADtableblock。提取时按 CAD 坐标把该 block 放回原图纸位置。示例代码from pathlib import Path from src.tools.cad.embedded_image_ocr_tool import ( convert_dwg_to_dxf, recognize_embedded_objects_from_dxf, embedded_ocr_results_to_cad_blocks, ) dwg_path Path(cases/测试CAD/CAD粘贴图片的识别测试.dwg) dxf_path Path(tmp/CAD粘贴图片的识别测试.dxf) # 1. DWG 转 DXF dxf_bytes convert_dwg_to_dxf( dwg_pathdwg_path, dxf_pathdxf_path, server_urlhttps://your-dwg-to-dxf-server, ) # 2. 识别 CAD 中的内嵌对象 results recognize_embedded_objects_from_dxf(dxf_bytes) # 3. 转成 CAD 提取 block blocks embedded_ocr_results_to_cad_blocks(results, cad_file_id1) for block in blocks: print(block[type]) # table print(block[source]) # cad_embedded_object_ocr print(block[bbox]) # CAD 中原始位置 print(block[content][header]) print(block[content][records][:3])block 示例{ type: table, source: cad_embedded_object_ocr, bbox: { min_x: 2780003.0, min_y: 78951.6, max_x: 2801390.9, max_y: 90836.5 }, content: { header: [单体名称, 建筑面积], records: [ { values: { 单体名称: 地下室, 建筑面积: 1000 } } ] } }关键点预览时可以把识别出的内容画回 CAD 原位置方便用户确认。提取时不要简单把结果追加到最后而应按bbox参与阅读顺序。如果嵌入区域在说明文字中间那么最终结果也应表现为上方 CAD 原生内容 内嵌 Excel/图片识别表格 下方 CAD 原生内容这样既保留 CAD 空间位置又能把 OLE、图片、Excel 等非原生 CAD 内容纳入统一提取结果。