Python OCR 이미지 텍스트 인식 성능 알아보기

Python으로 이미지 속 글자를 읽어내는 OCR 기능을 구현하고, 그 성능을 실제 손글씨 이미지로 실험해보았습니다.

Tesseract 기반의 인식 정확도와 개선 방법도 함께 살펴봅니다.


목차


 

1. Python으로 OCR 구현하려면?

OCR(Optical Character Recognition)은 이미지에서 문자 정보를 추출하는 기술입니다.

Python에서는 pytesseractopencv-python을 활용해 간단하게 구현할 수 있습니다.

 

필수 패키지 설치

pip install pytesseract pillow opencv-python

 

 

사용 라이브러리 구성

  • pytesseract: Tesseract OCR 엔진을 파이썬에서 제어
  • Pillow: 이미지 열기 및 저장
  • OpenCV: 이미지 전처리 및 필터링
from PIL import Image
import pytesseract
import os

# Tesseract 경로
pytesseract.pytesseract.tesseract_cmd = r"tesseract.exe 경로"

# 파일이 실제로 존재하는지 확인
image_path = r"이미지 경로"
if not os.path.exists(image_path):
    raise FileNotFoundError(f"이미지 파일이 존재하지 않습니다: {image_path}")

# OCR 처리
img = Image.open(image_path)
text = pytesseract.image_to_string(img, lang="eng+kor")

print("인식된 텍스트:")
print(text)

2. 테스트 이미지 소개

아래는 손으로 직접 작성한 테스트 이미지입니다. 영어 대문자/소문자와 한글을 포함하고 있습니다.

3. 기본 OCR 결과 분석

전처리 없이 Tesseract OCR을 적용한 결과는 아래와 같습니다.

A Be D

JE LR th UF

문제점 분석

  • 영문 c → e로 오인식
  • 한글은 전부 영어로 잘못 인식됨

 

 

전처리 없이 아래 이미지도  Tesseract OCR을 적용해봤습니다.

 

 

결과는 아래 사진과 같습니다.

 

영어는 잘 인식하지만 한글이 이상하네요.


4. 성능 향상을 위한 전처리 적용

OpenCV의 이진화(Thresholding)를 통해 인식 성능을 높일 수 있습니다.

흑백 대비를 극대화하여 OCR 엔진이 텍스트 경계를 더 잘 인식하게 합니다.

 

전처리 적용 코드

from PIL import Image
import pytesseract
import cv2
import os

# Tesseract 경로 (정확히 적어주세요)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# 이미지 경로
image_path = r"C:\Users\seonggyu\Desktop\ocr\23.png"
if not os.path.exists(image_path):
    raise FileNotFoundError(f"이미지 파일이 존재하지 않습니다: {image_path}")

# OpenCV로 이미지 불러오기
img_cv = cv2.imread(image_path)

# 회색조(Grayscale) 변환
gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)

# 이진화(Thresholding) 적용
thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY_INV)[1]

# PIL 이미지로 변환 (pytesseract는 PIL 형식 요구)
img_pil = Image.fromarray(thresh)

# OCR 수행
text = pytesseract.image_to_string(img_pil, lang="eng+kor")

# 결과 출력
print("인식된 텍스트:")
print(text)

 

전처리 코드 적용 이 후

 

 

영어로는 잘 나오지만 아직도 한글은 이상하죠?

혹시 모르니 한글로만 이루어진 이미지도 한번 만들고 글씨도 크게 만들어보겠습니다.

 

 

 

아래 사진이 결과 값인데 여전히 이상하네요.

 

영어는 잘 나오지만 한글은 너무 인식이 잘 안되네요.

인식 성능 더 늘릴 수 있을까요?

댓글로 알려주시면 감사하겠습니다.