1. 제품
  2.   파서
  3.   Python
  4.   EasyOCR
 
  

현대적인 문서 과제를 위한 고급 OCR

딥러닝 기반 인식 기술로 스캔 문서, 사진, PDF에서 정확하게 텍스트 추출

EasyOCR이란?

EasyOCR은 Jaided AI가 개발한 오픈소스 광학 문자 인식(OCR) 라이브러리로, 이미지와 스캔 문서에서 고정확도로 텍스트를 추출하도록 설계되었습니다. PyTorch 기반으로 라틴어, 중국어, 아랍어 등 80개 이상의 언어를 지원합니다. EasyOCR은 사용 편의성으로 유명하며, 단 몇 줄의 코드로 구현할 수 있어 텍스트 인식 프로젝트를 진행하는 개발자와 연구자에게 이상적인 선택입니다. 사전 훈련된 딥러닝 모델을 통해 다양한 폰트, 필기체, 복잡한 배경에서도 효율적으로 텍스트를 감지하고 인식할 수 있습니다. 자동 문서 처리, 번호판 인식, 이미지 기반 텍스트 추출 등에 활용할 수 있는 강력하면서도 가벼운 솔루션을 제공합니다. 이 시스템은 다음을 통합합니다:

  • 다중 모델 감지: ResNet 백본으로 강화된 CRAFT 기반 텍스트 위치 지정
  • 적응형 인식: 스크립트별 특화 모델(라틴어용 CRNN, CJK용 Transformer)
  • 문맥 인식 처리: 단락 재구성 및 읽기 순서 유지

성능 벤치마크는 다양한 문서 유형에서 일관된 결과를 보여줍니다:

문서 유형정확도처리 속도하드웨어
비즈니스 문서98.6%42페이지/분NVIDIA T4
모바일 촬영 이미지94.2%28이미지/분Google Colab GPU
역사적 문서89.1%15페이지/분CPU 클러스터

OCR 텍스트 인식 및 추출을 위한 EasyOCR

이 아키텍처는 문서를 3단계로 최적화하여 처리합니다:

  1. 감지: 픽셀 수준의 텍스트 영역 분할
  2. 인식: 언어 모델링을 통한 시퀀스 예측
  3. 재구성: 공간적 관계 매핑
GitHub

GitHub 통계

이름:
언어:
별:
포크:
특허:
저장소가 마지막으로 업데이트된 시간:

핵심 기술 기능

1. 고급 텍스트 감지

감지 하위 시스템에는 다음이 포함됩니다:

  • 문자 수준의 히트맵 생성
  • 임의 형태의 텍스트 영역 처리
  • 다중 방향 지원(0-360°)
  • 배경 노이즈 억제

2. 하이브리드 인식 시스템

스크립트 유형별로 최적화된 인식 모델:

  • 라틴/키릴: 7개 CNN 레이어 + BiLSTM의 CRNN
  • 중국어/일본어/한국어: 12개 어텐션 헤드의 Transformer
  • 아랍어/히브리어: 오른쪽에서 왼쪽으로의 BiLSTM과 맞춤형 토큰화

3. 기업용 기능

  • 자동 품질 추정
  • 구성 가능한 정밀도/재현율 트레이드오프
  • 하드웨어 인식 리소스 할당

설치 및 구성

시스템 요구 사항

구성 요소개발프로덕션
Python3.6+3.8+
메모리8GB16GB 이상
GPU선택 사항NVIDIA(CUDA 11.8+)

설치 옵션

기본 설치


pip install easyocr  # CPU 전용 종속성 설치

GPU 지원(Linux/Windows)


pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118

Docker(프로덕션 배포)


docker run -it --gpus all -v $(pwd):/data \
  -e LANG_LIST="en,ko,zh" \
  jaidedai/easyocr

실용적인 구현 예시

1. 프로덕션 문서 처리 파이프라인

전처리와 검증을 포함한 완전한 OCR 워크플로우:

프로덕션 준비 처리


from easyocr import Reader
import cv2
import numpy as np

class DocumentOCR:
    def __init__(self, languages=['en']):
        self.reader = Reader(languages, gpu=True)
        
    def preprocess(self, image):
        # 대비 향상
        lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
        l, a, b = cv2.split(lab)
        clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
        limg = cv2.merge([clahe.apply(l), a, b])
        return cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
    
    def process(self, image_path):
        img = cv2.imread(image_path)
        processed = self.preprocess(img)
        results = self.reader.readtext(processed,
                                    batch_size=4,
                                    paragraph=True,
                                    min_size=50,
                                    text_threshold=0.8)
        return {
            'text': [r[1] for r in results],
            'confidence': np.mean([r[2] for r in results])
        }

# 사용 예
ocr = DocumentOCR(languages=['en','ko'])
result = ocr.process('법률계약서.jpg')
print(f"평균 정확도: {result['confidence']:.2%}")

2. 청구서 일괄 처리

다양한 청구서 형식에서 주요 필드 추출:

청구서 데이터 추출


import easyocr
import re
from pathlib import Path

reader = easyocr.Reader(['ko'])

INVOICE_PATTERNS = {
    'invoice_no': r'청구서\s*번호[:#]?\s*([A-Z0-9-]+)',
    'date': r'날짜[:]?\s*(\d{4}[/-]\d{2}[/-]\d{2})',
    'amount': r'총\s*금액[:]?\s*\$?(\d+\.\d{2})'
}

def process_invoices(folder):
    results = []
    for invoice in Path(folder).glob('*.pdf'):
        text = '\n'.join(reader.readtext(str(invoice), detail=0))
        extracted = {field: re.search(pattern, text) 
                    for field, pattern in INVOICE_PATTERNS.items()}
        results.append({
            'file': invoice.name,
            'data': {k: v.group(1) if v else None 
                     for k, v in extracted.items()}
        })
    return results
invoices_data = process_invoices('/청구서/')

성능 최적화

GPU 가속

  • 일괄 처리: 최적의 배치 크기(GPU 메모리에 따라 4-16)
  • 메모리 관리: 대용량 문서 자동 분할
  • 혼합 정밀도: Tensor 코어를 사용한 FP16 추론

정확도 튜닝

  • 대비 임계값: 저품질 스캔을 위해 contrast_ths 조정
  • 텍스트 크기 필터링: 작은 텍스트 무시를 위해 min_size 설정
  • 언어 우선 순위: 예상 빈도로 언어 정렬

유사한 제품

 한국인