가용 알고리즘 분석
두 PDF(스캔 이미지, 총 448p)를 처리해 규칙 DB를 만들고 도면을 판정하기까지 사용한 알고리즘과, 대안·고도화 방안입니다.
파이프라인 단계별 구현
| 단계 | 파일 | 알고리즘 | 상태 |
|---|---|---|---|
| 1. PDF → 이미지 + OCR | tuning_ai/ocr_pdf.py | PyMuPDF 150dpi 렌더 → RapidOCR(PP-OCRv6 검출 + 한국어 PP-OCRv4 인식, ONNX CPU). 방향분류기(cls)를 끄면 굵은 글씨 180° 오인식이 사라짐. 페이지별 JSON(박스·텍스트·점수), 재개 가능. | 완료 (2025: 202p, 2026: 246p) |
| 2. 그림 영역 검출·분류 | tuning_ai/figures.py | OCR 박스 마스킹 → HSV 채도 마스크 ∪ (어두운 픽셀 ∩ Canny 엣지밀도) → 모폴로지 close/open → 연결요소 → 병합 → 흰 세로공백으로 나란한 그림 분리. 영역별 채도평균·엣지밀도·흰비율·Hough 수평/수직선 비율·평탄비율로 photo/drawing/table/diagram/decoration 분류. 머리말 장식 띠 제외. | 완료 |
| 3-A. 2025 사례집 구조 파싱 | tuning_ai/parse_2025.py | 테마당 1페이지 레이아웃 규칙: 머리말 텍스트 → 분류(자유/승인/불가)·차종, THEME 번호, 우측 장치분류, 큰 글씨(h≥52px) 제목 / 작은 부제, '장착의 예' 아래 필드 상태기계(관련근거/경미한 장치 기능/참고사항/허용범위). 꼬리말에서 편·책 페이지. 역순 스캔 대응. | 완료 191항목 |
| 3-B. 2026 편람 표 파싱 | tuning_ai/parse_2026.py | 고정 임계(g<225)+수평 open(0.12W)으로 얇은 회색 괘선 검출 → 행 경계. 좌측 라벨열(x<0.21W)의 텍스트로 필드 결정(제목/코드/개요/필요서류/구조/행정사항/기타/튜닝후내역/승인사례/연혁). 한 행에 라벨 2개 이상이면 라벨 y 중간점에서 분할(괘선 누락 보정). '제목' 행에서 새 항목 시작, 페이지 넘김 연속. 코드 정규식 (\d{3})(장치|구조). 소표(신청항목/차체크기/최대안전경사각도) 별도 추출. 우측 세로 글씨로 장치 분류. | 완료 80항목 |
| 4. 도면 인식 | tuning_ai/drawing.py | PDF/이미지 200dpi + 2400px 업스케일 → 0°/90°/270° OCR 후 좌표 역변환·중복제거(세로 치수 대응). 제원 라벨 정규식 21종 → 같은 행(|Δcy|≤0.7h) 숫자 토큰을 '변경전/변경후' 머리글 x좌표 기준으로 열 배정, 단위 정규화(m→mm, t→kg). 차명/차종/형식/차대번호/원동기형식/연료 추출. 뷰: 잉크 마스크(텍스트 제외) 큰 팽창 연결요소 + figures 검출기 병합 → 캡션(정면도/측면도/변경전/후) 연결, 뷰 내부 3~5자리 숫자를 치수로 수집. | 완료 (합성 도면 검증) |
| 5. 판정 엔진 | tuning_ai/judge.py · rules.py | 문자 바이그램 Jaccard/포함도로 항목 매칭 → 공통 규칙(치수·총중량·축중 한계, 총중량 산식, 차량중량 증가 한도, 허용차, 높이 증가→경사각) → 항목표 차체크기 대조(언급된 제원만) → 구조/행정 조건 체크리스트(제한 문구 자동 경고) → 필요서류 키워드 존재 검사 → 6등급 판정 + 출처 페이지. | 완료 |
| 6. 웹 탐색기 | web/ (Next.js 16) | 서버 컴포넌트가 out/ 의 KB JSON을 직접 읽음(재생성 시 즉시 반영). 원문 페이지·그림은 /api/asset 로 스트리밍. /api/judge 가 파이썬 CLI를 spawn. | 실행 중 |
OCR 엔진 대안
- RapidOCR(현재, CPU ONNX, 페이지당 10~30s) — 무설치·경량
- PaddleOCR PP-OCRv5 서버 모델 — 정확도↑, GPU 권장
- EasyOCR — torch 의존(≈2GB), 한국어 지원
- Tesseract kor — 표/세로글씨 약함
- Claude/GPT 비전 API — 표 구조·문맥 이해 최고, 건당 비용·외부전송
레이아웃/표 인식 대안
- 괘선 기반 행 분할(현재) — 단순·견고, 괘선 누락 시 라벨 중간점 보정
- PP-Structure / TableTransformer — 셀 단위 복원, 병합셀 처리
- LayoutLMv3 / Donut — 문서 이해 모델 파인튜닝(라벨 데이터 필요)
도면 인식 대안
- 치수선 검출: Hough + 화살표 템플릿 매칭 → 숫자와 치수선 연결(현재는 뷰 내부 숫자 수집)
- CAD 원본(DWG/DXF)이 있으면 ezdxf 로 치수 엔티티 직접 읽기 — OCR 불필요, 정확도 100%
- YOLO 기반 뷰/표/제원표 영역 검출기 학습(샘플 도면 50~100장)
- 변경전·후 뷰의 실루엣 차분으로 변경 부위 하이라이트(윤곽선 XOR)
판정 로직 고도화
- 규칙 DSL(YAML)로 항목별 수치 조건 명세 → 자동 검사 확대(현재 공통 규칙만 자동)
- LLM 보조: 조건 문장 ↔ 도면 텍스트 의미 대조, 결과는 근거 페이지와 함께 제시
- 사례 기반 추론: 승인사례 그림과 입력 뷰의 이미지 임베딩(CLIP) 유사도
- 제원관리번호/차대번호 → 자기인증 제원 DB 조회로 비교제원 자동 확인
한계와 주의
- OCR 오인식(예: 튜닝→투닝, 윈치→원치)이 KB 텍스트에 남아 있습니다. 원문 페이지 이미지를 항상 함께 제공합니다.
- 허용차 표(별표33) 수치는 OCR 판독값으로, 법령 원문과 대조가 필요합니다.
- 판정은 치수·중량 같은 정량 규칙만 자동이며 구조 조건(골조 강성, 절개 범위 등)은 체크리스트로 제시합니다 — 최종 판단은 검사원의 몫입니다.
- 합성 도면으로만 검증했으므로 실제 신청 도면(CAD 출력물, 손도면, 사진 첨부형)으로 추가 튜닝이 필요합니다.