
디지털 전환이 가속화되면서 이미지 속의 텍스트를 자동으로 인식하고 활용하는 기술, 즉 OCR(Optical Character Recognition) 은 다양한 산업 분야에서 필수 요소로 자리잡았습니다.
문서 스캔, 영수증 처리, 차량 번호판 인식, 의료기록 분석 등 모든 과정에서 이미지에서 텍스트를 추출하고 후처리하는 자동화 시스템이 요구됩니다.
이번 글에서는 Python을 활용해 OCR 기능을 구현하고, 인식된 텍스트를 자동으로 정제·분석하는 후처리 프로세스까지 단계별로 살펴보겠습니다.
OCR(광학 문자 인식)의 개념과 원리
OCR은 이미지나 스캔 문서에서 텍스트 영역을 식별하고, 이를 문자 데이터로 변환하는 기술입니다.
기본적으로 다음의 세 단계를 거칩니다:
- 전처리(Preprocessing) – 이미지의 노이즈 제거, 명암 대비 조정, 이진화 등
- 문자 인식(Text Recognition) – 학습된 모델을 이용해 문자 패턴 인식
- 후처리(Postprocessing) – 인식된 결과의 오류를 수정하고 구조화
Python에서는 오픈소스 OCR 엔진인 Tesseract를 가장 널리 사용합니다.
Tesseract는 100개 이상의 언어를 지원하며, Python 인터페이스로 pytesseract 라이브러리를 제공합니다.
Python 환경 설정 및 기본 OCR 구현
1. 라이브러리 설치
먼저 Tesseract OCR 엔진과 Python 바인딩을 설치합니다.
pip install pytesseract opencv-python pillow
Tesseract 실행 파일이 시스템 경로에 없을 경우, Python 코드에서 경로를 직접 지정해야 합니다.
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
2. 기본 이미지 텍스트 추출
간단한 예제로 이미지에서 텍스트를 인식해봅시다.
img = Image.open('sample_text.png')
text = pytesseract.image_to_string(img, lang='kor+eng')
print(text)
이 코드는 한글과 영어가 섞인 이미지에서도 텍스트를 추출할 수 있으며,
Tesseract의 다국어 모델(lang='kor+eng')을 지정하면 혼합 문서에도 유연하게 대응합니다.
정확도를 높이는 전처리 기법
OCR의 성능은 전처리 과정에 크게 좌우됩니다.
조명, 해상도, 왜곡 등의 이유로 원본 이미지 품질이 낮으면 인식률이 떨어지기 때문입니다.
OpenCV를 활용하면 간단한 코드로 전처리 품질을 개선할 수 있습니다.
import cv2
import numpy as np
img = cv2.imread('sample_text.png', cv2.IMREAD_GRAYSCALE)
img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
img = cv2.medianBlur(img, 3)
cv2.imwrite('processed.png', img)
이렇게 하면 글자 경계가 선명해지고 노이즈가 제거되어 OCR 인식률이 크게 향상됩니다.
특히 이진화(Thresholding) 와 블러링(Blurring) 은 저해상도 스캔 문서에서 효과적입니다.
텍스트 후처리 자동화
OCR로 추출된 텍스트는 종종 띄어쓰기 오류, 특수문자, 잘못 인식된 단어 등을 포함합니다.
이러한 결과를 자동으로 정제하기 위한 후처리 과정이 필요합니다.
1. 불필요한 문자 제거
정규 표현식을 활용해 문장 내의 불필요한 문자나 공백을 정리할 수 있습니다.
import re
text = re.sub(r'[^가-힣a-zA-Z0-9\s]', '', text)
text = re.sub(r'\s+', ' ', text).strip()
2. 오탈자 보정 및 띄어쓰기 교정
한국어의 경우, py-hanspell 또는 pynori 등의 라이브러리를 사용하여 자동 교정을 수행할 수 있습니다.
from hanspell import spell_checker
result = spell_checker.check(text)
clean_text = result.checked
이 과정을 통해 OCR의 정확도 한계를 보완하며,
데이터 분석이나 문서 자동 분류 단계로 자연스럽게 연결할 수 있습니다.
OCR 결과의 구조화 및 데이터화
추출된 텍스트를 단순히 출력하는 데 그치지 않고, 구조화된 데이터로 변환하면 자동화의 효율이 극대화됩니다.
예를 들어, 영수증에서 날짜, 금액, 품목 정보를 추출하거나, 설문지 응답을 자동으로 엑셀에 저장할 수 있습니다.
import pandas as pd
lines = text.split('\n')
data = [line.split() for line in lines if line.strip()]
df = pd.DataFrame(data, columns=['항목', '값'])
df.to_excel('ocr_output.xlsx', index=False)
이처럼 OCR 결과를 정형화하면 이후 데이터 분석, 통계 처리, AI 모델 학습 데이터 생성 등에 손쉽게 활용할 수 있습니다.
OCR + 딥러닝 조합으로 고도화
기존 Tesseract OCR은 인쇄체 문서에는 강하지만, 손글씨나 복잡한 문서에는 약점을 가집니다.
이 한계를 보완하기 위해 CNN 기반의 딥러닝 OCR 모델(CRNN, EAST, CRAFT 등) 이 도입되고 있습니다.
Python에서는 다음과 같은 프레임워크를 활용할 수 있습니다:
- EAST (Efficient and Accurate Scene Text Detection) – 장면 이미지에서 텍스트 영역 탐지
- CRNN (Convolutional Recurrent Neural Network) – 시퀀스 기반 텍스트 인식
- EasyOCR – 한글 포함 80개 이상의 언어 지원, 높은 정확도
import easyocr
reader = easyocr.Reader(['ko', 'en'])
result = reader.readtext('document.png')
for (bbox, text, prob) in result:
print(f"{text} (정확도: {prob:.2f})")
EasyOCR은 간단한 코드로 높은 정확도의 OCR을 구현할 수 있으며,
Tesseract 대비 복잡한 문서 구조에도 안정적으로 대응합니다.
결론
Python과 OpenCV, Tesseract, EasyOCR 등을 조합하면
이미지 속 텍스트를 추출하고 자동으로 후처리하는 완전한 OCR 파이프라인을 구축할 수 있습니다.
이 기술은 문서 자동화, 데이터 입력, 물류 관리, 의료기록 처리 등 다양한 분야에서
업무 효율성과 데이터 품질을 크게 향상시킵니다.
OCR은 단순한 텍스트 인식 기술이 아니라, AI 기반 자동화 시스템의 핵심 구성요소입니다.
Python을 통해 자신만의 OCR 후처리 시스템을 설계하고,
데이터 중심의 스마트한 워크플로우를 완성해 보세요.
'Computer Vision + Python > 이미지 분석 & 인식 (중급자)' 카테고리의 다른 글
| Python으로 얼굴 표정 인식(Facial Expression Recognition) – 감정 분석 기반 (0) | 2025.11.16 |
|---|