Skip to content

FEKimseongeun/pid-piping-data-extraction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

P&ID 텍스트 추출 및 분류 시스템

P&ID (Piping & Instrumentation Diagram) 도면에서 Line Number, Equipment Number, P&ID Number 등을 AI 기반으로 자동 추출하고 분류하는 프로그램입니다.

🎯 주요 기능

  • AI 기반 텍스트 분류: 파인튜닝된 DeBERTa 모델로 P&ID 텍스트를 4가지 카테고리로 자동 분류

    • LINE: Line Number (배관 번호)
    • EQT: Equipment Number (장비 번호)
    • PID_NO: P&ID Drawing Number (도면 번호)
    • TEXT: 기타 텍스트
  • 배치 처리 & 엑셀 출력: 여러 페이지 자동 처리 후 시트별 분류된 엑셀 파일 생성

  • CLI & GUI 지원: 명령줄과 Tkinter GUI 모두 지원

🏗️ 시스템 아키텍처

P&ID PDF
    ↓
Power Automate (전처리)
├─ PDF → 페이지별 텍스트 추출 (C:/temp_ai경로에 추출)
└─ 각 페이지당 .txt 파일 생성
    ↓
STEP 1: AI 텍스트 분류
├─ Fine-tuned DeBERTa Model
│  (Base: microsoft/deberta-v3-base)
├─ txt 파일 배치 처리
└─ 4-Class Classification
    ↓
STEP 2: 좌표 기반 텍스트 추출
├─ 기준 페이지에서 좌표 탐색
├─ 상대 좌표 변환 (페이지 크기 호환)
└─ 모든 페이지에 적용하여 추출
    ↓
STEP 3: 최종 데이터 통합
├─ 분류별 시트 생성 (LINE, PID_NO, EQT, TEXT)
├─ 통합 시트 (ALL)
└─ 통계 시트 생성
    ↓
Excel 출력

🔧 설치 방법

1. 저장소 클론 및 가상환경 설정

git clone <repository-url>
cd <repository-name>
python -m venv .venv
.venv\Scripts\activate  # Windows

2. 패키지 설치

pip install torch transformers pandas openpyxl xlsxwriter PyMuPDF

3. 파인튜닝된 모델 배치

⚠️ 필수: 커스텀 파인튜닝된 DeBERTa 모델 필요

project_root/
├── models/
│   └── best_deberta_pid_model/
│       ├── config.json
│       ├── pytorch_model.bin
│       ├── tokenizer_config.json
│       └── vocab.txt

모델 정보:

  • Base: microsoft/deberta-v3-base
  • Task: 4-Class Sequence Classification
  • Training: P&ID 텍스트 라벨링 데이터로 파인튜닝
  • 참고: 모델 파일은 저장소에 포함되지 않음 (개인 자산)

4. Power Automate 전처리 설정

  • PDF를 페이지별 txt 파일로 변환
  • 출력 위치: C:\temp_ai\txt\
  • 파일명 형식: 1.txt, 2.txt, ...

💻 사용 방법

GUI 실행 (권장)

python run_gui.py
  1. PDF 파일 경로 선택
  2. 기준 텍스트 입력 (예: "LINE NO")
  3. 기준 페이지 번호 입력 (예: 1)
  4. 실행

CLI 실행

python run.py <PDF_PATH> <REFERENCE_TEXT> <REFERENCE_PAGE>

예시:

python run.py "C:\Documents\PID_Drawing.pdf" "LINE NO" 1

📁 프로젝트 구조

project_root/
├── pidmini/
│   ├── cfg.py         # 설정 (경로, 모델 옵션)
│   ├── model.py       # 모델 로딩
│   ├── pdf.py         # PDF 처리 (PyMuPDF)
│   └── steps.py       # 3단계 파이프라인
├── models/            # 파인튜닝 모델 (gitignore)
├── run.py             # CLI 실행
├── run_gui.py         # GUI 실행
└── README.md

📦 생성 파일

C:\temp_ai\ 디렉토리에 3개의 엑셀 파일 생성:

  • pid_text_output.xlsx: STEP1 분류 결과
  • result_pid_no.xlsx: STEP2 좌표 추출 결과
  • result_final.xlsx: 최종 통합 결과 (ALL, LINE, PID_NO, EQT, TEXT, Statistics 시트)

🔍 처리 흐름

  1. STEP1: txt 파일들을 읽어 DeBERTa 모델로 텍스트 분류
  2. STEP2: PDF에서 기준 좌표를 찾아 모든 페이지에 적용하여 데이터 추출
  3. STEP3: 분류 결과와 추출 데이터를 통합하여 최종 엑셀 생성

About

⭕ It is an AI-powered GUI program that automatically extracts Piping and Equipment Numbers from P&ID drawings.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages