AutoPercenty3/test/test_onnx_ocr_module/README.md

160 lines
4.5 KiB
Markdown

# 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 모듈을 사용하세요! 🚀