ㅈㄱㅈ/ㅁ ㅑ ㅇ ㄷ

광학 문자 인식 (OCR) 설명과 파이썬 예제

SBP 2025. 6. 10. 15:35
AI OCR 설명과 파이썬 예제

AI 광학 문자 인식 (OCR) 설명과 파이썬 예제

OCR(Optical Character Recognition, 광학 문자 인식)은 이미지 파일에 포함된 텍스트를 기계가 읽을 수 있는(machine-readable) 텍스트 형식으로 변환하는 기술입니다. 스캔한 문서, 사진 속 간판, 영수증 등의 문자 데이터를 자동으로 추출하고 디지털화하는 데 사용됩니다.

AI OCR은 여기에 딥러닝 기술을 접목하여 기존 OCR의 한계를 극복한 차세대 기술입니다. 비정형적인 문서, 흐릿한 이미지, 다양한 글꼴 및 손글씨까지도 높은 정확도로 인식할 수 있습니다.


AI OCR의 작동 원리

AI OCR은 크게 두 가지 핵심 단계로 구성됩니다.

1. 텍스트 탐지 (Text Detection)

이미지 내에서 글자가 있는 영역의 위치를 찾아냅니다. AI 모델은 단어 또는 문장 단위로 경계 상자(Bounding Box)를 그려 텍스트의 위치를 정확하게 식별합니다.

2. 텍스트 인식 (Text Recognition)

탐지된 각 텍스트 영역의 이미지를 분석하여 어떤 글자인지 인식합니다. AI 모델이 각 문자의 패턴을 학습하여 해당 문자를 텍스트 데이터로 변환합니다.

이 외에도 이미지의 기울기를 보정하거나 노이즈를 제거하는 전처리(Preprocessing) 과정이 정확도를 높이는 데 중요한 역할을 합니다.


파이썬을 이용한 OCR 예제 (EasyOCR)

EasyOCR은 파이썬에서 매우 쉽게 사용할 수 있는 OCR 라이브러리입니다. 특히 한국어를 포함한 80개 이상의 언어를 별도의 복잡한 설정 없이 지원하여 매우 편리합니다.

사전 준비:
예제를 실행하기 전에 터미널 또는 명령 프롬프트에서 필요한 라이브러리를 설치해야 합니다. PyTorch가 먼저 설치되어 있어야 원활하게 동작합니다.
# 1. PyTorch 설치 (CPU 버전) pip install torch torchvision torchaudio 2. EasyOCR 설치 pip install easyocr opencv-python-headless

예제 시나리오

'sample_image.png' 라는 이미지 파일에서 한국어와 영어를 동시에 인식하여 텍스트로 추출하고, 인식된 위치에 사각형을 그려 시각화합니다.

파이썬 코드 예제

import easyocr import cv2 import matplotlib.pyplot as plt # 1. OCR 리더기 생성 (한국어와 영어 사용) # gpu=True 옵션을 사용하면 GPU로 더 빠르게 처리할 수 있습니다. (CUDA 설치 필요) reader = easyocr.Reader(['ko', 'en']) # 2. 이미지 파일 읽기 image_path = 'sample_image.png' # 텍스트가 포함된 이미지 파일 경로 image = cv2.imread(image_path) # 3. OCR 실행하여 텍스트 인식 # detail=1 이면 텍스트와 함께 위치 좌표, 신뢰도를 모두 반환합니다. results = reader.readtext(image_path, detail=1) # 4. 결과 출력 및 시각화 print("--- OCR 결과 ---") for (bbox, text, prob) in results: # bbox: 텍스트의 경계 상자 좌표 (4개의 꼭짓점) # text: 인식된 텍스트 # prob: 인식 신뢰도 (0에서 1 사이) print(f'인식된 텍스트: {text}, 신뢰도: {prob:.4f}') # 경계 상자의 꼭짓점 좌표 추출 (top_left, top_right, bottom_right, bottom_left) = bbox top_left = tuple(map(int, top_left)) bottom_right = tuple(map(int, bottom_right)) # 원본 이미지에 초록색 사각형 그리기 cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2) # (선택사항) 인식된 텍스트 함께 표시 (폰트 문제로 영문만 잘 보일 수 있음) # cv2.putText(image, text, (top_left[0], top_left[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2) # 결과 이미지 보여주기 (matplotlib 사용, BGR -> RGB 변환 필요) plt.figure(figsize=(10, 10)) plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.title('OCR Result') plt.axis('off') plt.show()