IMG_Worker/modules/onnx_ocr_module
Your Name 938c998cf3 Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
..
__pycache__ Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
dict Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
models Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
src Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
test Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
README.md Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
__init__.py Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
run_ocr_test.py Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00
setup_onnx_ocr.py Initial commit: IMG Worker project setup 2025-10-25 00:48:06 +09:00

README.md

ONNX OCR 모듈

기존 PaddleOCR 기반 OCRModule을 완전히 대체할 수 있는 ONNX Runtime 기반 OCR 모듈입니다.

🚀 성능 비교

벤치마크 결과 (테스트 이미지 기준):

모델 시간(ms) 텍스트 수 성능 비교
ONNX CUDA 108.5 18 🥇 최고 성능
ONNX CPU 174.8 18 1.61배 느림
Paddle CPU 193.4 14 1.78배 느림
Paddle CUDA 191.8 14 1.77배 느림

결론: ONNX CUDA가 PaddlePaddle보다 약 1.77배 빠른 성능을 보여줍니다!

📁 폴더 구조

onnx_ocr_module/
├── models/              # ONNX 모델 파일들
│   ├── det_dyn.*.onnx  # 텍스트 감지 모델
│   ├── rec_dyn.*.onnx  # 텍스트 인식 모델
│   └── cls_dyn.*.onnx  # 텍스트 방향 분류 모델
├── dict/               # 문자 사전
│   └── ppocr_keys_v1.txt
├── src/                # 소스 코드
│   ├── __init__.py
│   └── onnx_ocr_module.py
├── test/               # 테스트 코드
│   ├── test_onnx_ocr.py
│   └── 1.jpg
└── README.md

🔧 사용법

기본 사용법

from onnx_ocr_module import ONNXOCRModule

# 모듈 초기화 (기존 OCRModule과 동일한 인터페이스)
ocr_module = ONNXOCRModule(
    logger=your_logger,
    gpu_manager=your_gpu_manager,
    execution_provider='auto'  # 'auto', 'cpu', 'cuda', 'tensorrt'
)

# 텍스트 감지 (기존과 동일한 인터페이스)
results = ocr_module.detect_text("image.jpg", method='polygon')

for result in results:
    print(f"텍스트: {result['text']}")
    print(f"신뢰도: {result['confidence']}")
    print(f"좌표: {result['bbox']}")

실행 프로바이더 선택

# CPU 사용
ocr_cpu = ONNXOCRModule(execution_provider='cpu')

# CUDA 사용 (NVIDIA GPU 필요)
ocr_cuda = ONNXOCRModule(execution_provider='cuda')

# TensorRT 사용 (TensorRT 설치 필요)
ocr_tensorrt = ONNXOCRModule(execution_provider='tensorrt')

# 자동 선택 (추천)
ocr_auto = ONNXOCRModule(execution_provider='auto')

감지 방식

기존 OCRModule과 동일한 5가지 감지 방식을 지원합니다:

# 1. 폴리곤 방식 (기본)
results = ocr_module.detect_text("image.jpg", method='polygon')

# 2. 바운딩 박스 방식
results = ocr_module.detect_text("image.jpg", method='bbox')

# 3. 확장된 바운딩 박스 방식
results = ocr_module.detect_text("image.jpg", method='expanded_bbox')

# 4. 회전된 바운딩 박스 방식
results = ocr_module.detect_text("image.jpg", method='rotated_bbox')

# 5. 컨투어 방식
results = ocr_module.detect_text("image.jpg", method='contour')

텍스트 필터링

# 중국어 텍스트만 필터링
chinese_results = ocr_module.filter_chinese_text(results)

# 한글 텍스트만 필터링
korean_results = ocr_module.filter_korean_text(results)

📊 모델 종류

실행 프로바이더에 따라 최적화된 모델을 자동 선택합니다:

  • CPU: *_dyn.simp.onnx (단순화 모델)
  • CUDA: *_dyn.fp16.onnx (FP16 모델)
  • TensorRT: *_dyn.opt.onnx (최적화 모델)

🛠️ 설치 요구사항

pip install onnxruntime-gpu  # GPU 사용 시
pip install onnxruntime      # CPU만 사용 시
pip install opencv-python
pip install numpy

🧪 테스트 실행

cd onnx_ocr_module
python test/test_onnx_ocr.py

🔄 기존 OCRModule 대체

기존 코드 수정 없이 완전 대체 가능합니다:

# 기존 코드
# from src.modules.ocr_module import OCRModule

# 새 코드 (인터페이스 동일)
from onnx_ocr_module import OCRModule  # 또는 ONNXOCRModule

성능 특징

  • 빠른 속도: PaddlePaddle 대비 최대 1.77배 빠름
  • 낮은 메모리: 최적화된 ONNX 모델 사용
  • 범용성: 다양한 플랫폼 지원
  • GPU 가속: CUDA/TensorRT 지원
  • 호환성: 기존 OCRModule과 100% 호환

🎯 특장점

  1. 완벽한 호환성: 기존 OCRModule API와 100% 동일
  2. 더 빠른 성능: 특히 CUDA 환경에서 우수한 성능
  3. 유연한 백엔드: CPU/CUDA/TensorRT 자동 선택
  4. 메모리 최적화: 안전한 이미지 크기 조정 및 메모리 관리
  5. 다양한 감지 방식: 5가지 텍스트 영역 감지 방식 지원

기존 PaddleOCR 모듈을 그대로 대체하면서 더 빠른 성능을 원한다면 이 ONNX 모듈을 사용하세요! 🚀