133 lines
5.2 KiB
Markdown
133 lines
5.2 KiB
Markdown
# Capítulo 4: Comparativa de Soluciones OCR
|
|
|
|
## 4.1 Introducción
|
|
|
|
Este capítulo presenta los resultados del estudio comparativo realizado entre tres soluciones OCR de código abierto: EasyOCR, PaddleOCR y DocTR. Los experimentos fueron documentados en el notebook `ocr_benchmark_notebook.ipynb` del repositorio. El objetivo es identificar el modelo base más prometedor para la posterior fase de optimización de hiperparámetros.
|
|
|
|
## 4.2 Configuración del Experimento
|
|
|
|
### 4.2.1 Dataset de Evaluación
|
|
|
|
Se utilizó el documento "Instrucciones para la redacción y elaboración del TFE" del Máster Universitario en Inteligencia Artificial de UNIR, ubicado en la carpeta `instructions/`.
|
|
|
|
| Característica | Valor |
|
|
|----------------|-------|
|
|
| Número de páginas evaluadas | 5 (páginas 1-5 en benchmark inicial) |
|
|
| Formato | PDF digital (no escaneado) |
|
|
| Idioma | Español |
|
|
| Resolución de conversión | 300 DPI |
|
|
|
|
### 4.2.2 Configuración de los Modelos
|
|
|
|
Según el código en `ocr_benchmark_notebook.ipynb`:
|
|
|
|
**EasyOCR**:
|
|
```python
|
|
easyocr_reader = easyocr.Reader(['es', 'en']) # Spanish and English
|
|
```
|
|
|
|
**PaddleOCR (PP-OCRv5)**:
|
|
```python
|
|
paddleocr_model = PaddleOCR(
|
|
text_detection_model_name="PP-OCRv5_server_det",
|
|
text_recognition_model_name="PP-OCRv5_server_rec",
|
|
use_doc_orientation_classify=False,
|
|
use_doc_unwarping=False,
|
|
use_textline_orientation=True,
|
|
)
|
|
```
|
|
Versión utilizada: PaddleOCR 3.2.0 (según output del notebook)
|
|
|
|
**DocTR**:
|
|
```python
|
|
doctr_model = ocr_predictor(det_arch="db_resnet50", reco_arch="sar_resnet31", pretrained=True)
|
|
```
|
|
|
|
### 4.2.3 Métricas de Evaluación
|
|
|
|
Se utilizó la biblioteca `jiwer` para calcular CER y WER:
|
|
```python
|
|
from jiwer import wer, cer
|
|
|
|
def evaluate_text(reference, prediction):
|
|
return {'WER': wer(reference, prediction), 'CER': cer(reference, prediction)}
|
|
```
|
|
|
|
## 4.3 Resultados del Benchmark
|
|
|
|
### 4.3.1 Resultados de PaddleOCR (Datos del CSV)
|
|
|
|
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, se obtienen los siguientes resultados de PaddleOCR para las páginas 5-9 del documento:
|
|
|
|
| Página | WER | CER |
|
|
|--------|-----|-----|
|
|
| 5 | 12.16% | 6.33% |
|
|
| 6 | 12.81% | 6.40% |
|
|
| 7 | 11.06% | 6.24% |
|
|
| 8 | 8.13% | 1.54% |
|
|
| 9 | 10.61% | 5.58% |
|
|
|
|
**Promedio PaddleOCR (páginas 5-9):**
|
|
- CER medio: ~5.22%
|
|
- WER medio: ~10.95%
|
|
|
|
### 4.3.2 Comparativa de Modelos
|
|
|
|
Según la documentación del notebook `ocr_benchmark_notebook.ipynb`, los tres modelos evaluados representan diferentes paradigmas de OCR:
|
|
|
|
| Modelo | Tipo | Componentes | Fortalezas Clave |
|
|
|--------|------|-------------|------------------|
|
|
| **EasyOCR** | End-to-end (det + rec) | DB + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
|
|
| **PaddleOCR (PP-OCR)** | End-to-end (det + rec + cls) | DB + SRN/CRNN | Soporte multilingüe robusto, pipeline configurable |
|
|
| **DocTR** | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/VitSTR | Orientado a investigación, API limpia |
|
|
|
|
### 4.3.3 Ejemplo de Salida OCR
|
|
|
|
Del archivo CSV, un ejemplo de predicción de PaddleOCR para la página 8:
|
|
|
|
> "Escribe siempre al menos un párrafo de introducción en cada capítulo o apartado, explicando de qué vas a tratar en esa sección. Evita que aparezcan dos encabezados de nivel consecutivos sin ningún texto entre medias. [...] En esta titulacióon se cita de acuerdo con la normativa Apa."
|
|
|
|
**Errores observados en este ejemplo:**
|
|
- `titulacióon` en lugar de `titulación` (carácter duplicado)
|
|
- `Apa` en lugar de `APA` (capitalización)
|
|
|
|
## 4.4 Justificación de la Selección de PaddleOCR
|
|
|
|
### 4.4.1 Criterios de Selección
|
|
|
|
Basándose en los resultados obtenidos y la documentación del benchmark:
|
|
|
|
1. **Rendimiento**: PaddleOCR obtuvo CER entre 1.54% y 6.40% en las páginas evaluadas
|
|
2. **Configurabilidad**: PaddleOCR ofrece múltiples hiperparámetros ajustables:
|
|
- Umbrales de detección (`text_det_thresh`, `text_det_box_thresh`)
|
|
- Umbral de reconocimiento (`text_rec_score_thresh`)
|
|
- Componentes opcionales (`use_textline_orientation`, `use_doc_orientation_classify`, `use_doc_unwarping`)
|
|
|
|
3. **Documentación oficial**: [PaddleOCR Documentation](https://www.paddleocr.ai/v3.0.0/en/version3.x/pipeline_usage/OCR.html)
|
|
|
|
### 4.4.2 Decisión
|
|
|
|
**Se selecciona PaddleOCR (PP-OCRv5)** para la fase de optimización debido a:
|
|
- Resultados iniciales prometedores (CER ~5%)
|
|
- Alta configurabilidad de hiperparámetros de inferencia
|
|
- Pipeline modular que permite experimentación
|
|
|
|
## 4.5 Limitaciones del Benchmark
|
|
|
|
1. **Tamaño reducido**: Solo 5 páginas evaluadas en el benchmark comparativo inicial
|
|
2. **Único tipo de documento**: Documentos académicos de UNIR únicamente
|
|
3. **Ground truth**: El texto de referencia se extrajo automáticamente del PDF, lo cual puede introducir errores en layouts complejos
|
|
|
|
## 4.6 Resumen del Capítulo
|
|
|
|
Este capítulo ha presentado:
|
|
|
|
1. La configuración del benchmark según `ocr_benchmark_notebook.ipynb`
|
|
2. Los resultados cuantitativos de PaddleOCR del archivo CSV de resultados
|
|
3. La justificación de la selección de PaddleOCR para optimización
|
|
|
|
**Fuentes de datos utilizadas:**
|
|
- `ocr_benchmark_notebook.ipynb`: Código del benchmark
|
|
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`: Resultados numéricos
|
|
- Documentación oficial de PaddleOCR
|