■ TEXT 정보 가져오기
도면 PDF는 일반 텍스트 문서와 달리 글자(Text Element)로 저장된 경우와 이미지(스캔본/캐드 선)로 저장된 경우가 있습니다. 따라서 도면 PDF의 상태에 따라 크게 두 가지 방법으로 나뉩니다.
1. 텍스트 데이터가 살아있는 PDF인 경우
캐드(CAD) 프로그램에서 바로 PDF로 변환했거나, 마우스로 드래그했을 때 글자가 선택되는 PDF라면 pdfplumber가 가장 정확합니다. 글자의 위치(좌표) 정보까지 함께 가져올 수 있어 도면 분석에 유리합니다.
라이브러리 설치
| pip install pdfplumber |
파이썬 코드
import pdfplumber
def extract_text_from_pdf(pdf_path):
with pdfplumber.open(pdf_path) as pdf:
for i, page in enumerate(pdf.pages):
print(f"--- {i+1} 페이지 텍스트 추출 ---")
# 1. 단순 텍스트 추출
text = page.extract_text()
if text:
print(text)
else:
print("추출된 텍스트가 없습니다. (이미지 기반 PDF일 가능성 있음)")
# 2. 도면 내 표(Table) 데이터가 있다면 표 형태로 추출도 가능
# tables = page.extract_tables()
# for table in tables:
# print(table)
# 사용 예시 (본인의 PDF 경로 입력)
extract_text_from_pdf("drawing.pdf")
2. 스캔한 PDF 또는 이미지 형태인 경우
만약 도면을 스캔했거나 글자가 선(Line)으로 깨져있어서 드래그가 안 된다면, PDF를 이미지로 변환한 뒤 OCR(광학 문자 인식)을 진행해야 합니다.
라이브러리 설치
| pip install pdf2image pytesseract pillow |
pytesseract를 쓰려면 PC에 Tesseract OCR 프로그램이 설치되어 있어야 하며, pdf2image를 쓰려면 poppler라는 프로그램이 PC에 설치되어 있어야 합니다
[Tesseract] 설치
글자 인식 프로그램을 만들고 싶어 알아보던 중 구글 비전과 Tesseract-orc를 두고 고민하던 중 Tesserac...
blog.naver.com
파이썬 코드
from pdf2image import convert_from_path
import pytesseract
# Tesseract 설치 경로 설정 (Windows의 경우 필수, Mac/Linux는 생략 가능)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def extract_text_from_image_pdf(pdf_path):
# PDF를 이미지로 변환 (dpi를 높여야 도면 글자가 잘 보입니다)
pages = convert_from_path(pdf_path, dpi=300)
for i, page in enumerate(pages):
print(f"--- {i+1} 페이지 OCR 추출 ---")
# 한국어와 영어를 동시에 인식하도록 설정 ('kor+eng')
text = pytesseract.image_to_string(page, lang='kor+eng')
print(text)
# 사용 예시
extract_text_from_image_pdf("scanned_drawing.pdf")
- 정확한 위치의 표제란(Title Block) 정보만 뽑고 싶다면? pdfplumber에서 page.within_bbox((x0, y0, x1, y1)).extract_text() 함수를 사용하면, 도면 오른쪽 아래 표제란 좌표를 지정해 그 안의 텍스트만 쏙 골라낼 수 있습니다.
- 텍스트가 뒤집혀 있거나 돌아가 있다면? 도면 특성상 글자가 세로로 누워있는 경우가 많습니다. 이럴 때는 OCR 적용 전 이미지를 회전시키거나, OpenCV 같은 라이브러리로 전처리를 해주어야 인식률이 올라갑니다.
■ Sample
도면 특유의 복잡한 구조 때문에 표제란 정보, 주기 사항(NOTE), 그리고 치수 데이터가 줄바꿈과 함께 흩어져 있는 상태 입니다. 이미 텍스트화된 데이터나 pdfplumber 등으로 추출한 원본 데이터를 파이썬으로 가독성 있게 분류하고 정제하는 코드입니다. 도면 텍스트 분석에 가장 많이 쓰이는 정규표현식(re)을 활용한 방법
도면 데이터 정제 및 분류 파이썬 코드
import re
# 1. 샘플 데이터 입력 (제공해주신 파일 내용)
raw_data = """
--- PAGE 1 ---
A B C D E F 8 7 8 7 $26.00 21.00 A 3.85 24.00 6 5 4 3 2 단면 A-A 6 5 1.00 23.00 A 0.20 TRIM
The following table:
" 표시 거칠기 201 곽도","Deburri As machined","시 도 수집 *** *** **","이름",,,"HIJN 15","20241216","Quartz Torch Bonnet",,,,"A" "RA",,,,"Quartz","002-SI-04-A","A3",," 10F1 ","4","3","2",
NOTE
1. 명시 하지 않은 세부 사항은 입체 사양에 따르도록 하여 기능상 문제 없도록 해야 한다.
2. 지정하지 않은 공자는 일반 공차는 공자표에 준할 것.
3. 정의되지 않은 Bending부 각도는 90 ±0.5° 일 것.
4. 정의되지 않은 지수는 CAD DATA에 준할 것.
5. 단차 날카로운 부위, 유해한 흡, 거친 표면, Burr 없을 것.
G. 다음과 같은 경우에는 연구소 승인을 득할 것.
1) 양산 전
2) 기 승인된 양산제품의 변경이 있을시
B C D Π F
"""
def parse_drawing_text(text):
print("===== 1. 도면 정보 (표제란) 추출 =====")
# 도면 번호 패턴 (예: 002-SI-04-A)
doc_no = re.search(r'\d{3}-\w+-\d{2}-\w', text)
if doc_no:
print(f"📌 도면 번호: {doc_no.group()}")
# 도면명 패턴 (영문 명칭 추출)
doc_name = re.search(r'"([^"\n]*Torch[^"\n]*)"|"(Quartz[^"\n]*)"', text)
if doc_name:
# 매칭된 그룹 중 None이 아닌 것 선택
name = next(g for g in doc_name.groups() if g is not None)
print(f"📌 도 면 명 : {name.strip()}")
# 날짜 패턴 (YYYYMMDD)
date_match = re.search(r'"(\d{8})"', text)
if date_match:
print(f"📌 제 작 일 : {date_match.group(1)}")
# 재질 패턴
material_match = re.search(r'"(Quartz)"', text)
if material_match:
print(f"📌 재 질 : {material_match.group(1)}")
print("\n===== 2. 주기 사항 (NOTE) 추출 =====")
# NOTE 뒤부터 끝 또는 특정 문자 전까지 추출
note_section = re.search(r'NOTE([\s\S]*?)(?=B C D Π F|$)', text)
if note_section:
notes = note_section.group(1).strip().split('\n')
for note in notes:
if note.strip():
print(note.strip())
print("\n===== 3. 주요 수치 및 단면 정보 =====")
# '단면 X-X' 형태 추출
section_match = re.findall(r'단면\s*[A-Z]-[A-Z]', text)
if section_match:
print(f"🔍 포함된 단면도: {', '.join(section_match)}")
# 코드 실행
parse_drawing_text(raw_data)
💻 출력 결과
코드를 실행하면 복잡했던 텍스트가 아래와 같이 깔끔하게 정리되어 출력됩니다.
| ===== 1. 도면 정보 (표제란) 추출 ===== 📌 도면 번호: 002-SI-04-A 📌 도 면 명 : Quartz Torch Bonnet 📌 제 작 일 : 20241216 📌 재 질 : Quartz ===== 2. 주기 사항 (NOTE) 추출 ===== 1. 명시 하지 않은 세부 사항은 입체 사양에 따르도록 하여 기능상 문제 없도록 해야 한다. 2. 지정하지 않은 공자는 일반 공차는 공자표에 준할 것. 3. 정의되지 않은 Bending부 각도는 90 ±0.5° 일 것. 4. 정의되지 않은 지수는 CAD DATA에 준할 것. 5. 단차 날카로운 부위, 유해한 흡, 거친 표면, Burr 없을 것. G. 다음과 같은 경우에는 연구소 승인을 득할 것. 1) 양산 전 2) 기 승인된 양산제품의 변경이 있을시 ===== 3. 주요 수치 및 단면 정보 ===== 🔍 포함된 단면도: 단면 A-A |
만약 이런 PDF 파일이 수백 장이 넘는다면, 위의 코드 구조를 바탕으로 pdfplumber를 연동하여 도면 번호, 도면명, 주기사항을 자동으로 엑셀(.csv)에 한 줄로 저장하는 자동화 프로그램을 쉽게 구축할 수 있습니다.도면 PDF 파일에서 치수(Dimension)와 공차(Tolerance)에 관련된 값들을 골라내어 정리 가능 합니다.도면 텍스트에서 추출된 원본 데이터 중 수치와 기호(±, °, $ 등)가 포함된 항목들을 매칭 가능 합니다.
도면에서 치수(Dimension)와 공차(Tolerance) 데이터를 추출하면, 단순히 숫자를 보는 것을 넘어 제조업 및 엔지니어링 관점에서 매우 강력한 자동화 분석들을 수행할 수 있습니다. 도면 분석 시스템을 구축할 때 이 데이터로 할 수 있는 핵심 비즈니스 가치는 다음과 같습니다.

1. 제조 원가 및 견적 자동 계산 (Cost Estimation)
치수는 부품의 부피와 직결됩니다.
- 원자재 비용 산출: 추출된 최대 외곽 치수(가로 X 세로 X 높이)를 바탕으로 제품을 만드는 데 필요한 원소재(Raw Material)의 블록 크기와 무게를 자동으로 계산합니다.
- 가공 공정 예측: 공차가 매우 타이트한 곳(예: +- 이하)이 많을수록 정밀 가공(연삭, 호닝 등)이나 고가의 장비가 필요하므로 가공 공정 시간과 불량률을 예측하여 제품 견적을 자동으로 산출할 수 있습니다.
2. QC/QA 검사 성적서 자동 생성 (Inspection Sheet Automation)
제조업에서 제품을 만든 후 도면 치수대로 잘 나왔는지 검사하는 과정입니다.
- 검사 항목 자동 추출: 도면 내 모든 치수와 공차를 파싱하여 품명, 기준치수, 상한공차(+), 하한공차(-)가 정리된 품질 검사 성적서(Inspection Sheet) 양식을 엑셀로 1초 만에 자동 생성합니다.
- 합격/불량 자동 판정: 3D 측정기나 버니어 캘리퍼스로 측정한 실제 제품 데이터(Measured Value)를 입력하면, 추출된 공차 범위를 벗어났을 때 자동으로 빨간불(불량)을 띄우는 시스템을 만들 수 있습니다.
3. 공차 누적 분석 (Tolerance Stack-up Analysis)
단품 도면이 여러 개 모여 하나의 조립품(Assembly)이 될 때 아주 중요한 분석입니다.
- 조립 간섭 예측: 각 부품의 치수와 공차가 합쳐졌을 때, 최악의 조건(Worst Case)에서 부품끼리 서로 끼여서 조립이 안 되거나 너무 헐거워지지 않는지 파악할 수 있습니다.
- 수백 개의 도면 치수를 사람이 일일이 계산하지 않고, 파이썬 알고리즘을 통해 조립 후 최종 유격이 통계적으로 몇 % 확률로 불량이 날지(RSS 분석 등) 시뮬레이션할 수 있습니다.
4. 도면 변경점 및 이력 관리 (Revision Control)
도면이 업데이트(설계 변경)되었을 때 유용합니다.
- 바뀐 치수 추적: 구버전 도면 텍스트와 신버전 도면 텍스트를 비교하여 "어떤 치수가 얼마에서 얼마로 변경되었는지", "공차가 더 엄격해졌는지"를 자동으로 찾아내어 생산팀과 구매팀에 공유할 수 있습니다.
5. 가공 난이도 평가 및 공장 매칭 (Manufacturing Feasibility)
- 제조 가능성 검토: 공차 정보(±0.5인지 ±0.005인지)를 보고 이 부품이 일반 시제품 가공 수준인지, 반도체나 우주항공 급 초정밀 가공 수준인지 난이도를 분류합니다. 이를 통해 사내의 어떤 장비에 배정할지, 혹은 어느 외주 가공업체에 맡기는 게 적합할지 자동으로 필터링할 수 있습니다.
'업무 자동화 > python' 카테고리의 다른 글
| PDF를 DXF로 변환 하기 (0) | 2026.06.19 |
|---|---|
| 이미지 관리 프로그램 # 2 (0) | 2026.06.14 |
| 아이폰 사진 속성 정보 가져오기 (0) | 2026.06.13 |
| 이미지 관리 프로그램 # 1 (1) | 2026.06.12 |
| Get dimensions from a Creo model #2 (1) | 2025.09.18 |