Contextifier v0.3.0 — OCR 엔진 설정 가이드
Contextifier는 6개의 OCR 엔진을 지원합니다:
| 엔진 | 유형 | 의존성 | 특징 |
|---|---|---|---|
| OpenAI | 클라우드 (Vision LLM) | langchain-openai |
GPT-4o 기반, 최고 정확도 |
| Anthropic | 클라우드 (Vision LLM) | langchain-anthropic |
Claude 기반 |
| Google Gemini | 클라우드 (Vision LLM) | langchain-google-genai |
Gemini Pro Vision |
| AWS Bedrock | 클라우드 (Vision LLM) | langchain-aws |
AWS 관리형 |
| vLLM | 셀프호스팅 | langchain-openai |
자체 서버 |
| Tesseract | 로컬 | pytesseract, Pillow |
오프라인, 무료 |
pip install langchain-openaifrom contextifier import DocumentProcessor
from contextifier.ocr.engines import OpenAIOCREngine
# API 키로 간편 생성
ocr = OpenAIOCREngine.from_api_key(
"sk-your-api-key",
model="gpt-4o", # 기본값
temperature=0.0, # 기본값
)
processor = DocumentProcessor(ocr_engine=ocr)
text = processor.extract_text("scanned.pdf", ocr_processing=True)pip install langchain-anthropicfrom contextifier.ocr.engines import AnthropicOCREngine
ocr = AnthropicOCREngine.from_api_key(
"sk-ant-your-api-key",
model="claude-sonnet-4-20250514",
)
processor = DocumentProcessor(ocr_engine=ocr)pip install langchain-google-genaifrom contextifier.ocr.engines import GeminiOCREngine
ocr = GeminiOCREngine.from_api_key(
"your-google-api-key",
model="gemini-2.5-pro",
)
processor = DocumentProcessor(ocr_engine=ocr)pip install langchain-awsfrom contextifier.ocr.engines import BedrockOCREngine
from langchain_aws import ChatBedrock
# LangChain 클라이언트 직접 주입
client = ChatBedrock(
model_id="anthropic.claude-sonnet-4-20250514-v1:0",
region_name="us-east-1",
)
ocr = BedrockOCREngine(client)
processor = DocumentProcessor(ocr_engine=ocr)pip install langchain-openaifrom contextifier.ocr.engines import VLLMOCREngine
from langchain_openai import ChatOpenAI
# vLLM 서버를 OpenAI 호환 엔드포인트로 연결
client = ChatOpenAI(
model="your-model-name",
base_url="http://localhost:8000/v1",
api_key="dummy", # vLLM은 API 키 불필요
)
ocr = VLLMOCREngine(client)
processor = DocumentProcessor(ocr_engine=ocr)pip install pytesseract PillowTesseract 바이너리 설치:
| OS | 설치 방법 |
|---|---|
| Ubuntu/Debian | sudo apt install tesseract-ocr tesseract-ocr-kor |
| macOS | brew install tesseract tesseract-lang |
| Windows | UB Mannheim 설치파일 다운로드 후 PATH 등록 |
from contextifier.ocr.engines import TesseractOCREngine
# 기본 영어
ocr = TesseractOCREngine()
# 한국어 + 영어
ocr = TesseractOCREngine(lang="kor+eng")
# Tesseract 경로 직접 지정 (Windows)
ocr = TesseractOCREngine(
lang="kor+eng",
tesseract_cmd=r"C:\Program Files\Tesseract-OCR\tesseract.exe",
config="--psm 6", # 단일 텍스트 블록 모드
)
processor = DocumentProcessor(ocr_engine=ocr)기본 프롬프트는 다국어를 지원합니다:
"ko": 한국어 출력 (기본값)"en": 영어 출력
from contextifier.config import ProcessingConfig
# 프롬프트 언어 변경
config = ProcessingConfig().with_ocr(prompt_language="en")custom_prompt = """
이 이미지에서 텍스트를 추출하세요.
- 표가 있으면 HTML 테이블로 변환
- 수식이 있으면 LaTeX로 변환
- 출력은 한국어로
"""
ocr = OpenAIOCREngine.from_api_key("sk-...", prompt=custom_prompt)대량의 이미지가 포함된 문서에서 OCR 속도를 향상시킬 수 있습니다:
from contextifier.ocr.processor import OCRProcessor
# 기본: 순차 처리 (max_workers=1)
processor = OCRProcessor(engine=ocr, config=config)
# 병렬 처리: ThreadPoolExecutor 사용
processor = OCRProcessor(engine=ocr, config=config, max_workers=4)참고: 클라우드 API의 rate limit에 주의하세요.
max_workers를 API 제한에 맞게 설정하세요.
- 텍스트 추출: 핸들러가 문서를 처리하면서 이미지를 발견하면
[Image: path/to/image.png]태그를 삽입 - OCR 호출:
ocr_processing=True일 때, OCRProcessor가 텍스트에서[Image: ...]태그를 인식 - 이미지 → 텍스트: 각 이미지에 대해 OCR 엔진이 텍스트를 추출
- 태그 치환: 이미지 태그가 추출된 텍스트로 교체
[원본 텍스트]
제1장 서론
[Image: temp/images/page_1.png]
제2장 본론
...
[OCR 처리 후]
제1장 서론
[Figure]
이미지에서 추출된 텍스트 내용...
[/Figure]
제2장 본론
...
| 포맷 | OCR 적용 시나리오 |
|---|---|
| PDF (스캔) | needs_ocr=True 감지 시 페이지를 이미지로 렌더링 → 이미지 태그 삽입 → OCR |
| 이미지 (jpg, png 등) | 이미지 자체가 이미지 태그 → OCR |
| DOCX/PPTX | 임베디드 이미지에 이미지 태그 삽입 → OCR |
| HWP/HWPX | 임베디드 이미지에 이미지 태그 삽입 → OCR |
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or not in PATH
→ Tesseract 바이너리를 설치하고 PATH에 등록하거나, tesseract_cmd 매개변수로 경로를 직접 지정하세요.
AuthenticationError: Incorrect API key provided
→ API 키가 올바른지, 유효기간이 만료되지 않았는지 확인하세요.
RateLimitError: Rate limit exceeded
→ max_workers를 줄이거나, API 사용량을 확인하세요. 재시도 로직은 LangChain 클라이언트에서 제공합니다.
→ 이미지가 실제로 텍스트를 포함하는지 확인하세요.
→ Tesseract의 경우 lang 매개변수가 올바른지 확인하세요 (kor+eng 등).
→ 이미지 해상도가 너무 낮으면 (< 150 DPI) 정확도가 떨어질 수 있습니다.