# 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 ``` ## 🔧 사용법 ### 기본 사용법 ```python 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']}") ``` ### 실행 프로바이더 선택 ```python # 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가지 감지 방식을 지원합니다: ```python # 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') ``` ### 텍스트 필터링 ```python # 중국어 텍스트만 필터링 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` (최적화 모델) ## 🛠️ 설치 요구사항 ```bash pip install onnxruntime-gpu # GPU 사용 시 pip install onnxruntime # CPU만 사용 시 pip install opencv-python pip install numpy ``` ## 🧪 테스트 실행 ```bash cd onnx_ocr_module python test/test_onnx_ocr.py ``` ## 🔄 기존 OCRModule 대체 기존 코드 수정 없이 완전 대체 가능합니다: ```python # 기존 코드 # 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 모듈을 사용하세요! 🚀