← 목록

AI Document Processing Pipeline (OCR + LayoutLM)

인보이스 및 물류 문서에서 구조화된 데이터를 자동 추출하는 end-to-end AI 문서 처리 파이프라인 구축

2025-04-18AIAWSDevOpsPython

Overview

인보이스 및 물류 문서에서 구조화된 데이터를 자동으로 추출하는 end-to-end AI 문서 처리 파이프라인을 구축했다.

문서 수집, 전처리, OCR, 문서 이해, 구조화된 데이터 추출까지 전 과정을 자동화하여 클라우드 환경에서 확장 가능하고 효율적인 문서 처리를 가능하게 했다.


Architecture

PDF Upload (S3)
    ↓
Preprocessing (PyMuPDF, OpenCV)
    ↓
OCR (EasyOCR / Tesseract)
    ↓
Document Understanding (LayoutLM)
    ↓
Inference (SageMaker / Local)
    ↓
JSON Output
    ↓
API Serving (FastAPI)

Tech Stack

AI / ML

Data Processing

Backend

Cloud / Infrastructure

DevOps

Monitoring


My Role


Key Features

End-to-End Automation 문서 업로드부터 구조화된 JSON 출력까지 전 과정 자동화

Scalable Architecture AWS(S3, ECS, Lambda)를 활용한 클라우드 네이티브 설계

AI-Based Document Understanding LayoutLM을 활용한 key-value 추출

Flexible OCR Pipeline EasyOCR, Tesseract 멀티 엔진 OCR 지원

API-Based Integration 외부 연동을 위한 FastAPI 기반 추론 API 제공


Challenges & Solutions

Problem 1: OCR 정확도 문제

노이즈가 많거나 품질이 낮은 PDF에서 OCR 정확도가 낮은 문제가 발생했다.

Solution

# 이미지 전처리 예시
import cv2
import numpy as np
 
def preprocess_image(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    denoised = cv2.fastNlMeansDenoising(gray, h=10)
    _, thresh = cv2.threshold(denoised, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    return thresh

Problem 2: 모델 추론 성능 문제

대용량 모델로 인해 추론 속도가 느린 문제가 발생했다.

Solution


Problem 3: 데이터 어노테이션 품질 문제

학습 데이터의 레이블링이 일관되지 않는 문제가 있었다.

Solution


Results


What I Learned


배운 점

모델을 붙인 순간부터 이건 AI 문제가 아니라 파이프라인 문제가 됐다. 전처리에서 이미지가 어떻게 들어가는지, OCR 결과가 어떤 좌표계로 넘어가는지, 추론 결과를 어디에 어떤 형태로 쌓는지가 정확도만큼 중요했다. 모델은 이 긴 흐름의 한 칸이었다.

단계를 나눠 둔 덕분에 나중에 한 칸씩 교체할 수 있었다. OCR을 Tesseract에서 PaddleOCR로 바꾼 PaddleOCR 도입기가 가능했던 것도 출력 포맷만 맞추면 되는 구조였기 때문이다.

왜 OCR과 NER을 한 모델로 합치지 않았는지는 OCR과 NER을 왜 나눴나에 정리했고, 이 파이프라인을 숫자로 판단할 수 있게 만든 과정은 Document AI 성능 측정 체계 구축에 있다.


이어 읽기