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은 로컬 환경 우선