160 lines
4.5 KiB
Markdown
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 모듈을 사용하세요! 🚀
|