OCR 품질은 모델보다 입력 이미지 전처리에서 갈립니다. 이 문서는 Python + Tesseract로 “읽히는 이미지”를 만드는 실무 루틴을 정리했습니다.

flowchart LR
A[원본 이미지] --> B[그레이스케일]
B --> C[노이즈 제거]
C --> D[이진화]
D --> E[Tesseract OCR]
E --> F[텍스트/좌표 출력]

1) 설치

pip install pytesseract opencv-python pillow
# 시스템에 tesseract-ocr 설치 필요

2) 가장 작은 예제

import cv2, pytesseract
img = cv2.imread("sample.png")
text = pytesseract.image_to_string(img, lang="kor+eng")
print(text)

3) 품질 올리는 전처리

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
th = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
text = pytesseract.image_to_string(th, lang="kor+eng", config="--psm 6")

4) 텍스트 위치까지 뽑기

data = pytesseract.image_to_data(th, output_type=pytesseract.Output.DICT, lang="kor+eng")
for i, t in enumerate(data["text"]):
    if t.strip():
        x,y,w,h = data["left"][i], data["top"][i], data["width"][i], data["height"][i]
        print(t, (x,y,w,h))

5) 자주 막히는 이슈

  • 한글 인식률 낮음 → lang="kor+eng" + 한글 traineddata 확인
  • 배경이 복잡함 → 전처리(이진화/노이즈 제거) 강도 조절
  • 줄 단위로 끊김 → --psm 옵션(6, 7, 11) 비교

운영 팁

  • 동일 문서 유형은 전처리 파이프라인 고정
  • OCR 결과는 원본과 함께 보관(검증용)
  • 민감문서 OCR은 로컬 환경 우선

함께 보면 좋은 문서