Nanonets-OCR-s는 단순 OCR을 넘어 문서의 레이아웃, 시맨틱 구조, 시각적 요소까지 모두 인식해 구조화된 마크다운 형태로 출력하는 이미지-텍스트 변환 모델입니다.
- 기반 모델: Qwen2.5-VL-3B-Instruct 기반 파인튜닝
- 출력 형태: Markdown, HTML, LaTeX
- 활용 목적
- 계약서, 양식, 설문지 등 다양한 포맷을 LLM 친화적으로 정제
- 정보 추출, 검색, 문서 분류 등 downstream 작업에 최적화
- Web UI, API, PDF 변환 파이프라인 등에 연동 가능
핵심 기능 정리
기능명 | 설명 |
---|---|
📐 수식 인식 | 수학 수식, 공식 등을 LaTeX 형식으로 변환$...$ 또는 $$...$$ |
🖼️ 이미지 설명 생성 | <img> 태그에 이미지 성격/스타일/내용 등을 자동 기술 |
✍️ 서명 인식 | 서명을 감지하고 <signature> 태그로 구조화 |
💧 워터마크 추출 | 워터마크 텍스트를 감지하여 <watermark> 태그에 정리 |
☑ 체크박스 인식 | ☑, ☐, ☒ 등의 유니코드 기호로 변환 (설문지 등에서 유용) |
📊 표 구조 추출 | 복잡한 테이블도 Markdown 또는 HTML 형태로 정확히 변환 |
📄 페이지 번호 감지 | 페이지 번호, 구분선 등을 텍스트와 분리하여 구조화 처리 |
📚 문서 태깅 | 각 요소에 의미 있는 태그를 붙여 문서 정리 및 검색 효율화 |
활용 방법
1. Python (transformers 기반)
from transformers import AutoProcessor, AutoModelForVision2Seq
from PIL import Image
import torch
model_id = "nanonets/Nanonets-OCR-s"
# 모델 및 프로세서 불러오기
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForVision2Seq.from_pretrained(model_id)
# 이미지 불러오기
image = Image.open("sample_document.jpg")
pixel_values = processor(images=image, return_tensors="pt").pixel_values
# 모델 추론
with torch.no_grad():
generated_ids = model.generate(pixel_values)
# 결과 디코딩
markdown_output = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(markdown_output)
2. vLLM 기반 활용
- OpenAI 호환 API 서버로 배포 후 사용 가능
/v1/completions
또는/v1/chat/completions
API에서 이미지 기반 요청 가능- 대규모 문서 자동 변환에 적합
3. docext 패키지 활용 (Web App/CLI 지원)
- docext 설치
pip install docext
- CLI 예제
docext process --input path/to/document.pdf --output structured_output.md
- 문서 구조화 및 시맨틱 마크다운 생성까지 일괄 처리
활용 사례
1. 계약서/리포트/포맷 양식 자동 구조화
- 복잡한 구조(서명/표/체크박스)를 LLM 친화 포맷으로 자동 정리
- LLM 기반 요약/분류/검색의 사전 처리로 활용
2. OCR + LLM 워크플로우
- PDF/이미지 → Nanonets-OCR-s → 마크다운 → LLM 후처리 (예: GPT로 요약)
- 레스토랑 메뉴/설문지/연구 논문/사전 등 다양하게 적용 가능
3. 문서 아카이브 변환
- Word, PowerPoint 등의 레거시 문서를 구조화된 포맷으로 변환
- 이미지/표/수식 분리 및 재사용 가능 형태로 저장
성능 및 한계
✅ 장점
- 기존 Marker, Docling 등의 마크다운 변환기보다 정확한 시맨틱 분석
- 수식, 체크박스, 워터마크, 서명 등 시각적 요소도 정제 추출
- HTML/Markdown 태그 조합으로 다양한 후처리에 적합
⚠️ 한계
- GPU 없이 로컬에서 사용 시 속도 느림 (예: GTX 1080 기준 페이지당 5분 이상)
- 비영어 텍스트 성능은 영어보다 낮으나, 일부 멀티링구얼 지원(Qwen 기반)
- 완벽한 문서 파서 대체는 어려움 (후처리에 LLM 조합 필요)
비교: Marker / Docling
항목 | Marker | Docling | Nanonets-OCR-s |
---|---|---|---|
수식 처리 | 일부 깨짐 | LaTeX 미지원 | 인라인/블록 모두 정확 |
이미지 설명 | 거의 없음 | 약간 있음 | <img> 로 상세 묘사 |
서명/워터마크 | 미지원 | 부분 지원 | <signature> , <watermark> |
체크박스 | 미지원 | 미지원 | ☑, ☐, ☒ 등으로 변환 |
테이블 처리 | 우수 | 중간 | 복잡한 HTML 테이블도 정확 |
출력 포맷 | Markdown | HTML 중심 | Markdown+HTML 하이브리드 |
향후 활용 아이디어
- PDF to Markdown 클라우드 서비스 구축 (Cloud Run 기반)
- 사용자 업로드 → 구조화 마크다운 반환
- 결과물 예: animate.pdf → 완벽하게 태깅된 목차/그림 설명/구글 디지털화 문구 등 추출
- LLM 워크플로우 연계
- OCR 결과 → GPT 기반 내용 요약, 의도 분류, 핵심 항목 추출 등
- PowerShell 자동화 예시
- 로컬 스크립트를 통해 PDF → 마크다운 일괄 처리 가능
GitHub/Colab 리소스
- Hugging Face 모델: https://huggingface.co/nanonets/Nanonets-OCR-s
- GitHub: https://github.com/nanonets/docext
자주 묻는 질문 (FAQ)
Q1. 이미지 자체도 추출 가능한가요?
현재 모델은 이미지 설명 생성(img 태그)은 가능하지만 이미지 파일 추출 기능은 별도로 필요합니다. PDF에서 이미지 추출은 pdfimages, poppler, PyMuPDF 등을 이용하세요.
Q2. 레스토랑 메뉴 PDF를 JSON 스키마로 추출할 수 있나요?
가능은 하지만, 완전한 JSON 형태를 위해서는 후처리 LLM 조합이 필요합니다. 메뉴 항목/가격 구조를 LLM이 이해하게 하려면, Markdown → JSON 변환 스크립트 또는 프롬프트 기반 가공이 필요합니다.
Q3. 다국어 지원 성능은 어떤가요?
영어 중심으로 훈련되었지만 Qwen2.5-VL 기반이므로 일부 중국어, 유럽어 등은 가능성 있음. 다만 일본어/한글 손글씨 등은 전통 OCR 대비 정확도 낮을 수 있습니다.
Q4. Marker나 Docling보다 더 나은 점은?
수식/체크박스/서명/이미지 설명 등 시맨틱 요소의 세밀한 추출은 Nanonets-OCR-s가 가장 우수합니다. 특히 Fortran 논문이나 수식-코드 혼합 문서에 강점을 보입니다.
Nanonets-OCR-s는 단순한 텍스트 인식 모델을 넘어, 문서의 의미, 구성, 구조를 이해하여 정제된 마크다운으로 변환하는 데 특화된 모델입니다. 문서 자동화, 아카이빙, LLM 연계 등에 매우 유용하며, 사용자의 다양한 도큐먼트 처리 니즈를 충족시킬 수 있습니다. 추가로 Markdown 외에도 DocBook, JSON-LD, TEI 등의 표준 포맷을 지원하는 후처리 도구와 연계하면 더 강력한 문서 처리 파이프라인을 구성할 수 있습니다.
댓글