Hugging Face

datalab-to/indra-ocr

Indra OCR: CPU에서 초당 최대 49페이지를 처리하는 문서 OCR

Datalab이 PDF와 이미지에서 텍스트, 레이아웃, 표를 추출하는 오픈소스 OCR 도구 Indra OCR을 공개했습니다. 1M 파라미터 모델과 ONNX Runtime을 사용하며, 자체 OmniParseBench 측정에서 32코어 기준 초당 49.4페이지를 처리했습니다. 다만 손글씨와 복잡한 표, 일부 언어의 스캔 OCR은 지원이 제한됩니다.

에디터 노트

Indra OCR의 강점은 인식 점수 하나보다 CPU에서 레이아웃까지 포함한 문서 처리를 빠르게 수행하는 데 있습니다. 32코어 처리량은 초당 49.4페이지지만 OCR 모드의 수치이고, 4코어 기본 모드의 페이지당 중앙값은 228ms입니다. 두 결과는 서로 다른 실행 조건이므로 하나의 속도 수치처럼 읽으면 안 됩니다. 정확도도 작업 종류에 따라 달라집니다. 기본 모드의 텍스트 점수는 PP-StructureV3보다 낮고, --math를 켜야 앞섭니다. 대신 이 옵션은 처리량을 약 30~35% 낮추고 표 점수도 떨어뜨립니다. 자체 벤치마크는 같은 페이지와 장비를 사용했지만 PP-StructureV3는 일부 페이지가 빠졌고 처리 시간도 상한선으로 제시됐습니다. 따라서 성능 비교는 명시된 조건과 함께 봐야 하며, 한글 스캔이나 복잡한 표처럼 지원 한계가 분명한 작업에는 결과가 맞지 않을 수 있습니다.

AI 요약

Indra OCR은 CPU에서 빠르게 문서를 처리하도록 만든 OCR 도구입니다. PDF와 이미지에서 Markdown, 일반 텍스트, JSON을 출력하며, JSON에는 줄과 레이아웃 블록의 좌표, 블록 유형, 읽기 순서, 인식 신뢰도가 담깁니다. 주 인식 모델은 약 100만 파라미터이며 ONNX Runtime을 사용합니다. 설치 후 첫 실행 때 Hugging Face에서 약 18MB의 모델을 내려받습니다. Python 3.10 이상에서 사용할 수 있고 PyTorch는 설치하지 않습니다.

처리 방식과 사용법

기본값인 auto 모드는 PDF에 텍스트 레이어가 있으면 검사한 뒤 이를 읽고, 읽을 수 없는 부분은 OCR로 처리합니다. ocr 모드는 텍스트 레이어를 무시하고 페이지 전체를 인식하며, text 모드는 검사 결과와 관계없이 텍스트 레이어를 사용합니다. 디지털 PDF에서 텍스트 레이어를 읽을 때는 문자 체계를 폭넓게 지원합니다. 제작진은 75개 언어 계열의 1,125페이지를 확인했으며, 검사 기준을 통과한 페이지에서 각 계열의 문자를 최소 98% 유지했다고 설명합니다.

명령줄에서 PDF 여러 개를 한 번에 처리하거나 Python 라이브러리로 페이지별 결과를 받을 수 있습니다. 기본 설정은 사용 가능한 코어를 활용하며 --cores로 작업자 수를 제한합니다. 로컬 웹 뷰어에서는 페이지 위에 줄과 레이아웃 블록을 겹쳐 보고 Markdown, JSON, 단계별 처리 시간도 확인합니다. 뷰어에 넣은 파일은 로컬에 머뭅니다.

성능과 정확도

OmniParseBench 2,937페이지를 대상으로 한 비교에서 Indra OCR 기본 모드는 종합 점수 62.1, 텍스트 41.3, 표 56.4, 레이아웃 88.6을 기록했습니다. 4개의 x86 vCPU에서 페이지당 중앙값은 228ms였습니다. 같은 비교에서 PaddleOCR PP-StructureV3는 종합 58.4, 텍스트 55.6, 표 47.8, 레이아웃 71.7을 기록했고 페이지당 중앙값은 40,958ms였습니다. Indra OCR은 기본 모드에서 텍스트 점수가 PP-StructureV3보다 낮습니다. Tesseract 5의 텍스트 점수는 19.3, 페이지당 중앙값은 5,496ms였습니다.

처리량 측정은 AMD EPYC CPU에서 OmniParseBench 300페이지를 OCR 모드로 처리하고, 코어마다 단일 스레드 작업자 하나를 둔 조건입니다. 4코어에서 초당 7.3페이지, 32코어에서 초당 49.4페이지를 기록했습니다. 같은 조건에서 32코어 기준 RapidOCR는 초당 4.28페이지, Tesseract 5는 2.92페이지였습니다. PP-StructureV3는 시간 제한으로 일부 페이지를 처리해 수치가 상한선입니다. 단기 작업에서는 모델 로딩 시간을 포함한 처리량이 4코어에서 초당 7.2페이지, 32코어에서 37.7페이지로 낮아졌습니다.

선택 기능인 --math를 켜면 종합 점수는 66.8, 텍스트는 57.5로 오릅니다. 표 점수는 56.4에서 54.8로 내려갑니다. 수식 인식 경로가 일부 표 안의 숫자를 수식으로 처리하기 때문입니다. 속도도 낮아져 4코어 처리량은 초당 6.8페이지에서 4.8페이지로, 32코어에서는 44.9페이지에서 29.2페이지로 줄었습니다. 페이지당 중앙값은 기본 모드 약 210ms에서 --math 사용 시 약 360ms로 늘었습니다.

지원 범위와 제한

스캔 이미지 OCR은 라틴 문자 약 50개 언어와 키릴 문자, 그리스 문자, 데바나가리, 벵골어, 중국어를 지원합니다. 아랍어, 히브리어, 태국어, 일본어 가나, 한글은 디지털 PDF의 텍스트 레이어에서만 처리할 수 있습니다. 스캔 이미지에 있는 한글은 중국어 문자처럼 잘못 인식될 수 있습니다. 손글씨 인식은 지원하지 않으며 복잡한 표에서는 셀의 행과 열이 뒤바뀔 수 있습니다. 오래되거나 흐릿한 스캔, 세로쓰기, 매우 넓은 페이지도 잘 처리하지 못합니다. 수식은 기본 설정에서 일반 텍스트로 출력하며, --math를 켜면 LaTeX 형식으로 인식합니다.

코드는 Apache 2.0 라이선스지만 모델 가중치는 수정된 OpenRAIL-M 라이선스를 따릅니다. 연구, 개인 사용, 펀딩 또는 매출이 2,000만 달러 미만인 스타트업은 무료로 사용할 수 있습니다. API와 경쟁하는 용도에는 제한이 있으며, 더 넓은 상업적 이용에는 별도 라이선스가 필요합니다.

원문: Hugging Face / 번역·요약: Trawling