datalab-to/indra

1M param OCR model - runs on CPU, 15x faster than tesseract, close to 1B+ param models in accuracy

Indra OCR이란?

Indra OCR은 CPU에서 실행되는 초소형(약 1 M 파라미터) 광학 문자 인식 모델입니다. 최대 초당 49페이지(4개의 x86 vCPU에서 페이지당 약 230 ms)의 속도로 PDF와 이미지를 읽고 결과를 마크다운, 일반 텍스트 또는 상세한 레이아웃 정보가 포함된 JSON으로 출력합니다.


주요 기능

  • 속도 – 동일한 하드웨어에서 Tesseract/PaddleOCR보다 11~17배 빠릅니다.
  • 정확도 – OmniParseBench 헤드라인 점수 62.1로 PaddleOCR의 전체 파이프라인(58.4)을 능가합니다.
  • 레이아웃 인식 – 모든 줄과 블록에 대한 경계 상자, 블록 레이블(제목, 표, 캡션, 각주 등) 및 읽기 순서.
  • 하이브리드 PDF 처리 – PDF의 기본 텍스트 레이어가 품질 검사를 통과하면 사용하고, 그렇지 않으면 OCR로 대체하여 작업을 절약합니다.
  • 작은 용량 – 약 18 MB ONNX 모델, PyTorch 불필요, ONNX Runtime, OpenCV 및 pypdfium2로 실행.
  • 다국어 OCR – 라틴어, 키릴 문자, 그리스어, 데바나가리, 벵골어, 중국어(간체 및 번체). 디지털 PDF는 텍스트 레이어를 통해 모든 문자를 지원합니다.
  • 선택적 수학 지원 – --math 플래그는 LaTeX 스타일 인라인 수학을 출력하는 분류기와 두 번째 인식기를 추가합니다.
  • 로컬 뷰어 – indra-ocr-viewer는 오버레이된 상자, 마크다운, JSON 및 타이밍이 포함된 페이지를 표시합니다.

빠른 시작(CLI)

pip install indra-ocr               # 패키지 설치
indra-ocr paper.pdf                # 마크다운을 표준 출력으로
indra-ocr *.pdf --out results/     # 파일당 .md, 모든 코어 사용
indra-ocr scan.png --format json   # 줄, 상자, 신뢰도가 포함된 JSON
indra-ocr-viewer                   # http://localhost:8765 열기

첫 실행 시 Hugging Face에서 ONNX 모델(약 18 MB)을 다운로드합니다.


Python API(기본 예제)

import indra_ocr
conv = indra_ocr.load(threads=4)          # 자동 모드(텍스트 레이어 + OCR)
for i, page in conv.convert("paper.pdf"):
    print(page.markdown)                   # 제목, 표 등이 포함된 마크다운
    print(page.blocks)                     # 레이블이 있는 레이아웃 블록 목록

일괄 변환에는 indra_ocr.convert_many([...], cores=None)을 사용합니다. CPU 코어당 하나의 워커를 생성합니다.


출력 구조

  • markdown – 서식이 지정된 텍스트(제목, 목록, 표는 HTML). --keep-furniture를 사용하지 않으면 머리글/바닥글은 생략됩니다.
  • text – 일반 텍스트, 감지된 각 줄마다 한 줄.
  • lines – Line(box, text, confidence) 객체 목록.
  • blocks – label, bbox, text가 있는 레이아웃 블록, 읽기 순서.
  • source – text(PDF 레이어), ocr, hybrid 또는 error.
  • timings – 단계별 밀리초 및 총계.
  • rotation, skew, 처리 경로를 설명하는 짧은 note와 같은 추가 메타데이터.

Indra OCR과 관리형 서비스 사용 시기

Indra OCR은 깨끗한 인쇄 문서에서 CPU 전용 속도가 필수적인 경우에 탁월합니다. 적합하지 않은 경우:

  • 셀 병합 또는 행 걸침이 있는 복잡한 표.
  • 손으로 쓴 텍스트.
  • OCR 목록 외부의 문자(아랍어, 히브리어, 태국어, 일본어, 한국어) – 이러한 문자는 PDF 텍스트 레이어를 통해서만 작동합니다.
  • 매우 저하되었거나 저해상도 스캔.
  • 세로 텍스트, 배너 너비 페이지, 엔지니어링 도면 레이블 또는 200 dpi에서 100 MP를 초과하는 페이지. 이러한 경우 저자는 Datalab 관리 플랫폼을 통해 더 높은 정확도의 GPU 기반 모델 Chandra를 권장합니다.

라이선스 및 상업적 사용

  • 코드 – Apache 2.0.
  • 모델 가중치 – 수정된 OpenRAIL-M(연구, 개인 사용 및 수익 2천만 달러 미만의 스타트업 무료). Datalab API와 경쟁하는 상업적 사용에는 별도 라이선스가 필요합니다(가격 페이지 참조).

설치 참고 사항

pip install indra-ocr                     # 안정 버전
# 또는 최신 GitHub 버전
pip install git+https://github.com/datalab-to/indra.git
# 선택적 Tesseract 비교 지원
pip install "indra-ocr[tesseract]"

Python 3.10+, Linux(x86_64 및 aarch64) 및 macOS(Apple silicon)에서 지원됩니다. 패키지는 ONNX Runtime, OpenCV 및 pypdfium2를 자동으로 가져옵니다.


벤치마크 한눈에 보기

지표 Indra OCR(기본) PaddleOCR PP‑OCRv6(텍스트 전용) Tesseract 5
처리량(페이지/초) – 32코어 49.4 4.28 2.92
페이지당 중간 지연 시간 228 ms 2 685 ms 5 496 ms
OmniParseBench 헤드라인 62.1 – –
텍스트 점수 41.3 35.8 19.3
표 점수 56.4 0.0 0.0
레이아웃 점수 88.6 – –

자세히 알아보기


TL;DR

Indra OCR은 인쇄 문서에 대해 높은 속도와 적절한 정확도를 제공하고 풍부한 레이아웃 출력과 사용하기 쉬운 CLI/Python API를 갖춘 경량 CPU 전용 OCR 엔진입니다. 깨끗한 PDF나 이미지를 빠르게 일괄 처리해야 하고 복잡한 표, 손글씨 또는 비라틴 문자의 한계를 수용할 수 있을 때 이상적입니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트