Markdown chapters.
This commit is contained in:
132
docs/04_comparativa_soluciones.md
Normal file
132
docs/04_comparativa_soluciones.md
Normal file
@@ -0,0 +1,132 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user