# 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