NX 단면 두께 분석기 ← yonchelee.com

NX Section Layer Thickness Analyzer

NX(Unigraphics) 단면 스크린샷에서 적층 부품의 두께를 자동 측정하고
Excel로 내보내는 PyQt6 데스크톱 프로그램

Python 3.10+ PyQt6 OpenCV Pandas v0.1.0

주요 기능

NX 단면 이미지를 불러와서 측정→기록→내보내기까지 원스톱으로

📷

이미지 드래그 & 드롭

PNG, JPG, BMP, TIFF 형식의 NX 스크린샷을 캔버스에 드래그하면 바로 로드됩니다.

📏

스케일 보정

기지(旣知)의 두 점을 클릭하고 실제 mm 값을 입력하면 자동으로 pixel/mm 비율을 계산합니다.

🔍

하이브리드 레이어 검출

OpenCV Canny 엣지 검출 + 수직 측정선으로 경계를 자동 분할. 수동 보정도 가능합니다.

📊

실시간 테이블 & Excel 내보내기

검출 즉시 우측 테이블에 반영, 레이어 이름 편집 가능, .xlsx로 저장합니다.

샘플 단면 이미지

5개 레이어(Top Coat, Adhesive, Core Metal, Insulator, Base) 합성 단면

Sample NX Section Screenshot
examples/sample_section.png — 100 px = 10 mm 스케일 바 포함

검출 결과 (자동 측정)

Layer Top (px) Bottom (px) Thickness (px) Thickness (mm)
Layer 1 — Top Coat 60.00 80.00 20.0 2.00
Layer 2 — Adhesive 80.00 95.00 15.0 1.50
Layer 3 — Core Metal 95.00 155.00 60.0 6.00
Layer 4 — Insulator 155.00 184.00 29.0 2.90
Layer 5 — Base 184.00 231.00 47.0 4.70

1 설치

Python 3.10 이상이 필요합니다

bash # 저장소 클론 git clone https://github.com/yonchelee/sc_auto_measure.git cd sc_auto_measure git checkout claude/nx-layer-thickness-analyzer-wHmQS # 가상환경 생성 & 활성화 python3 -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 의존성 설치 pip install --upgrade pip pip install -r requirements.txt

2 실행 & 사용법

앱을 띄우고 6단계로 측정 완료

bash python main.py
  1. NX 단면 스크린샷을 캔버스에 드래그 & 드롭하거나 메뉴 파일 → 이미지 열기 (Ctrl+O).
  2. 기준선 설정 버튼 → 실제 길이를 아는 두 점 클릭 → 다이얼로그에 실제 mm 값 입력 → OK. 우측 하단에 mm/pixel 값이 표시됩니다.
  3. 측정선 그리기 버튼 → 적층부를 가로지르는 두 점 클릭. 기본 수직 스냅, Shift 키로 자유 각도.
  4. 자동 레이어 검출: Canny 엣지 검출로 경계가 빨간색으로 표시되고, 우측 테이블에 Layer 1…N이 채워집니다.
  5. 필요 시 테이블에서 레이어 이름 편집, 선택 행 삭제로 수동 보정.
  6. Excel로 내보내기 (Ctrl+S) → .xlsx 파일로 저장. 이미지 경로와 mm/pixel 메타 포함.

3 프로젝트 구조

모듈별 역할 분리: core (분석) + gui (인터페이스)

sc_auto_measure/ ├── main.py ← PyQt6 엔트리포인트 ├── requirements.txt ├── README.md ├── app/ │ ├── core/ │ │ ├── measurement.py ← Layer / Measurement 데이터 모델 │ │ ├── scale_calibrator.py ← 픽셀 ↔ mm 변환 │ │ ├── edge_detector.py ← OpenCV Canny + 수직선 프로파일 │ │ └── excel_exporter.py ← Pandas + openpyxl 저장 │ └── gui/ │ ├── main_window.py ← 좌 캔버스 / 우 테이블 레이아웃 │ ├── image_canvas.py ← 드래그&드롭, 클릭, 오버레이 │ ├── measurement_table.py ← QTableWidget 래퍼 │ └── scale_dialog.py ← 실제 길이 입력 다이얼로그 ├── examples/ │ ├── generate_sample.py ← 샘플 이미지 생성 스크립트 │ └── sample_section.png ← 테스트용 5-레이어 합성 단면 ├── tests/ │ └── test_core.py ← 8개 유닛 테스트 └── docs/ └── index.html ← 이 페이지 (GitHub Pages)

4 기술 스택

requirements.txt 기준

PyQt6
GUI 프레임워크
OpenCV
이미지 처리 & 엣지 검출
NumPy
배열 연산 & 수치 분석
Pandas
데이터프레임 & Excel 엔진
openpyxl
.xlsx 파일 생성 & 서식

5 테스트

핵심 모듈 유닛 테스트 8개 포함

bash pip install pytest pytest # 결과: 8 passed
테스트검증 내용
test_scale_calibrator_basic100px = 10mm → mm_per_pixel = 0.1
test_scale_calibrator_rejects_zero_length거리 0인 기준선 거부
test_scale_calibrator_rejects_non_positive_mm음수/0 mm 입력 거부
test_detect_layers_recovers_known_thicknesses합성 3-레이어 두께 복원 (±2px)
test_detect_layers_returns_empty_for_uniform균일 이미지 → 빈 결과
test_layers_from_boundaries_rebuilds_layers경계값에서 레이어 재구축
test_measurement_recompute_applies_mm_ratiomm 비율 적용 재계산
test_excel_export_roundtripxlsx 저장 → 재로드 데이터 일치

캔버스 조작 팁

입력동작
마우스 휠확대 / 축소
마우스 드래그 (탐색 모드)이미지 스크롤
Ctrl+O이미지 열기
Ctrl+SExcel로 저장
Ctrl+Q종료
Shift + 두 번째 클릭측정선 자유 각도 (수직 스냅 해제)
👤

Made by goycgo

제품설계 엔지니어
NX 단면 분석 자동화 프로그램 개발

@goycgo