Python으로 이미지 속 글자를 읽어내는 OCR 기능을 구현하고, 그 성능을 실제 손글씨 이미지로 실험해보았습니다.
Tesseract 기반의 인식 정확도와 개선 방법도 함께 살펴봅니다.
목차
1. Python으로 OCR 구현하려면?
OCR(Optical Character Recognition)은 이미지에서 문자 정보를 추출하는 기술입니다.
Python에서는 pytesseract
와 opencv-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)
전처리 코드 적용 이 후
영어로는 잘 나오지만 아직도 한글은 이상하죠?
혹시 모르니 한글로만 이루어진 이미지도 한번 만들고 글씨도 크게 만들어보겠습니다.
아래 사진이 결과 값인데 여전히 이상하네요.
영어는 잘 나오지만 한글은 너무 인식이 잘 안되네요.
인식 성능 더 늘릴 수 있을까요?
댓글로 알려주시면 감사하겠습니다.
'개발 & 코딩' 카테고리의 다른 글
파이썬 if문과 while문 기초 및 실습 예제 (0) | 2025.06.21 |
---|---|
파이썬으로 파일 자동 분류 프로그램 만들기 (1) | 2025.06.20 |
AI 지뢰찾기 - Cursor와 Windsurf를 활용한 100x100 지뢰찾기 AI (0) | 2025.06.15 |
안드로이드 스튜디오 AVD 실행 안됨 해결 방법 "The emulator process for AVD Pixel_2_API_34 has terminated" (0) | 2025.05.03 |
파이썬 tkinter 계산기 코드, 한 줄 한 줄 해석해드립니다 (0) | 2025.03.30 |