👁️

OCR 오픈소스 카탈로그 — 이미지에서 텍스트를 뽑는 모든 방법

Tesseract부터 EasyOCR, PaddleOCR, Surya, TrOCR, Qwen2-VL까지 — 난이도·언어·속도 비교

OCR = image → model(image) → text

OCR도 지금까지 정리한 패턴과 동일하다:

image = Image.open("document.png")    # input
text = model(image)                    # model(input) → output
print(text)                            # "인식된 텍스트"

전처리는 이미지 리사이즈 + 정규화. 오디오의 STFT보다 간단하다.

가장 쉬운 것부터: EasyOCR

3줄이면 한국어 OCR이 된다:

pip install easyocr

import easyocr

reader = easyocr.Reader(['ko', 'en'])  # 한국어 + 영어
result = reader.readtext('document.png')

for (bbox, text, confidence) in result:
    print(f"{text} ({confidence:.0%})")
# → "안녕하세요" (98%)
# → "Hello World" (99%)

도구별 비교

도구 타입 크기 GPU 한국어 일본어 난이도
EasyOCR CNN+RNN ~100MB 불필요 ★☆☆☆☆
Tesseract LSTM 하이브리드 ~15MB 불필요 ★★☆☆☆
PaddleOCR CNN+RNN 10~150MB 불필요 ★★☆☆☆
Surya Transformer ~300MB 권장 ★★☆☆☆
docTR CNN+Transformer 50~100MB 불필요 ★★☆☆☆
TrOCR Transformer 334~558MB 권장 ★★★☆☆
GOT-OCR Transformer ~580MB 필수 ★★★☆☆
Qwen2-VL 멀티모달 LLM 2B~72B 필수 ★★★★☆

각 도구 코드

Tesseract — 가장 오래되고 가벼움:

brew install tesseract tesseract-lang  # macOS
pip install pytesseract pillow

import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("doc.png"), lang="kor+eng")

PaddleOCR — CJK 최강:

pip install paddlepaddle paddleocr

from paddleocr import PaddleOCR
ocr = PaddleOCR(lang='korean')
result = ocr.ocr('document.png')
for line in result[0]:
    bbox, (text, conf) = line
    print(f"{text} ({conf:.0%})")

Surya — 최신 고정밀:

pip install surya-ocr
surya_ocr document.png --langs ko,en

Qwen2-VL — "이미지 속 텍스트 전부 읽어줘":

# 2B 모델도 GPU 필요
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-VL-2B-Instruct", device_map="auto")
# → 이미지 + "모든 텍스트를 읽어줘" 프롬프트로 OCR

분류: 전통 vs 딥러닝 vs LLM

세대 도구 특징
1세대 (전통) Tesseract LSTM + 규칙. 깨끗한 인쇄물 OK
2세대 (딥러닝) EasyOCR, PaddleOCR, Surya CNN/Transformer. 장면 텍스트도 OK
3세대 (LLM) Qwen2-VL, Florence-2 멀티모달 LLM. "읽어줘" 한 마디로 OCR

세대가 올라갈수록 정확도는 높아지지만 모델이 커지고 GPU가 필요해진다.

용도별 추천

용도 추천
가볍게 시작 EasyOCR (pip 한 줄, 3줄 코드)
한국어/일본어/중국어 PaddleOCR (CJK 최강)
최고 정확도 Surya (최신 Transformer)
GPU 없는 환경 Tesseract (15MB, CPU만)
"그냥 읽어줘" Qwen2-VL (LLM, GPU 필수)

핵심 개념

1

EasyOCR (★☆☆☆☆) — pip install easyocr + 3줄. 80개 언어. 가장 쉬움

2

PaddleOCR (★★☆☆☆) — CJK(한중일) 최강. 경량 모델 10MB

3

Surya (★★☆☆☆) — 최신 Transformer. 90개 언어. 벤치마크 최고

4

Tesseract (★★☆☆☆) — 15MB로 가장 가벼움. 100개 언어. GPU 불필요

5

Qwen2-VL (★★★★☆) — 멀티모달 LLM. \"읽어줘\" 한 마디로 OCR. GPU 필수

사용 사례

문서 디지털화 — 스캔된 문서/이미지에서 텍스트 추출 장면 텍스트 인식 — 간판, 메뉴판, 명함 등 사진에서 텍스트 추출 RAG 파이프라인 — OCR로 문서를 텍스트화 → 벡터 DB에 저장 → LLM 질의응답