2D 가구 도면(DWG/DXF) → 패널 인식·치수 추출·재단표(BOM) 자동 생성 — 구현 가이드 및 연구 지형도
발단: 2026-06-25 내부 연구 논의. "임의의 2D 가구 도면에서 도어 vs 몸통 패널을 자동 분류해 재단표를 만들 수 있는가"에 대한 지형도 + 단계별 개발계획. 산출물: 개발계획 페이지
C:\dev\devplan\furniture-cad-bom.html(대시보드index.html상단 큰제목 배너에서 진입). 상태: 논의·계획 수립(미착수).
TL;DR
- DWG/DXF 파싱·치수 추출은 오픈소스(ezdxf + ODA File Converter)로 즉시 자체 구현 가능. 그러나 "임의의 2D 가구 도면에서 도어 vs 몸통 패널을 자동 분류해 재단표를 생성하는" 완성된 오픈소스·학술 솔루션은 존재하지 않는다 — 이 분류 부분이 직접 개발 영역.
- 현실적 경로 = 하이브리드 파이프라인: DWG→DXF → ezdxf 엔티티/레이어/블록/치수 추출 → 규칙 기반(레이어명·블록명·닫힌 폴리라인·종횡비) 분류 → 치수 연결 → Excel/CSV 재단표. 사내 레이어 표준화 강제 시 규칙만으로 대부분 해결, ML/딥러닝은 규칙이 깨지는 잔여 케이스 보조.
- 딥러닝(GNN/포인트 심볼 스포팅)·멀티모달 LLM(Gemini/Claude/GPT 비전)은 강력하나 가구 도메인 학습데이터 부족 + 환각·정확도 한계로 현 시점 보조 도구로만 권장.
Key Findings
- 파싱 계층은 성숙(즉시 가능) — ezdxf가 사실상 표준(LINE/LWPOLYLINE/POLYLINE/INSERT/DIMENSION/TEXT/MTEXT/HATCH·레이어 전부 읽기,
bbox로 패널 크기 추정,odafc로 DWG 직접). DWG는 폐쇄 포맷 → DXF 변환(정보 손실 없음). ODA File Converter(무료·표준), 완전 오픈소스는 LibreDWG(베타, R2010+ 일부 실패). - 컴포넌트 인식 = 직접 개발 영역 — 규칙 기반 휴리스틱이 가구 도면에 가장 실용·신뢰성 높음. 딥러닝 연구는 건축 평면도에 집중, 가구 패널 전용 데이터셋·논문은 사실상 없음(명백한 연구 공백).
- 상용 캐비닛 SW는 2D를 "읽지" 않는다 — Cabinet Vision·Microvellum·PolyBoard·imos·SWOOD·Mozaik 등은 3D 파라메트릭 모델에서 재단표/BOM/CNC를 출력. 임의의 기존 2D DWG를 자동 해석하지 않음.
1. DWG/DXF 파싱
- ezdxf(Python·최우선):
msp.query("LINE LWPOLYLINE INSERT DIMENSION TEXT MTEXT HATCH"). 치수=dimension.get_measurement()(WCS 단위 실측), 표시텍스트=dimension.dxf.text,get_geometry_block()으로 치수블록 내부 접근. 블록=doc.blocks/INSERT,virtual_entities()로 펼침. bbox=ezdxf.bbox.extents(entities)(패널 치수의 핵심, 단 TEXT bbox 부정확·곡선 flatten 0.01 필요). 손상복구=ezdxf.recover. DWG=from ezdxf.addons import odafc. - DWG→DXF 변환: ODA File Converter(무료·GUI/CLI·배치·audit, 표준, ezdxf odafc 래핑) / LibreDWG(GPL·
dwg2dxf, 베타·소스빌드 까다로움) / Aspose.CAD(상용) / Teigha·ODA SDK(상용 C++). - .NET/Java: netDxf(MIT·C#·DXF전용·DWG미지원·Dimension 다종 지원) / CadLib(상용 DWG) / kabeja(Java·오래됨) / Aspose.CAD.
- 추출 전략: 레이어
groupby→ INSERT 블록명 부품식별 → DIMENSION 명시치수 → 없으면 닫힌 LWPOLYLINE bbox 추론. ACAD_TABLE은read_acad_table_content()로 도면 내 스펙표 직접 파싱 가능.
2. 컴포넌트 인식 / 세그멘테이션
- (A) 규칙 기반(가장 실용): 레이어명('DOOR'/'도어'/'CARCASS'/'몸통'/'SHELF'/'선반') 사내 표준화 → 분류 대부분 해결(Cabinet Vision S2M·RouterCIM도 동일 원리). 블록명(경첩·손잡이·슬라이드)=INSERT 식별(
INSERT[name=="FLAG"]정규식). 닫힌 폴리라인+종횡비·면적으로 도어(큰 전면)/측판/선반(얕은 깊이) 구분. 해치·라인타입=단면·재질. - (B) ML/딥러닝(잔여 케이스): 벡터 GNN(GAT-CADNet CVPR2022·VectorGraphNET), 포인트 기반(SymPoint ICLR2024=Point Transformer+Mask2Former), 래스터 CNN(YOLO/Faster R-CNN, 벡터정밀 손실). 가구 전용 데이터셋 없음 → 자체 라벨링 필수(최대 장벽).
- (C) 평면도 연구(전이 가능): CubiCasa5K(5,000 평면도·80+카테고리·SVG), Raster-to-Vector(Liu ICCV2017). 가구 패널도 "직사각형+치수+심볼" 구조라 유사.
3. 치수 추출
- 명시 DIMENSION:
get_measurement()최고 신뢰(override는dxf.text별도 확인). - 기하 추론: 없으면 닫힌 폴리라인 bbox. ELLIPSE/SPLINE/ARC는 flatten, INSERT는 스케일·회전·중첩 처리.
- 래스터/PDF OCR: PaddleOCR(한국어·DBNet+CRNN/SVTR·PP-OCRv5)로 치수텍스트 인식 후 텍스트 bbox↔최근접 치수선 좌표 연결(재무·PCB 도면 논문 검증 패턴).
- 스케일·단위: DXF
$INSUNITS헤더·축척. ezdxf는 단위 없는 값 반환 → 해석은 사용자 책임.
4. 재단표/컷리스트/BOM 지형도
- 상용 캐비닛 SW(3D 모델 기반): Cabinet Vision(Hexagon·S2M Center로 DXF import, 닫힌 지오메트리+CV 레이어명 요구·자동인식 제한) / Microvellum(AutoCAD·Python API) / PolyBoard(파라메트릭, 단 패널 크기 미인식·재질/부피만) / imos iX / SWOOD(SolidWorks) / Mozaik·CabWriter·RouterCAD/CAM 등.
- 오픈소스 컷리스트/네스팅: OpenCutList(SketchUp·가구 워크플로 사실상 표준·13개 언어·무료, 3D 모델 bbox 기반) / CutList Optimizer·OptiCut·deepnest·SVGnest(부품 리스트 주어지면 시트 배치 88~96% yield, CSV import=표준 연결).
- 한국/아시아: Anyro(석영정보·AutoCAD 기반 가구설계·엑셀 견적) / AutoBOM(속성 기반 BOM, 지오메트리 인식 아님). 한국어 가구 재단표 자동생성 학술연구는 발견되지 않음.
5. 단계별 개발 계획 (권장)
- Phase 1 (1~2주) PoC: 사내 대표 DWG 10~20개를 DXF 변환 → ezdxf로 레이어·블록·폴리라인·DIMENSION 덤프. "우리 도면이 얼마나 구조화되어 있는가" = 전체 난이도 결정 단일 최대 변수. 산출=구조화 진단표(레이어 일관성/DIMENSION 존재율/닫힌 루프 비율).
- Phase 2 (2~4주) 규칙 기반 분류기 + 치수 추출: 닫힌 폴리라인 bbox → 종횡비·면적으로 도어/측판/선반/서랍 분류. DIMENSION 우선·없으면 bbox 추론.
$INSUNITS·축척 처리. openpyxl/pandas로 Excel 재단표. 목표 ≥90%. - Phase 3 (병행·★가장 중요·ROI 최고) 도면 작성 표준 강제: 'DOOR'·'CARCASS_SIDE'·'SHELF'·'DRAWER_FRONT' 레이어/블록 표준 → 규칙만으로 거의 완전 자동화. 반복 부품=블록 표준화. ML보다 ROI 훨씬 높음(Cabinet Vision S2M·RouterCIM이 방증).
- Phase 4 (선택·잔여 케이스) ML/LLM 보조: 규칙 <80% 정체 시 — 경량 분류기/Florence-2급 VLM 파인튜닝(작은 도메인셋으로도 범용 LLM 우월 가능, arXiv 2411.03707) / PaddleOCR(스캔·래스터) / 멀티모달 LLM(Gemini 계열 도면 치수 최고) 폴백. 라벨링 비용=최대 장벽.
- Phase 5 (마지막) 네스팅 통합: 재단표 CSV → CutList Optimizer/deepnest/OptiCut, 또는 OpenCutList 워크플로 참조.
판단 기준(임계값)
- 규칙 정확도 ≥90% → ML 불필요, 규칙+표준화로 종결.
- 도면 비표준·외부 유입 다수 → 레이어 표준화 불가 → ML/LLM 투자 정당화.
- 스캔/PDF 비중 높음 → OCR 파이프라인 핵심 + 멀티모달 LLM 검토.
전략적 대안(무겁게 고려)
"2D 도면 역파싱"은 본질적으로 정보가 소실된 표현(3D 의도→2D 투영 손실)에서 정보를 복원하는 문제. 상용 업계 전체가 이를 우회해 3D 파라메트릭 모델에서 재단표 출력("모델 우선") 방식을 택함. 레이어가 엉망이거나 외주 도면이 많으면, 장기적으로 설계 단계를 파라메트릭 도구로 이전해 애초에 재단표가 자동 생성되게 하는 것이 더 합리적일 수 있다.
6. 핵심 논문/벤치마크 (전이 가능, 가구 전용 아님)
- Panoptic Symbol Spotting(FloorPlanCAD PQ): PanCADNet 59.5(ICCV2021) → CADTransformer 68.9(CVPR2022) → GAT-CADNet 73.7(CVPR2022) → SymPoint 83.3(ICLR2024) → SymPoint-V2 90.1(prior 사용 시·없으면 ~83) → CADSpotting 87.4 / VecFormer 88.4.
- BOM/정보추출: Florence-2 파인튜닝(Khan, arXiv 2411.03707, F1 +52%·환각 −43% vs GPT-4o/Claude-3.5) · OpenCV+Tesseract BOM(ISSC 2021) · 2D 기계도면 딥러닝(Machines 2023) · Donut 표제란/BOM(arXiv 2505.01530). 공통 패턴=텍스트/심볼 인식+최근접 연결+표 생성.
- 데이터셋(가구 전용 없음→자체 라벨링): FloorPlanCAD(11,602·35클래스) · CubiCasa5K · SketchGraphs(15M) · Fusion360 Gallery · ABC(100만) · DeepCAD · ArchCAD-400K(2025).
Caveats
- 가구 패널 도면 전용 딥러닝 솔루션·데이터셋·논문 없음(전이 미검증·자체 라벨링 필수).
- 상용 캐비닛 SW는 2D 자동해석 안 함(3D 모델 출력/엄격 레이어 규칙).
- SymPoint-V2 90.1 PQ = prior 사용 시(없으면 ~83). 멀티모달 LLM 벤치(Gemini ~80%)는 소규모셋(도면 10장)·일부 모델 환각으로 행 조작 → 자체 검증 필요.
- ezdxf bbox는 TEXT/곡선 부정확(공식 명시), ezdxf는 CAD 커널 아님. LibreDWG 베타·소스빌드 까다로움. 일부 벤치는 벤더 블로그 출처(상대 비교로 해석).
관계
- 개발계획 페이지:
C:\dev\devplan\furniture-cad-bom.html(대시보드 상단 배너 진입). - 인접: material-takeoff(도면 비전추출)·autocad-plot(AutoCAD COM)·orderpaper(자재·재단·발주) — 재단표 산출은 발주/자재관리와 연결 가능.