본문 바로가기
Study/OCR

[1] OCR(Optical Character Recognition) 의 모델 구조, 평가 방법, 사용가능한 API

by 후이 (hui) 2025. 2. 14.

 

이번 게시물에서는 OCR(Optical Character Recognition) 의 모델 구조, 평가 방법, 사용가능한 API 종류에 대해 설명하고  다음 게시물에서 각 API 별 장단점과 실제 데이터로 성능을 비교한 결과를 공유하고자 한다. 

 

1. OCR(Optical Character Recognition) 이란? 

     OCR 모델의 구조 : Text detection + Text recognition  

            Text detection  - 글자의 위치를 찾고

            Text recognition - 어떤 글자 인지를 인식하자

 

 

1) OCR 알고리즘의 유형

   a. Two stage algorithm : OCR Text Dectection 과 Text Recognition을 분리해서 학습 Pipeline 구성

 

  • 글자 검출 Text Detection : Object detection 테스크를 문자 찾기로 확장한 영역
    • input : 전체 image / output : 텍스트가 있는 Bounding box
    • Object detection과 유사한 접근 방식 - Object가 Text boundary box
    • 활용 알고리즘 : CNN 기반 모델
  • 글자 인식 Text Recognition : 검출된 문자가 텍스트로 뭔지
    • input : 텍스트만 추려진 image / output : 텍스트
    • ex. RNN 계열 모델 (with attention), Transformer (input : image / output : text), CRNN
  • 문제점
    • 글자 검출에서 bounding box가 잘못된 경우 - 글자 인식도 잘못됨
    • 2번의 Image backbone이 별도로 구성됨
    • ⇒ 이 둘을 하나로 합치는 접근 방식이 E2E OCR 방법론

 

b. End-to-End Scene Text Detection & Recognition : Detection과 Recognition 한번에 E2E OCR 방법론

 

 

  • 특징
    • input : 전체 image / output : 텍스트가 있는 Bounding box & 텍스트
    • 검출과 인식을 한번에 진행 - 모델 학습 업데이트 측면에서 편리
    • Image Backbone을 공유 : 2번의 Image Backbone Forward 를 거칠 필요 없음
  • 예시 알고리즘
    • FOTS (Fast Oriented Text Spotting with a Unified Network)
    • DEER (Detection agnostic End to End Recognizer) ⇒ Naver Clova API

 

2. OCR(Optical Character Recognition) 성능 평가 방법

보편적인 평가 방법 (accuracy, F1 score, Recall, Precision) 외에 Error Rate, IoU 지표를 사용하며, 그 외에도 처리속도나 범용성 등을 확인

a. Text Detection

  • IoU (Intersection over Union)
    • 이미지 내의 텍스트 영역을 정확하게 감지하는 능력을 평가하는 데 사용
    • A, B 좌표값으로 Intersection 계산 후, A∪B=A+B−A∩B를 이용하여 Union 계산
     

intersection_x_length = min(max_x1, max_x2) - max(min_x1, min_x2);
intersection_y_length = min(max_y1, max_y2) - max(min_y1, min_y2);

 

b. Text Recognition

  • Text Recognition - 오류율 (Error Rate)
    • Edit Distance 알고리즘
    • 문자열 A와 문자열 B가 있을 때 A의 문자를 삭제(Deletion), 변경(Substitution), 삽입(Insertion)하여 B의 문자열을 만들어야 할 때, 최소 횟수를 구하는 문제
    • 문자 오류율 (Character Error Rate, CER): 잘못 인식된 문자의 비율을 측정
    • 단어 오류율 (Word Error Rate, WER): 잘못 인식된 단어의 비율을 측정
    --> CER, WER이 낮을 수록 OCR 문자 인식이 잘된 것임 ! 
    • 논문에서는 ACC-CER(=1-CER),  ACC-WER(=1-WER) 로 정확도로 표현하기도 함
    • 좀 더 보수적으로 평가하고자 한다면 WER, 세부적으로 평가하고자 한다면 CER 

 

 

 

     

 

 

실제 python torch metric으로 계산하는 코드 

 

import torch
from torchmetrics.text import CharErrorRate, WordErrorRate

# CER, WER 계산기 초기화
calc_cer = CharErrorRate()
calc_wer = WordErrorRate()

def calculate_cer_wer(gt_text, pred_text):
    """
    torchmetrics.text의 CharErrorRate와 WordErrorRate를 사용하여 CER, WER 계산
    """
    # torchmetrics는 입력을 리스트 형태로 받아야 함
    cer = calc_cer([pred_text], [gt_text])
    wer = calc_wer([pred_text], [gt_text])
    
    return cer.item(), wer.item()

# 예제 테스트
ground_truth = "안녕하세요, 오늘 날씨가 참 좋네요."
predicted_text = "안녀하세요, 온늘 날씨가 참 줗네요."

cer, wer = calculate_cer_wer(ground_truth, predicted_text)

print(f"CER: {cer:.4f}")
print(f"WER: {wer:.4f}")

 

 

c. 그 외 평가 항목

  • 처리 속도 (Processing Speed)
    • OCR 시스템이 이미지를 처리하는 데 걸리는 시간을 측정
  • 범용성 (Versatility)
    • 다양한 유형의 문서(언어, 글꼴, 크기, 배경 등)에 대한 시스템의 인식 능력을 평가
     

 

 

3. OCR 사용 가능 API, python package (유료 / 무료 섞여있음) 

 

Cloud 기반 API 서비스  Azure API 유료
Google API
국내 API 서비스  Naver Clova
Upstage
Python 패키지 PaddleOCR 무료
EasyOCR
Tesseract

 

 

표로 정리하자면 위와 같다.

 

Cloud 기반 API 서비스에는 Azure, Google 이 있으며 해당 서비스는 유료이다. 영어 인식, 다국어인식에 유리하다 

국내 API 서비스에는 Naver, Upstage 가 있으며 해당 서비스도 마찬가지로 유료다. 국내 서비스다 보니 한국어 인식이 뛰어나다.

마지막으로 Python 패키지는 API를 호출할 수 없는, 네트워크 연결없이 OCR 인식을 해야하는 경우 적합하며, 무료인게 가장 큰 장점이다.

Paddle, EasyOCR, Tesseract 가 있으며 Python에서 패키지로 설치해 실행이 가능하다.

 

 

다음 게시물에선 각각 API, Package의 장단점 / 비용 / 성능 그리고 사용 방법에 대해서 상세히 다뤄보고자 한다 

728x90
반응형

댓글