728x90
OCR 구조에서의 인식기(Recognizer)
OCR의 핵심 구성 요소는 **검출기(Detector)**와 **인식기(Recognizer)**로 구분됩니다
구성요소 | 역할 | 출력 예시 |
검출기(Detector) | 글자 영역(bbox)을 찾음 | 좌표 (bounding box) |
인식기(Recognizer) | 글자가 있는 영역에서 텍스트 추출 | "HELLO" 같은 텍스트 |
01. 인식기(Recognizer)에 사용되는 데이터셋
인식기는 다양한 형태의 글자 이미지를 정확히 인식해야 합니다.
다음과 같은 유형의 데이터를 활용하여 인식기를 학습시킵니다.
📌 데이터 종류
유형 | 특징예시 | 데이터 |
문서 (Documents) | 스캔된 종이 문서, 정형적 | 계약서, 서류 |
장면 (Scene) | 간판, 표지판 등 복잡한 배경 | 거리 사진, 간판 사진 |
손글씨 (Handwritten) | 사람이 직접 쓴 글씨 | 필기 메모, 노트 |
📌 데이터의 어려운 경우 (Hard Cases)
- 휘어진(Curved) 글자
- 회전된(Rotated) 글자
- 노이즈가 많은(어둡고 흐릿한) 이미지
📌 텍스트 배열 유형
Regular: 가로 방향, 균일한 간격으로 배열됨 (쉬움)
Irregular: 회전되거나 휘어진 텍스트 (어려움)
📌 Irregular 텍스트의 변환(Transformation)
휘어진 텍스트를 정상적(Regular) 형태로 보정하여 인식률을 높임.
02. 인식기(Recognizer)의 구조
OCR 인식기 구조는 일반적으로 다음과 같이 두 가지 모듈로 구성됩니다.
📌 Vision Encoder + Text Decoder 구조
모듈 | 역할 |
Vision Encoder | 이미지에서 의미 있는 특징(Feature) 추출 |
Text Decoder | 추출된 특징을 기반으로 텍스트로 변환 |
🔖 예시 흐름
이미지 → Vision Encoder → Feature 추출 → Text Decoder → "TEXT" 출력
03. Scene Text Recognition (STR)의 구조
실제 **장면 이미지(Scene Image)**에서 텍스트를 인식할 때는 4단계로 구성됩니다.
1) Transformation Stage (변형 단계)
- 입력 이미지의 왜곡을 보정하여 모델이 인식하기 쉬운 형태로 변환 (정규화)
2) Feature Extraction Stage (특징 추출 단계)
- CNN 기반 네트워크가 이미지에서 특징(Feature)을 추출하는 단계
3) Sequence Modeling Stage (순차 모델링 단계)
- CNN으로 얻은 Feature 간의 순차적 관계를 파악
- RNN, Transformer 등을 활용해 글자 간 맥락(Context) 파악 가능
\4) Prediction Stage (예측 단계)
- 최종적으로 추출된 맥락 정보를 기반으로 텍스트를 예측
- 글자 인식의 최종 출력 단계 ("HELLO" 등 텍스트 형태로 결과 도출)
04. 인식기 모델의 두 가지 접근 방법
유형 | 특징예시 | 모델 |
Two-Stage Ensemble Model | Vision 모듈과 Language 모듈이 분리되어 있음 | ABINet |
Unified STR Model | Vision 모듈과 Language 모듈이 처음부터 결합된 구조 | PARSeq |
🔖 두 접근법의 공통점
둘 다 Vision Encoder + Text Decoder 구조를 기본으로 함
05. OCR 오픈소스 활용
대표적인 OCR 오픈소스 라이브러리 두 가지:
📌 ① EasyOCR
80개 이상의 다양한 언어 지원
즉시 사용할 수 있는 오픈소스 OCR 도구
GitHub: EasyOCR
📌 ② Tesseract
높은 정확도의 유명한 OCR 엔진
116개 이상의 언어를 지원
문서 및 장면 OCR 모두에 활용 가능
GitHub: Tesseract
06. 인식기 과제의 어려운 점 (Challenging Points)
- Labeled 데이터 부족
→ Synthetic (합성) 데이터를 통해 보완 (MJSynth, SynthText) - Irregular(휘어지고 회전된) 텍스트
→ Transformation 기술을 통해 해결 가능 - 수평(Horizontal) vs 수직(Vertical) 텍스트
- 수평(Horizontal): 일반적, 왼쪽에서 오른쪽
- 수직(Vertical): 주로 한중일 언어에서 사용, 위에서 아래로
- 텍스트 방향 혼동 가능성
→ 방향성을 정확히 파악하는 기술 필요
OCR 인식기(Recognizer)
├── 사용 데이터 유형
│ ├── Documents, Scene, Handwritten
│ └── Regular vs Irregular (Transformation 필요)
│
├── Vision Encoder + Text Decoder
│ ├── Vision Encoder: 이미지 특징 추출
│ └── Text Decoder: 특징을 텍스트로 변환
│
├── Scene Text Recognition 구조
│ ├── Transformation (왜곡 보정)
│ ├── Feature Extraction (CNN 기반 특징 추출)
│ ├── Sequence Modeling (특징 간 맥락 파악)
│ └── Prediction (최종 텍스트 출력)
│
└── OCR 오픈소스
├── EasyOCR (다국어 지원, 즉시 사용 가능)
└── Tesseract (정확성 높음, 문서·장면 모두 가능)
728x90
'05_CV(Computer Vision) > OCR' 카테고리의 다른 글
Parseq (0) | 2025.03.26 |
---|---|
TRBA (0) | 2025.03.26 |
성능 높이기 (0) | 2025.03.24 |
검출기 _ CRAFT (0) | 2025.03.24 |
검출기 (0) | 2025.03.24 |