4.5 KiB
4.5 KiB
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% 호환
🎯 특장점
- 완벽한 호환성: 기존 OCRModule API와 100% 동일
- 더 빠른 성능: 특히 CUDA 환경에서 우수한 성능
- 유연한 백엔드: CPU/CUDA/TensorRT 자동 선택
- 메모리 최적화: 안전한 이미지 크기 조정 및 메모리 관리
- 다양한 감지 방식: 5가지 텍스트 영역 감지 방식 지원
기존 PaddleOCR 모듈을 그대로 대체하면서 더 빠른 성능을 원한다면 이 ONNX 모듈을 사용하세요! 🚀