📦 레포: kh20134/unlimited-ocr-llm-its (MIT, 업스트림 Baidu Unlimited-OCR 래퍼임)

1. 개요 및 배경

  • 현장에는 통행료 영수증, VMS 점검일지, 차종별 요금정산표 같은 종이·PDF 문서가 계속 쌓임
  • 사람이 눈으로 옮겨 적는 작업이 많고, 검색·집계가 어려움
  • OCR로 글자를 읽고 LLM으로 정리하면 표 JSON·요약·질의응답까지 자동화 가능하다고 판단했음
  • 초보자도 GPU·API 키 없이 끝까지 따라 해볼 수 있게 구성했음

2. Unlimited-OCR란

  • Baidu가 공개한 OCR 모델임 (MIT, Copyright (c) 2026 Baidu)
  • Hugging Face 모델 카드: baidu/Unlimited-OCR
  • 원본 레포: github.com/baidu/Unlimited-OCR
  • 긴 문서·여러 페이지 PDF를 마크다운(제목·문단·표)으로 한 번에 파싱하는 게 강점임
  • BF16 약 33억 파라미터, 가중치 약 6.8GB, 최대 32,768 토큰 문맥임

3. 왜 OCR 다음에 LLM인가

  • OCR 결과는 "글자"일 뿐, 의미 정리는 안 됨
  • LLM이 붙으면 "통행료가 얼마?", "통신 점검 결과는?" 같은 질문에 바로 답함
  • 표를 JSON으로 바꿔 DB·엑셀에 바로 넣을 수 있음
  • 모델 재학습은 하지 않음. 가중치는 그대로 호출만 함

4. 전체 구조

Unlimited-OCR + LLM 파이프라인 구조도
  • 현장 문서 → OCR 분기 → 마크다운 → LLM 후처리 → 결과 순서임
  • LLM은 OpenAI 호환 API, Ollama, 오프라인 데모 중 자동 선택함
OCR-LLM 처리 시퀀스 다이어그램

5. GPU 경로 vs 데모(픽스처) 경로

  • GPU 있음: 업스트림 Unlimited-OCR를 transformers로 로컬 실행함 (NVIDIA CUDA 전용)
  • 16GB 카드는 빠듯할 수 있고, 여러 페이지 PDF는 24GB 이상 권장임
  • GPU 없음: samples/fixtures/에 미리 적어 둔 마크다운을 읽어 이후 단계를 그대로 실행함
  • --backend auto만 GPU 없을 때 픽스처로 넘어감. --backend local은 이유를 알리고 멈춤
  • 픽스처는 사람이 적은 자리표시자라 실제 모델 출력이 아님을 명시했음

6. 초보 3단계 따라하기

1단계. 설치

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
  • .env는 비워둬도 됨. torch도 필요 없음

2단계. 샘플 실행

python -m ocr_llm_its run --input samples/toll_receipt.png --task summarize
python -m ocr_llm_its run --input samples/settlement_table.pdf --task extract
python -m ocr_llm_its run --input samples/inspection_log.png --task qa --question "통신 점검 결과는?"

3단계. 결과 확인

  • 출력은 JSON이고 result에 요약·구조화 객체·답변이 들어감
  • ocr.backend가 fixture면 큰 모델 없이 샘플을 읽은 것임
  • llm.backend가 offline이면 API 대신 규칙 기반 정리기가 동작한 것임

7. 샘플: 통행료 영수증

합성 통행료 영수증 샘플
  • 합성 견본임. 실제 징수 기록 아님
  • 키 없이 summarize 결과: "문서 제목은 통행료 영수증 … 영업소 서울요금소, 차로 3, 차종 1종 (승용), 통행료 3,200원, 결제수단 하이패스"

8. 세 가지 작업

  • extract: 표와 필드를 fields·tables JSON으로 뽑음 → 정산 집계에 활용
  • summarize: 핵심 숫자를 포함한 한국어 요약 → 보고용
  • qa: 문서 본문에 있는 내용만 근거로 답변 → 점검일지 조회용

9. Gradio 화면

python -m ocr_llm_its ui
  • 브라우저에서 http://127.0.0.1:7860 열면 됨
  • 파일 올리고 작업 고르면 결과를 화면에서 바로 확인 가능함. 명령어 몰라도 됨

10. LLM 연결 설정

  • OpenAI 호환: OPENAI_API_BASE, OPENAI_API_KEY (기본 모델 gpt-4o-mini)
  • 로컬 LLM: ollama pull qwen2.5:7b 후 --llm ollama
  • auto 순서: API 키 → Ollama → 오프라인 데모
  • 현장 문서가 외부로 나가면 안 되는 경우 Ollama 로컬 구성이 안전함

11. 출처 및 라이선스

  • Baidu Unlimited-OCR (MIT, Copyright (c) 2026 Baidu): GitHub · Hugging Face
  • 논문: Unlimited OCR Works
  • 가중치와 모델링 코드는 업스트림 것이고, 이 레포는 래퍼(MIT)임

12. 한눈에 정리

구분내용
OCR 모델baidu/Unlimited-OCR (MIT, 약 6.8GB)
GPU 있음로컬 transformers, CUDA 전용
GPU 없음픽스처 마크다운으로 데모
LLMOpenAI 호환 / Ollama / 오프라인
작업extract · summarize · qa
화면Gradio (127.0.0.1:7860)
테스트GPU 없이 30개 통과
레포kh20134/unlimited-ocr-llm-its