diff --git a/README.md b/README.md index 66bc978..0d4c4f7 100644 --- a/README.md +++ b/README.md @@ -285,7 +285,7 @@ python3 apply_content.py ### Contenido Generado Automáticamente -- **30 tablas** con formato APA (Tabla X. *Título* + Fuente: ...) +- **53 tablas** con formato APA (Tabla X. *Título* + Fuente: ...) - **8 figuras** desde Mermaid (Figura X. *Título* + Fuente: Elaboración propia) - **25 referencias** en formato APA con sangría francesa - **Resumen/Abstract** con palabras clave diff --git a/apply_content.py b/apply_content.py index 98ebc4e..0f28fcf 100644 --- a/apply_content.py +++ b/apply_content.py @@ -34,6 +34,8 @@ def md_to_html_para(text): text = re.sub(r'\*([^*]+)\*', r'\1', text) # Inline code text = re.sub(r'`([^`]+)`', r'\1', text) + # Links [text](url) -> text + text = re.sub(r'\[([^\]]+)\]\(([^)]+)\)', r'\1', text) return text def extract_table_title(lines, current_index): @@ -169,6 +171,7 @@ def parse_md_to_html_blocks(md_content): # Check if previous line has table title (e.g., **Tabla 1.** *Title*) table_title = None + alt_title = None # Alternative title from **bold text:** pattern table_source = "Elaboración propia" # Look back for table title @@ -178,6 +181,9 @@ def parse_md_to_html_blocks(md_content): # Extract title text table_title = re.sub(r'\*+', '', prev_line).strip() break + elif prev_line.startswith('**') and prev_line.endswith(':**'): + # Alternative: **Bold title:** pattern (for informal tables) + alt_title = re.sub(r'\*+', '', prev_line).rstrip(':').strip() elif prev_line and not prev_line.startswith('|'): break @@ -198,26 +204,30 @@ def parse_md_to_html_blocks(md_content): # Word TOC looks for text with Caption style - anchor must be outside main caption text bookmark_id = f"_Ref_Tab{table_counter}" if table_title: - clean_title = table_title.replace(f"Tabla {table_counter}.", "").strip() + # Remove any "Tabla X." or "Tabla AX." pattern from the title + clean_title = re.sub(r'^Tabla\s+[A-Z]?\d+\.\s*', '', table_title).strip() + elif alt_title: + # Use alternative title from **bold text:** pattern + clean_title = alt_title else: clean_title = "Tabla de datos." html_blocks.append(f'''

Tabla {table_counter}. {clean_title}

''') # Build table HTML with APA style (horizontal lines only, no vertical) - table_html = '' + table_html = '
' for j, tline in enumerate(table_lines): cells = [c.strip() for c in tline.split('|')[1:-1]] table_html += '' for cell in cells: if j == 0: # Header row: top and bottom border, bold text - table_html += f'' + table_html += f'' elif j == len(table_lines) - 1: # Last row: bottom border only - table_html += f'' + table_html += f'' else: # Middle rows: no borders - table_html += f'' + table_html += f'' table_html += '' table_html += '

{md_to_html_para(cell)}

{md_to_html_para(cell)}

{md_to_html_para(cell)}

{md_to_html_para(cell)}

{md_to_html_para(cell)}

{md_to_html_para(cell)}

' html_blocks.append(table_html) diff --git a/thesis_output/plantilla_individual.htm b/thesis_output/plantilla_individual.htm index 8b544dc..00ae5b9 100644 --- a/thesis_output/plantilla_individual.htm +++ b/thesis_output/plantilla_individual.htm @@ -4547,7 +4547,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>El procesamiento de documentos en español presenta particularidades que complican el reconocimiento automático de texto. Los caracteres especiales propios del idioma (la letra ñ, las vocales acentuadas á, é, í, ó, ú, la diéresis ü, y los signos de puntuación invertidos ¿ y ¡) no están presentes en muchos conjuntos de entrenamiento internacionales, lo que puede degradar el rendimiento de modelos preentrenados predominantemente en inglés.

La Tabla 1 resume los principales desafíos lingüísticos del OCR en español:

Tabla 1. Desafíos lingüísticos específicos del OCR en español.

-

Desafío

Descripción

Impacto en OCR

Caracteres especiales

ñ, á, é, í, ó, ú, ü, ¿, ¡

Confusión con caracteres similares (n/ñ, a/á)

Palabras largas

Español permite compuestos largos

Mayor probabilidad de error por carácter

Abreviaturas

Dr., Sra., Ud., etc.

Puntos internos confunden segmentación

Nombres propios

Tildes en apellidos (García, Martínez)

Bases de datos sin soporte Unicode

+

Desafío

Descripción

Impacto en OCR

Caracteres especiales

ñ, á, é, í, ó, ú, ü, ¿, ¡

Confusión con caracteres similares (n/ñ, a/á)

Palabras largas

Español permite compuestos largos

Mayor probabilidad de error por carácter

Abreviaturas

Dr., Sra., Ud., etc.

Puntos internos confunden segmentación

Nombres propios

Tildes en apellidos (García, Martínez)

Bases de datos sin soporte Unicode

Fuente: Elaboración propia.

 

Además de los aspectos lingüísticos, los documentos académicos y administrativos en español presentan características tipográficas que complican el reconocimiento: variaciones en fuentes entre encabezados, cuerpo y notas al pie; presencia de tablas con bordes y celdas; logotipos institucionales; marcas de agua; y elementos gráficos como firmas o sellos. Estos elementos generan ruido que puede propagarse en aplicaciones downstream como la extracción de entidades nombradas o el análisis semántico.

@@ -4556,7 +4556,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>La adaptación de modelos preentrenados a dominios específicos típicamente requiere fine-tuning con datos etiquetados del dominio objetivo y recursos computacionales significativos. El fine-tuning de un modelo de reconocimiento de texto puede requerir decenas de miles de imágenes etiquetadas y días de entrenamiento en GPUs de alta capacidad. Esta barrera técnica y económica excluye a muchos investigadores y organizaciones de beneficiarse plenamente de estas tecnologías.

La Tabla 2 ilustra los requisitos típicos para diferentes estrategias de mejora de OCR:

Tabla 2. Comparación de estrategias de mejora de modelos OCR.

-

Estrategia

Datos requeridos

Hardware

Tiempo

Expertise

Fine-tuning completo

>10,000 imágenes etiquetadas

GPU (≥16GB VRAM)

Días-Semanas

Alto

Fine-tuning parcial

>1,000 imágenes etiquetadas

GPU (≥8GB VRAM)

Horas-Días

Medio-Alto

Transfer learning

>500 imágenes etiquetadas

GPU (≥8GB VRAM)

Horas

Medio

Optimización de hiperparámetros

<100 imágenes de validación

CPU suficiente

Horas

Bajo-Medio

+

Estrategia

Datos requeridos

Hardware

Tiempo

Expertise

Fine-tuning completo

>10,000 imágenes etiquetadas

GPU (≥16GB VRAM)

Días-Semanas

Alto

Fine-tuning parcial

>1,000 imágenes etiquetadas

GPU (≥8GB VRAM)

Horas-Días

Medio-Alto

Transfer learning

>500 imágenes etiquetadas

GPU (≥8GB VRAM)

Horas

Medio

Optimización de hiperparámetros

<100 imágenes de validación

CPU suficiente

Horas

Bajo-Medio

Fuente: Elaboración propia.

 

La oportunidad: optimización sin fine-tuning

@@ -4581,7 +4581,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>Alcance y delimitación

Este trabajo se centra específicamente en:

Tabla 3. Delimitación del alcance del trabajo.

-

Aspecto

Dentro del alcance

Fuera del alcance

Tipo de documento

Documentos académicos digitales (PDF)

Documentos escaneados, manuscritos

Idioma

Español

Otros idiomas

Modelos

EasyOCR, PaddleOCR, DocTR

Soluciones comerciales (Google Cloud Vision, AWS Textract)

Método de mejora

Optimización de hiperparámetros

Fine-tuning, aumento de datos

Hardware

Ejecución en CPU

Aceleración GPU

+

Aspecto

Dentro del alcance

Fuera del alcance

Tipo de documento

Documentos académicos digitales (PDF)

Documentos escaneados, manuscritos

Idioma

Español

Otros idiomas

Modelos

EasyOCR, PaddleOCR, DocTR

Soluciones comerciales (Google Cloud Vision, AWS Textract)

Método de mejora

Optimización de hiperparámetros

Fine-tuning, aumento de datos

Hardware

Ejecución en CPU

Aceleración GPU

Fuente: Elaboración propia.

 

Relevancia y beneficiarios

@@ -4656,8 +4656,8 @@ _Toc14106979">EAST (Efficient and Accurate Scene Text Detector): Propuesto por Zhou et al. (2017), EAST es un detector de una sola etapa que predice directamente cuadriláteros rotados o polígonos que encierran el texto. Su arquitectura FCN (Fully Convolutional Network) permite procesamiento eficiente de imágenes de alta resolución.

CRAFT (Character Region Awareness for Text Detection): Desarrollado por Baek et al. (2019), CRAFT detecta regiones de caracteres individuales y las agrupa en palabras mediante el análisis de mapas de afinidad. Esta aproximación bottom-up es especialmente efectiva para texto con espaciado irregular.

DB (Differentiable Binarization): Propuesto por Liao et al. (2020), DB introduce una operación de binarización diferenciable que permite entrenar end-to-end un detector de texto basado en segmentación. Esta arquitectura es la utilizada por PaddleOCR y destaca por su velocidad y precisión.

-

Tabla 4. Tabla 1. Comparativa de arquitecturas de detección de texto.

-

Arquitectura

Tipo

Salida

Fortalezas

Limitaciones

EAST

Single-shot

Cuadriláteros rotados

Rápido, simple

Dificultad con texto curvo

CRAFT

Bottom-up

Polígonos de palabra

Robusto a espaciado

Mayor coste computacional

DB

Segmentación

Polígonos arbitrarios

Rápido, preciso

Sensible a parámetros

+

Tabla 4. Comparativa de arquitecturas de detección de texto.

+

Arquitectura

Tipo

Salida

Fortalezas

Limitaciones

EAST

Single-shot

Cuadriláteros rotados

Rápido, simple

Dificultad con texto curvo

CRAFT

Bottom-up

Polígonos de palabra

Robusto a espaciado

Mayor coste computacional

DB

Segmentación

Polígonos arbitrarios

Rápido, preciso

Sensible a parámetros

Fuente: Elaboración propia.

 

Etapa 2: Reconocimiento de Texto (Text Recognition)

@@ -4670,8 +4670,8 @@ _Toc14106979">SVTR (Scene-Text Visual Transformer Recognition): Desarrollado por Du et al. (2022), SVTR aplica la arquitectura Transformer al reconocimiento de texto, utilizando parches de imagen como tokens de entrada. Esta aproximación elimina la necesidad de RNN y permite capturar dependencias globales de manera más eficiente.

Arquitecturas con Atención: Los modelos encoder-decoder con mecanismos de atención (Bahdanau et al., 2015) permiten al decodificador "enfocarse" en diferentes partes de la imagen mientras genera cada carácter. Esto es especialmente útil para texto largo o con layouts complejos.

TrOCR (Transformer-based OCR): Propuesto por Li et al. (2023), TrOCR utiliza un Vision Transformer (ViT) como encoder y un Transformer de lenguaje como decoder, logrando resultados estado del arte en múltiples benchmarks.

-

Tabla 5. Tabla 2. Comparativa de arquitecturas de reconocimiento de texto.

-

Arquitectura

Encoder

Decoder

Pérdida

Características

CRNN

CNN

BiLSTM

CTC

Rápido, robusto

SVTR

ViT

Linear

CTC

Sin recurrencia

Attention-based

CNN

LSTM+Attn

Cross-entropy

Flexible longitud

TrOCR

ViT

Transformer

Cross-entropy

Estado del arte

+

Tabla 5. Comparativa de arquitecturas de reconocimiento de texto.

+

Arquitectura

Encoder

Decoder

Pérdida

Características

CRNN

CNN

BiLSTM

CTC

Rápido, robusto

SVTR

ViT

Linear

CTC

Sin recurrencia

Attention-based

CNN

LSTM+Attn

Cross-entropy

Flexible longitud

TrOCR

ViT

Transformer

Cross-entropy

Estado del arte

Fuente: Elaboración propia.

 

Métricas de Evaluación

@@ -4752,16 +4752,16 @@ _Toc14106979"> - Encoder: Vision Transformer modificado - Decoder: CTC o Attention-based - Vocabulario: Configurable por idioma

Hiperparámetros configurables:

PaddleOCR expone numerosos hiperparámetros que permiten ajustar el comportamiento del sistema. Los más relevantes para este trabajo son:

-

Tabla 6. Tabla 3. Hiperparámetros de detección de PaddleOCR.

-

Parámetro

Descripción

Rango

Defecto

text_det_thresh

Umbral de probabilidad para píxeles de texto

[0.0, 1.0]

0.3

text_det_box_thresh

Umbral de confianza para cajas detectadas

[0.0, 1.0]

0.6

text_det_unclip_ratio

Factor de expansión de cajas detectadas

[0.0, 3.0]

1.5

text_det_limit_side_len

Tamaño máximo del lado de imagen

[320, 2560]

960

+

Tabla 6. Hiperparámetros de detección de PaddleOCR.

+

Parámetro

Descripción

Rango

Defecto

text_det_thresh

Umbral de probabilidad para píxeles de texto

[0.0, 1.0]

0.3

text_det_box_thresh

Umbral de confianza para cajas detectadas

[0.0, 1.0]

0.6

text_det_unclip_ratio

Factor de expansión de cajas detectadas

[0.0, 3.0]

1.5

text_det_limit_side_len

Tamaño máximo del lado de imagen

[320, 2560]

960

Fuente: Elaboración propia.

 

-

Tabla 7. Tabla 4. Hiperparámetros de reconocimiento de PaddleOCR.

-

Parámetro

Descripción

Rango

Defecto

text_rec_score_thresh

Umbral de confianza para resultados

[0.0, 1.0]

0.5

use_textline_orientation

Activar clasificación de orientación de línea

{True, False}

False

rec_batch_size

Tamaño de batch para reconocimiento

[1, 64]

6

+

Tabla 7. Hiperparámetros de reconocimiento de PaddleOCR.

+

Parámetro

Descripción

Rango

Defecto

text_rec_score_thresh

Umbral de confianza para resultados

[0.0, 1.0]

0.5

use_textline_orientation

Activar clasificación de orientación de línea

{True, False}

False

rec_batch_size

Tamaño de batch para reconocimiento

[1, 64]

6

Fuente: Elaboración propia.

 

-

Tabla 8. Tabla 5. Hiperparámetros de preprocesamiento de PaddleOCR.

-

Parámetro

Descripción

Impacto

use_doc_orientation_classify

Clasificación de orientación del documento

Alto para documentos escaneados

use_doc_unwarping

Corrección de deformación/curvatura

Alto para fotos de documentos

use_angle_cls

Clasificador de ángulo 0°/180°

Medio para documentos rotados

+

Tabla 8. Hiperparámetros de preprocesamiento de PaddleOCR.

+

Parámetro

Descripción

Impacto

use_doc_orientation_classify

Clasificación de orientación del documento

Alto para documentos escaneados

use_doc_unwarping

Corrección de deformación/curvatura

Alto para fotos de documentos

use_angle_cls

Clasificador de ángulo 0°/180°

Medio para documentos rotados

Fuente: Elaboración propia.

 

Fortalezas de PaddleOCR:

@@ -4791,12 +4791,12 @@ _Toc14106979">·     Comunidad más pequeña

·     Menos opciones de modelos preentrenados para idiomas no ingleses

Comparativa Detallada de Soluciones

-

Tabla 9. Tabla 6. Comparativa técnica de soluciones OCR de código abierto.

-

Aspecto

EasyOCR

PaddleOCR

DocTR

Framework

PyTorch

PaddlePaddle

TF/PyTorch

Detector

CRAFT

DB

DB/LinkNet

Reconocedor

CRNN

SVTR/CRNN

CRNN/SAR/ViTSTR

Idiomas

80+

80+

9

Configurabilidad

Baja

Alta

Media

Documentación

Media

Alta (CN)

Alta (EN)

Actividad

Media

Alta

Media

Licencia

Apache 2.0

Apache 2.0

Apache 2.0

+

Tabla 9. Comparativa técnica de soluciones OCR de código abierto.

+

Aspecto

EasyOCR

PaddleOCR

DocTR

Framework

PyTorch

PaddlePaddle

TF/PyTorch

Detector

CRAFT

DB

DB/LinkNet

Reconocedor

CRNN

SVTR/CRNN

CRNN/SAR/ViTSTR

Idiomas

80+

80+

9

Configurabilidad

Baja

Alta

Media

Documentación

Media

Alta (CN)

Alta (EN)

Actividad

Media

Alta

Media

Licencia

Apache 2.0

Apache 2.0

Apache 2.0

Fuente: Elaboración propia.

 

-

Tabla 10. Tabla 7. Comparativa de facilidad de uso.

-

Aspecto

EasyOCR

PaddleOCR

DocTR

Instalación

pip install

pip install

pip install

Líneas para OCR básico

3

5

6

GPU requerida

Opcional

Opcional

Opcional

Memoria mínima

2 GB

4 GB

4 GB

+

Tabla 10. Comparativa de facilidad de uso.

+

Aspecto

EasyOCR

PaddleOCR

DocTR

Instalación

pip install

pip install

pip install

Líneas para OCR básico

3

5

6

GPU requerida

Opcional

Opcional

Opcional

Memoria mínima

2 GB

4 GB

4 GB

Fuente: Elaboración propia.

 

Optimización de Hiperparámetros

@@ -4895,8 +4895,8 @@ _Toc14106979">FUNSD-ES: Versión en español del Form Understanding in Noisy Scanned Documents dataset. Contiene formularios escaneados con anotaciones de texto y estructura.

MLT (ICDAR Multi-Language Text): Dataset multilingüe de las competiciones ICDAR que incluye muestras en español. Las ediciones 2017 y 2019 contienen texto en escenas naturales.

XFUND: Dataset de comprensión de formularios en múltiples idiomas, incluyendo español, con anotaciones de entidades y relaciones.

-

Tabla 11. Tabla 8. Datasets públicos con contenido en español.

-

Dataset

Tipo

Idiomas

Tamaño

Uso principal

FUNSD-ES

Formularios

ES

~200 docs

Document understanding

MLT 2019

Escenas

Multi (incl. ES)

10K imgs

Text detection

XFUND

Formularios

7 (incl. ES)

1.4K docs

Information extraction

+

Tabla 11. Datasets públicos con contenido en español.

+

Dataset

Tipo

Idiomas

Tamaño

Uso principal

FUNSD-ES

Formularios

ES

~200 docs

Document understanding

MLT 2019

Escenas

Multi (incl. ES)

10K imgs

Text detection

XFUND

Formularios

7 (incl. ES)

1.4K docs

Information extraction

Fuente: Elaboración propia.

 

Limitaciones de Recursos para Español

@@ -4911,8 +4911,8 @@ _Toc14106979">Digitalización de archivos históricos: Múltiples proyectos han abordado el reconocimiento de manuscritos coloniales y documentos históricos en español, utilizando técnicas de HTR (Handwritten Text Recognition) adaptadas (Romero et al., 2013).

Procesamiento de documentos de identidad: Sistemas OCR especializados para DNI, pasaportes y documentos oficiales españoles y latinoamericanos (Bulatov et al., 2020).

Reconocimiento de texto en escenas: Participaciones en competiciones ICDAR para detección y reconocimiento de texto en español en imágenes naturales.

-

Tabla 12. Tabla 9. Trabajos previos relevantes en OCR para español.

-

Trabajo

Enfoque

Contribución

Romero et al. (2013)

HTR histórico

Modelos HMM para manuscritos

Bulatov et al. (2020)

Documentos ID

Pipeline especializado

Fischer et al. (2012)

Multilingual

Transferencia entre idiomas

+

Tabla 12. Trabajos previos relevantes en OCR para español.

+

Trabajo

Enfoque

Contribución

Romero et al. (2013)

HTR histórico

Modelos HMM para manuscritos

Bulatov et al. (2020)

Documentos ID

Pipeline especializado

Fischer et al. (2012)

Multilingual

Transferencia entre idiomas

Fuente: Elaboración propia.

 

La optimización de hiperparámetros para documentos académicos en español representa una contribución original de este trabajo, abordando un nicho no explorado en la literatura.

@@ -4932,8 +4932,8 @@ concretos y metodología de trabajo
Objetivo general

Optimizar el rendimiento de PaddleOCR para documentos académicos en español mediante ajuste de hiperparámetros, alcanzando un CER inferior al 2% sin requerir fine-tuning del modelo ni recursos GPU dedicados.

Justificación SMART del Objetivo General

-

Tabla 13. Tabla 4. Justificación SMART del objetivo general.

-

Criterio

Cumplimiento

Específico (S)

Se define claramente qué se quiere lograr: optimizar PaddleOCR mediante ajuste de hiperparámetros para documentos en español

Medible (M)

Se establece una métrica cuantificable: CER < 2%

Alcanzable (A)

Es viable dado que: (1) PaddleOCR permite configuración de hiperparámetros, (2) Ray Tune posibilita búsqueda automatizada, (3) No se requiere GPU

Relevante (R)

El impacto es demostrable: mejora la extracción de texto en documentos académicos sin costes adicionales de infraestructura

Temporal (T)

El plazo es un cuatrimestre, correspondiente al TFM

+

Tabla 13. Justificación SMART del objetivo general.

+

Criterio

Cumplimiento

Específico (S)

Se define claramente qué se quiere lograr: optimizar PaddleOCR mediante ajuste de hiperparámetros para documentos en español

Medible (M)

Se establece una métrica cuantificable: CER < 2%

Alcanzable (A)

Es viable dado que: (1) PaddleOCR permite configuración de hiperparámetros, (2) Ray Tune posibilita búsqueda automatizada, (3) No se requiere GPU

Relevante (R)

El impacto es demostrable: mejora la extracción de texto en documentos académicos sin costes adicionales de infraestructura

Temporal (T)

El plazo es un cuatrimestre, correspondiente al TFM

Fuente: Elaboración propia.

 

Objetivos específicos

@@ -4983,8 +4983,8 @@ concretos y metodología de trabajo
Fase 2: Benchmark Comparativo

Modelos Evaluados

-

Tabla 14. Tabla 5. Modelos OCR evaluados en el benchmark inicial.

-

Modelo

Versión

Configuración

EasyOCR

-

Idiomas: ['es', 'en']

PaddleOCR

PP-OCRv5

Modelos server_det + server_rec

DocTR

-

db_resnet50 + sar_resnet31

+

Tabla 14. Modelos OCR evaluados en el benchmark inicial.

+

Modelo

Versión

Configuración

EasyOCR

-

Idiomas: ['es', 'en']

PaddleOCR

PP-OCRv5

Modelos server_det + server_rec

DocTR

-

db_resnet50 + sar_resnet31

Fuente: Elaboración propia.

 

Métricas de Evaluación

@@ -4998,8 +4998,8 @@ def evaluate_text(reference, prediction): }

Fase 3: Espacio de Búsqueda

Hiperparámetros Seleccionados

-

Tabla 15. Tabla 6. Hiperparámetros seleccionados para optimización.

-

Parámetro

Tipo

Rango/Valores

Descripción

use_doc_orientation_classify

Booleano

[True, False]

Clasificación de orientación del documento

use_doc_unwarping

Booleano

[True, False]

Corrección de deformación del documento

textline_orientation

Booleano

[True, False]

Clasificación de orientación de línea de texto

text_det_thresh

Continuo

[0.0, 0.7]

Umbral de detección de píxeles de texto

text_det_box_thresh

Continuo

[0.0, 0.7]

Umbral de caja de detección

text_det_unclip_ratio

Fijo

0.0

Coeficiente de expansión (fijado)

text_rec_score_thresh

Continuo

[0.0, 0.7]

Umbral de confianza de reconocimiento

+

Tabla 15. Hiperparámetros seleccionados para optimización.

+

Parámetro

Tipo

Rango/Valores

Descripción

use_doc_orientation_classify

Booleano

[True, False]

Clasificación de orientación del documento

use_doc_unwarping

Booleano

[True, False]

Corrección de deformación del documento

textline_orientation

Booleano

[True, False]

Clasificación de orientación de línea de texto

text_det_thresh

Continuo

[0.0, 0.7]

Umbral de detección de píxeles de texto

text_det_box_thresh

Continuo

[0.0, 0.7]

Umbral de caja de detección

text_det_unclip_ratio

Fijo

0.0

Coeficiente de expansión (fijado)

text_rec_score_thresh

Continuo

[0.0, 0.7]

Umbral de confianza de reconocimiento

Fuente: Elaboración propia.

 

Configuración de Ray Tune

@@ -5057,13 +5057,13 @@ tuner = tune.Tuner(

4.   Métricas reportadas: CER, WER, tiempo de procesamiento

Entorno de Ejecución

Hardware

-

Tabla 16. Tabla 7. Especificaciones de hardware del entorno de desarrollo.

-

Componente

Especificación

CPU

AMD Ryzen 7 5800H

RAM

16 GB DDR4

GPU

NVIDIA RTX 3060 Laptop (5.66 GB VRAM)

Almacenamiento

SSD

+

Tabla 16. Especificaciones de hardware del entorno de desarrollo.

+

Componente

Especificación

CPU

AMD Ryzen 7 5800H

RAM

16 GB DDR4

GPU

NVIDIA RTX 3060 Laptop (5.66 GB VRAM)

Almacenamiento

SSD

Fuente: Elaboración propia.

 

Software

-

Tabla 17. Tabla 8. Versiones de software utilizadas.

-

Componente

Versión

Sistema Operativo

Ubuntu 24.04.3 LTS

Python

3.12.3

PaddleOCR

3.3.2

PaddlePaddle

3.2.2

Ray

2.52.1

Optuna

4.7.0

+

Tabla 17. Versiones de software utilizadas.

+

Componente

Versión

Sistema Operativo

Ubuntu 24.04.3 LTS

Python

3.12.3

PaddleOCR

3.3.2

PaddlePaddle

3.2.2

Ray

2.52.1

Optuna

4.7.0

Fuente: Elaboración propia.

 

Limitaciones Metodológicas

@@ -5111,8 +5111,8 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>1.   Calidad variable: Documentos digitales de alta calidad pero con posibles artefactos de compresión PDF.

Alternativas Evaluadas

Se seleccionaron tres soluciones OCR de código abierto representativas del estado del arte:

-

Tabla 18. Tabla 10. Soluciones OCR evaluadas en el benchmark comparativo.

-

Solución

Desarrollador

Versión

Justificación de selección

EasyOCR

Jaided AI

Última estable

Popularidad, facilidad de uso

PaddleOCR

Baidu

PP-OCRv5

Estado del arte industrial

DocTR

Mindee

Última estable

Orientación académica

+

Tabla 18. Soluciones OCR evaluadas en el benchmark comparativo.

+

Solución

Desarrollador

Versión

Justificación de selección

EasyOCR

Jaided AI

Última estable

Popularidad, facilidad de uso

PaddleOCR

Baidu

PP-OCRv5

Estado del arte industrial

DocTR

Mindee

Última estable

Orientación académica

Fuente: Elaboración propia.

 

Imágenes Docker disponibles en el registro del proyecto:

@@ -5129,8 +5129,8 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>Configuración del Experimento

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/.

-

Tabla 19. Tabla 11. Características del dataset de evaluación inicial.

-

Característica

Valor

Documento fuente

Instrucciones TFE UNIR

Número de páginas evaluadas

5 (benchmark inicial)

Formato

PDF digital (no escaneado)

Idioma principal

Español

Resolución de conversión

300 DPI

Formato de imagen

PNG

+

Tabla 19. Características del dataset de evaluación inicial.

+

Característica

Valor

Documento fuente

Instrucciones TFE UNIR

Número de páginas evaluadas

5 (benchmark inicial)

Formato

PDF digital (no escaneado)

Idioma principal

Español

Resolución de conversión

300 DPI

Formato de imagen

PNG

Fuente: Elaboración propia.

 

Proceso de Conversión

@@ -5222,8 +5222,8 @@ def evaluate_text(reference, prediction):

Resultados del Benchmark

Resultados de PaddleOCR (Configuración Baseline)

Durante el benchmark inicial se evaluó PaddleOCR con configuración por defecto en un subconjunto del dataset. Los resultados preliminares mostraron variabilidad significativa entre páginas, con CER entre 1.54% y 6.40% dependiendo de la complejidad del layout.

-

Tabla 20. Tabla 12. Variabilidad del CER por tipo de contenido.

-

Tipo de contenido

CER aproximado

Observaciones

Texto corrido

~1.5-2%

Mejor rendimiento

Texto con listas

~3-4%

Rendimiento medio

Tablas

~5-6%

Mayor dificultad

Encabezados + notas

~4-5%

Layouts mixtos

+

Tabla 20. Variabilidad del CER por tipo de contenido.

+

Tipo de contenido

CER aproximado

Observaciones

Texto corrido

~1.5-2%

Mejor rendimiento

Texto con listas

~3-4%

Rendimiento medio

Tablas

~5-6%

Mayor dificultad

Encabezados + notas

~4-5%

Layouts mixtos

Fuente: Elaboración propia.

 

Observaciones del benchmark inicial:

@@ -5233,8 +5233,8 @@ def evaluate_text(reference, prediction):

1.   Los errores más frecuentes fueron: confusión de acentos, caracteres duplicados, y errores en signos de puntuación.

Comparativa de Modelos

Los tres modelos evaluados representan diferentes paradigmas de OCR:

-

Tabla 21. Tabla 13. Comparativa de arquitecturas OCR evaluadas.

-

Modelo

Tipo

Componentes

Fortalezas Clave

EasyOCR

End-to-end (det + rec)

CRAFT + CRNN/Transformer

Ligero, fácil de usar, multilingüe

PaddleOCR

End-to-end (det + rec + cls)

DB + SVTR/CRNN

Soporte multilingüe robusto, pipeline configurable

DocTR

End-to-end (det + rec)

DB/LinkNet + CRNN/SAR/ViTSTR

Orientado a investigación, API limpia

+

Tabla 21. Comparativa de arquitecturas OCR evaluadas.

+

Modelo

Tipo

Componentes

Fortalezas Clave

EasyOCR

End-to-end (det + rec)

CRAFT + CRNN/Transformer

Ligero, fácil de usar, multilingüe

PaddleOCR

End-to-end (det + rec + cls)

DB + SVTR/CRNN

Soporte multilingüe robusto, pipeline configurable

DocTR

End-to-end (det + rec)

DB/LinkNet + CRNN/SAR/ViTSTR

Orientado a investigación, API limpia

Fuente: Elaboración propia.

 

Análisis Cualitativo de Errores

@@ -5257,8 +5257,8 @@ def evaluate_text(reference, prediction):

Justificación de la Selección de PaddleOCR

Criterios de Selección

La selección de PaddleOCR para la fase de optimización se basó en los siguientes criterios:

-

Tabla 22. Tabla 14. Evaluación de criterios de selección.

-

Criterio

EasyOCR

PaddleOCR

DocTR

CER benchmark

~6-8%

~5-6%

~7-9%

Configurabilidad

Baja (3 params)

Alta (>10 params)

Media (5 params)

Soporte español

Sí (dedicado)

Limitado

Documentación

Media

Alta

Alta

Mantenimiento

Medio

Alto

Medio

+

Tabla 22. Evaluación de criterios de selección.

+

Criterio

EasyOCR

PaddleOCR

DocTR

CER benchmark

~6-8%

~5-6%

~7-9%

Configurabilidad

Baja (3 params)

Alta (>10 params)

Media (5 params)

Soporte español

Sí (dedicado)

Limitado

Documentación

Media

Alta

Alta

Mantenimiento

Medio

Alto

Medio

Fuente: Elaboración propia.

 

Hiperparámetros Disponibles en PaddleOCR

@@ -5298,7 +5298,7 @@ def evaluate_text(reference, prediction):

·     Documentación oficial de PaddleOCR

Desarrollo de la comparativa: Optimización de hiperparámetros

Introducción

-

Esta sección describe el proceso de optimización de hiperparámetros de PaddleOCR utilizando Ray Tune con el algoritmo de búsqueda Optuna. Los experimentos fueron implementados en [src/run_tuning.py](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py) con la librería de utilidades [src/raytune_ocr.py](https://github.com/seryus/MastersThesis/blob/main/src/raytune_ocr.py), y los resultados se almacenaron en [src/results/](https://github.com/seryus/MastersThesis/tree/main/src/results).

+

Esta sección describe el proceso de optimización de hiperparámetros de PaddleOCR utilizando Ray Tune con el algoritmo de búsqueda Optuna. Los experimentos fueron implementados en src/run_tuning.py con la librería de utilidades src/raytune_ocr.py, y los resultados se almacenaron en src/results/.

La optimización de hiperparámetros representa una alternativa al fine-tuning tradicional que no requiere:

·     Acceso a GPU dedicada

·     Dataset de entrenamiento etiquetado

@@ -5306,8 +5306,8 @@ def evaluate_text(reference, prediction):

Configuración del Experimento

Entorno de Ejecución

El experimento se ejecutó en el siguiente entorno:

-

Tabla 23. Tabla 15. Entorno de ejecución del experimento.

-

Componente

Versión/Especificación

Sistema operativo

Ubuntu 24.04.3 LTS

Python

3.12.3

PaddlePaddle

3.2.2

PaddleOCR

3.3.2

Ray

2.52.1

Optuna

4.7.0

CPU

AMD Ryzen 7 5800H

RAM

16 GB DDR4

GPU

NVIDIA RTX 3060 Laptop (5.66 GB VRAM)

+

Tabla 23. Entorno de ejecución del experimento.

+

Componente

Versión/Especificación

Sistema operativo

Ubuntu 24.04.3 LTS

Python

3.12.3

PaddlePaddle

3.2.2

PaddleOCR

3.3.2

Ray

2.52.1

Optuna

4.7.0

CPU

AMD Ryzen 7 5800H

RAM

16 GB DDR4

GPU

NVIDIA RTX 3060 Laptop (5.66 GB VRAM)

Fuente: Elaboración propia.

 

Arquitectura de Ejecución

@@ -5337,8 +5337,8 @@ def evaluate_text(reference, prediction): }

Dataset Extendido

Para la fase de optimización se extendió el dataset:

-

Tabla 24. Tabla 16. Características del dataset de optimización.

-

Característica

Valor

Páginas totales

24

Páginas por trial

5 (páginas 5-10)

Estructura

Carpetas img/ y txt/ pareadas

Resolución

300 DPI

Formato imagen

PNG

+

Tabla 24. Características del dataset de optimización.

+

Característica

Valor

Páginas totales

24

Páginas por trial

5 (páginas 5-10)

Estructura

Carpetas img/ y txt/ pareadas

Resolución

300 DPI

Formato imagen

PNG

Fuente: Elaboración propia.

 

La clase ImageTextDataset en src/dataset_manager.py gestiona la carga de pares imagen-texto:

@@ -5381,8 +5381,8 @@ search_space = { "text_det_unclip_ratio": tune.choice([0.0]), # Fijado "text_rec_score_thresh": tune.uniform(0.0, 0.7), }

-

Tabla 25. Tabla 17. Descripción detallada del espacio de búsqueda.

-

Parámetro

Tipo

Rango

Descripción

use_doc_orientation_classify

Booleano

{True, False}

Clasificación de orientación del documento completo

use_doc_unwarping

Booleano

{True, False}

Corrección de deformación/curvatura

textline_orientation

Booleano

{True, False}

Clasificación de orientación por línea de texto

text_det_thresh

Continuo

[0.0, 0.7]

Umbral de probabilidad para píxeles de texto

text_det_box_thresh

Continuo

[0.0, 0.7]

Umbral de confianza para cajas detectadas

text_det_unclip_ratio

Fijo

0.0

Coeficiente de expansión (no explorado)

text_rec_score_thresh

Continuo

[0.0, 0.7]

Umbral de confianza de reconocimiento

+

Tabla 25. Descripción detallada del espacio de búsqueda.

+

Parámetro

Tipo

Rango

Descripción

use_doc_orientation_classify

Booleano

{True, False}

Clasificación de orientación del documento completo

use_doc_unwarping

Booleano

{True, False}

Corrección de deformación/curvatura

textline_orientation

Booleano

{True, False}

Clasificación de orientación por línea de texto

text_det_thresh

Continuo

[0.0, 0.7]

Umbral de probabilidad para píxeles de texto

text_det_box_thresh

Continuo

[0.0, 0.7]

Umbral de confianza para cajas detectadas

text_det_unclip_ratio

Fijo

0.0

Coeficiente de expansión (no explorado)

text_rec_score_thresh

Continuo

[0.0, 0.7]

Umbral de confianza de reconocimiento

Fuente: Elaboración propia.

 

Justificación del espacio:

@@ -5405,8 +5405,8 @@ search_space = { ), param_space=search_space )

-

Tabla 26. Tabla 18. Parámetros de configuración de Ray Tune.

-

Parámetro

Valor

Justificación

Métrica objetivo

CER

Métrica estándar para OCR

Modo

min

Minimizar tasa de error

Algoritmo

OptunaSearch (TPE)

Eficiente para espacios mixtos

Número de trials

64

Balance entre exploración y tiempo

Trials concurrentes

2

Limitado por memoria disponible

+

Tabla 26. Parámetros de configuración de Ray Tune.

+

Parámetro

Valor

Justificación

Métrica objetivo

CER

Métrica estándar para OCR

Modo

min

Minimizar tasa de error

Algoritmo

OptunaSearch (TPE)

Eficiente para espacios mixtos

Número de trials

64

Balance entre exploración y tiempo

Trials concurrentes

2

Limitado por memoria disponible

Fuente: Elaboración propia.

 

Elección de 64 trials:

@@ -5418,14 +5418,14 @@ search_space = {

Resultados de la Optimización

Ejecución del Experimento

El experimento se ejecutó exitosamente con los siguientes resultados globales:

-

Tabla 27. Tabla 19. Resumen de la ejecución del experimento.

-

Métrica

Valor

Trials completados

64/64

Trials fallidos

0

Tiempo total

~6.4 horas

Tiempo medio por trial

367.72 segundos

Páginas procesadas

320 (64 trials × 5 páginas)

+

Tabla 27. Resumen de la ejecución del experimento.

+

Métrica

Valor

Trials completados

64/64

Trials fallidos

0

Tiempo total

~6.4 horas

Tiempo medio por trial

367.72 segundos

Páginas procesadas

320 (64 trials × 5 páginas)

Fuente: Elaboración propia.

 

Estadísticas Descriptivas

Del archivo CSV de resultados (raytune_paddle_subproc_results_20251207_192320.csv):

-

Tabla 28. Tabla 20. Estadísticas descriptivas de los 64 trials.

-

Estadística

CER

WER

Tiempo (s)

Tiempo/Página (s)

count

64

64

64

64

mean

5.25%

14.28%

347.61

69.42

std

11.03%

10.75%

7.88

1.57

min

1.15%

9.89%

320.97

64.10

25%

1.20%

10.04%

344.24

68.76

50% (mediana)

1.23%

10.20%

346.42

69.19

75%

4.03%

13.20%

350.14

69.93

max

51.61%

59.45%

368.57

73.63

+

Tabla 28. Estadísticas descriptivas de los 64 trials.

+

Estadística

CER

WER

Tiempo (s)

Tiempo/Página (s)

count

64

64

64

64

mean

5.25%

14.28%

347.61

69.42

std

11.03%

10.75%

7.88

1.57

min

1.15%

9.89%

320.97

64.10

25%

1.20%

10.04%

344.24

68.76

50% (mediana)

1.23%

10.20%

346.42

69.19

75%

4.03%

13.20%

350.14

69.93

max

51.61%

59.45%

368.57

73.63

Fuente: Elaboración propia.

 

Observaciones:

@@ -5433,8 +5433,8 @@ search_space = {

1.   Mediana vs Media: La mediana del CER (1.23%) es mucho menor que la media (5.25%), confirmando una distribución sesgada hacia valores bajos con outliers altos.

1.   Tiempo consistente: El tiempo de ejecución es muy estable (std = 1.57 s/página), indicando que las configuraciones de hiperparámetros no afectan significativamente el tiempo de inferencia.

Distribución de Resultados

-

Tabla 29. Tabla 21. Distribución de trials por rango de CER.

-

Rango CER

Número de trials

Porcentaje

< 2%

43

67.2%

2% - 5%

7

10.9%

5% - 10%

2

3.1%

10% - 20%

5

7.8%

> 20%

7

10.9%

+

Tabla 29. Distribución de trials por rango de CER.

+

Rango CER

Número de trials

Porcentaje

< 2%

43

67.2%

2% - 5%

7

10.9%

5% - 10%

2

3.1%

10% - 20%

5

7.8%

> 20%

7

10.9%

Fuente: Elaboración propia.

 

La mayoría de trials (67.2%) alcanzaron CER < 2%, cumpliendo el objetivo establecido. Sin embargo, un 10.9% de trials presentaron fallos catastróficos (CER > 20%).

@@ -5451,25 +5451,25 @@ Configuración óptima: text_det_box_thresh: 0.5412 text_det_unclip_ratio: 0.0 text_rec_score_thresh: 0.6350

-

Tabla 30. Tabla 22. Configuración óptima identificada.

-

Parámetro

Valor óptimo

Valor por defecto

Cambio

textline_orientation

True

False

Activado

use_doc_orientation_classify

False

False

Sin cambio

use_doc_unwarping

False

False

Sin cambio

text_det_thresh

0.4690

0.3

+0.169

text_det_box_thresh

0.5412

0.6

-0.059

text_det_unclip_ratio

0.0

1.5

-1.5 (fijado)

text_rec_score_thresh

0.6350

0.5

+0.135

+

Tabla 30. Configuración óptima identificada.

+

Parámetro

Valor óptimo

Valor por defecto

Cambio

textline_orientation

True

False

Activado

use_doc_orientation_classify

False

False

Sin cambio

use_doc_unwarping

False

False

Sin cambio

text_det_thresh

0.4690

0.3

+0.169

text_det_box_thresh

0.5412

0.6

-0.059

text_det_unclip_ratio

0.0

1.5

-1.5 (fijado)

text_rec_score_thresh

0.6350

0.5

+0.135

Fuente: Elaboración propia.

 

Análisis de Correlación

Se calculó la correlación de Pearson entre los parámetros continuos y las métricas de error:

-

Tabla 31. Tabla 23. Correlación de parámetros con CER.

-

Parámetro

Correlación con CER

Interpretación

text_det_thresh

-0.523

Correlación moderada negativa

text_det_box_thresh

+0.226

Correlación débil positiva

text_rec_score_thresh

-0.161

Correlación débil negativa

text_det_unclip_ratio

NaN

Varianza cero (valor fijo)

+

Tabla 31. Correlación de parámetros con CER.

+

Parámetro

Correlación con CER

Interpretación

text_det_thresh

-0.523

Correlación moderada negativa

text_det_box_thresh

+0.226

Correlación débil positiva

text_rec_score_thresh

-0.161

Correlación débil negativa

text_det_unclip_ratio

NaN

Varianza cero (valor fijo)

Fuente: Elaboración propia.

 

-

Tabla 32. Tabla 24. Correlación de parámetros con WER.

-

Parámetro

Correlación con WER

Interpretación

text_det_thresh

-0.521

Correlación moderada negativa

text_det_box_thresh

+0.227

Correlación débil positiva

text_rec_score_thresh

-0.173

Correlación débil negativa

+

Tabla 32. Correlación de parámetros con WER.

+

Parámetro

Correlación con WER

Interpretación

text_det_thresh

-0.521

Correlación moderada negativa

text_det_box_thresh

+0.227

Correlación débil positiva

text_rec_score_thresh

-0.173

Correlación débil negativa

Fuente: Elaboración propia.

 

Hallazgo clave: El parámetro text_det_thresh muestra la correlación más fuerte (-0.52 con ambas métricas), indicando que valores más altos de este umbral tienden a reducir el error. Este umbral controla qué píxeles se consideran "texto" en el mapa de probabilidad del detector.

Impacto del Parámetro textline_orientation

El parámetro booleano textline_orientation demostró tener el mayor impacto en el rendimiento:

-

Tabla 33. Tabla 25. Impacto del parámetro textline_orientation.

-

textline_orientation

CER Medio

CER Std

WER Medio

N trials

True

3.76%

7.12%

12.73%

32

False

12.40%

14.93%

21.71%

32

+

Tabla 33. Impacto del parámetro textline_orientation.

+

textline_orientation

CER Medio

CER Std

WER Medio

N trials

True

3.76%

7.12%

12.73%

32

False

12.40%

14.93%

21.71%

32

Fuente: Elaboración propia.

 

Interpretación:

@@ -5484,8 +5484,8 @@ Configuración óptima:

El parámetro textline_orientation activa un clasificador que determina la orientación de cada línea de texto detectada. Para documentos con layouts mixtos (tablas, encabezados laterales, direcciones postales), este clasificador asegura que el texto se lea en el orden correcto, evitando la mezcla de líneas de diferentes columnas o secciones.

Análisis de Fallos Catastróficos

Los trials con CER muy alto (>20%) presentaron patrones específicos:

-

Tabla 34. Tabla 26. Características de trials con fallos catastróficos.

-

Trial

CER

text_det_thresh

textline_orientation

Diagnóstico

#47

51.61%

0.017

True

Umbral muy bajo

#23

43.29%

0.042

False

Umbral bajo + sin orientación

#12

38.76%

0.089

False

Umbral bajo + sin orientación

#56

35.12%

0.023

False

Umbral muy bajo + sin orientación

+

Tabla 34. Características de trials con fallos catastróficos.

+

Trial

CER

text_det_thresh

textline_orientation

Diagnóstico

#47

51.61%

0.017

True

Umbral muy bajo

#23

43.29%

0.042

False

Umbral bajo + sin orientación

#12

38.76%

0.089

False

Umbral bajo + sin orientación

#56

35.12%

0.023

False

Umbral muy bajo + sin orientación

Fuente: Elaboración propia.

 

Diagnóstico:

@@ -5516,13 +5516,13 @@ Configuración óptima: "text_det_unclip_ratio": 0.0, "text_rec_score_thresh": 0.6350, }

-

Tabla 35. Tabla 27. Comparación baseline vs optimizado (24 páginas).

-

Modelo

CER

Precisión Caracteres

WER

Precisión Palabras

PaddleOCR (Baseline)

7.78%

92.22%

14.94%

85.06%

PaddleOCR-HyperAdjust

1.49%

98.51%

7.62%

92.38%

+

Tabla 35. Comparación baseline vs optimizado (24 páginas).

+

Modelo

CER

Precisión Caracteres

WER

Precisión Palabras

PaddleOCR (Baseline)

7.78%

92.22%

14.94%

85.06%

PaddleOCR-HyperAdjust

1.49%

98.51%

7.62%

92.38%

Fuente: Elaboración propia.

 

Métricas de Mejora

-

Tabla 36. Tabla 28. Análisis cuantitativo de la mejora.

-

Forma de Medición

CER

WER

Valor baseline

7.78%

14.94%

Valor optimizado

1.49%

7.62%

Mejora absoluta

-6.29 pp

-7.32 pp

Reducción relativa del error

80.9%

49.0%

Factor de mejora

5.2×

2.0×

+

Tabla 36. Análisis cuantitativo de la mejora.

+

Forma de Medición

CER

WER

Valor baseline

7.78%

14.94%

Valor optimizado

1.49%

7.62%

Mejora absoluta

-6.29 pp

-7.32 pp

Reducción relativa del error

80.9%

49.0%

Factor de mejora

5.2×

2.0×

Fuente: Elaboración propia.

 

Figura 8. Comparación Baseline vs Optimizado (24 páginas)

@@ -5531,16 +5531,16 @@ Configuración óptima:

 

Impacto Práctico

En un documento típico de 10,000 caracteres:

-

Tabla 37. Tabla de datos.

-

Configuración

Caracteres con error

Palabras con error*

Baseline

~778

~225

Optimizada

~149

~115

Reducción

629 menos

110 menos

+

Tabla 37. En un documento típico de 10,000 caracteres

+

Configuración

Caracteres con error

Palabras con error*

Baseline

~778

~225

Optimizada

~149

~115

Reducción

629 menos

110 menos

Fuente: Elaboración propia.

 

*Asumiendo longitud media de palabra = 6.6 caracteres en español.

Interpretación del notebook:

"La optimización de hiperparámetros mejoró la precisión de caracteres de 92.2% a 98.5%, una ganancia de 6.3 puntos porcentuales. Aunque el baseline ya ofrecía resultados aceptables, la configuración optimizada reduce los errores residuales en un 80.9%."

Tiempo de Ejecución

-

Tabla 38. Tabla 29. Métricas de tiempo del experimento.

-

Métrica

Valor

Tiempo total del experimento

~6.4 horas

Tiempo medio por trial

347.61 segundos (~5.8 min)

Tiempo medio por página

69.42 segundos

Variabilidad (std)

1.57 segundos/página

Páginas procesadas totales

320

+

Tabla 38. Métricas de tiempo del experimento.

+

Métrica

Valor

Tiempo total del experimento

~6.4 horas

Tiempo medio por trial

347.61 segundos (~5.8 min)

Tiempo medio por página

69.42 segundos

Variabilidad (std)

1.57 segundos/página

Páginas procesadas totales

320

Fuente: Elaboración propia.

 

Observaciones:

@@ -5556,29 +5556,29 @@ Configuración óptima:

- textline_orientation=True reduce CER en 69.7% - text_det_thresh tiene correlación -0.52 con CER - Valores de text_det_thresh < 0.1 causan fallos catastróficos

1.   Mejora final: CER reducido de 7.78% a 1.49% (reducción del 80.9%)

Fuentes de datos:

-

·     [src/run_tuning.py](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py): Script principal de optimización

-

·     [src/raytune_ocr.py](https://github.com/seryus/MastersThesis/blob/main/src/raytune_ocr.py): Librería de utilidades Ray Tune

-

·     [src/results/](https://github.com/seryus/MastersThesis/tree/main/src/results): Resultados CSV de los trials

+

·     src/run_tuning.py: Script principal de optimización

+

·     src/raytune_ocr.py: Librería de utilidades Ray Tune

+

·     src/results/: Resultados CSV de los trials

Discusión y análisis de resultados

Introducción

Esta sección presenta un análisis consolidado de los resultados obtenidos en las fases de benchmark comparativo y optimización de hiperparámetros. Se discuten las implicaciones prácticas, se evalúa el cumplimiento de los objetivos planteados y se identifican las limitaciones del estudio.

Resumen Consolidado de Resultados

Progresión del Rendimiento

-

Tabla 39. Tabla 30. Evolución del rendimiento a través del estudio.

-

Fase

Configuración

CER

Mejora vs anterior

Benchmark inicial

Baseline (5 páginas)

~5-6%

-

Optimización (mejor trial)

Optimizada (5 páginas)

1.15%

~80%

Validación final

Optimizada (24 páginas)

1.49%

-

+

Tabla 39. Evolución del rendimiento a través del estudio.

+

Fase

Configuración

CER

Mejora vs anterior

Benchmark inicial

Baseline (5 páginas)

~5-6%

-

Optimización (mejor trial)

Optimizada (5 páginas)

1.15%

~80%

Validación final

Optimizada (24 páginas)

1.49%

-

Fuente: Elaboración propia.

 

El incremento del CER de 1.15% (5 páginas) a 1.49% (24 páginas) es esperado debido a la mayor diversidad de layouts en el dataset completo.

Comparación con Objetivo

-

Tabla 40. Tabla 31. Verificación del objetivo general.

-

Aspecto

Objetivo

Resultado

Cumplimiento

Métrica

CER

CER

Umbral

< 2%

1.49%

Método

Sin fine-tuning

Solo hiperparámetros

Hardware

Sin GPU

CPU only

+

Tabla 40. Verificación del objetivo general.

+

Aspecto

Objetivo

Resultado

Cumplimiento

Métrica

CER

CER

Umbral

< 2%

1.49%

Método

Sin fine-tuning

Solo hiperparámetros

Hardware

Sin GPU

CPU only

Fuente: Elaboración propia.

 

Análisis Detallado de Hiperparámetros

Jerarquía de Importancia

Basándose en el análisis de correlación y el impacto observado:

-

Tabla 41. Tabla 32. Ranking de importancia de hiperparámetros.

-

Rank

Parámetro

Impacto

Evidencia

1

textline_orientation

Crítico

Reduce CER 69.7%

2

text_det_thresh

Alto

Correlación -0.52

3

text_rec_score_thresh

Medio

Correlación -0.16

4

text_det_box_thresh

Bajo

Correlación +0.23

5

use_doc_orientation_classify

Nulo

Sin mejora

6

use_doc_unwarping

Nulo

Sin mejora

+

Tabla 41. Ranking de importancia de hiperparámetros.

+

Rank

Parámetro

Impacto

Evidencia

1

textline_orientation

Crítico

Reduce CER 69.7%

2

text_det_thresh

Alto

Correlación -0.52

3

text_rec_score_thresh

Medio

Correlación -0.16

4

text_det_box_thresh

Bajo

Correlación +0.23

5

use_doc_orientation_classify

Nulo

Sin mejora

6

use_doc_unwarping

Nulo

Sin mejora

Fuente: Elaboración propia.

 

Análisis del Parámetro textline_orientation

@@ -5591,8 +5591,8 @@ Configuración óptima:

Recomendación: Siempre activar textline_orientation=True para documentos estructurados.

Análisis del Parámetro text_det_thresh

Comportamiento observado:

-

Tabla 42. Tabla de datos.

-

Rango

CER típico

Comportamiento

0.0 - 0.1

>20%

Fallos catastróficos

0.1 - 0.3

5-15%

Rendimiento pobre

0.3 - 0.5

1-5%

Rendimiento óptimo

0.5 - 0.7

2-8%

Rendimiento aceptable

+

Tabla 42. Comportamiento observado

+

Rango

CER típico

Comportamiento

0.0 - 0.1

>20%

Fallos catastróficos

0.1 - 0.3

5-15%

Rendimiento pobre

0.3 - 0.5

1-5%

Rendimiento óptimo

0.5 - 0.7

2-8%

Rendimiento aceptable

Fuente: Elaboración propia.

 

Interpretación:

@@ -5609,18 +5609,18 @@ Configuración óptima:

Para documentos PDF digitales como los evaluados, estos módulos son innecesarios e incluso pueden introducir artefactos. Su desactivación reduce el tiempo de procesamiento sin pérdida de precisión.

Análisis de Casos de Fallo

Clasificación de Errores

-

Tabla 43. Tabla 33. Tipología de errores observados.

-

Tipo de error

Frecuencia

Ejemplo

Causa probable

Pérdida de acentos

Alta

más → mas

Modelo de reconocimiento

Duplicación de caracteres

Media

titulación → titulacióon

Solapamiento de detecciones

Confusión de puntuación

Media

¿ → ?

Caracteres similares

Pérdida de eñe

Baja

año → ano

Modelo de reconocimiento

Texto desordenado

Variable

Mezcla de líneas

Fallo de orientación

+

Tabla 43. Tipología de errores observados.

+

Tipo de error

Frecuencia

Ejemplo

Causa probable

Pérdida de acentos

Alta

más → mas

Modelo de reconocimiento

Duplicación de caracteres

Media

titulación → titulacióon

Solapamiento de detecciones

Confusión de puntuación

Media

¿ → ?

Caracteres similares

Pérdida de eñe

Baja

año → ano

Modelo de reconocimiento

Texto desordenado

Variable

Mezcla de líneas

Fallo de orientación

Fuente: Elaboración propia.

 

Patrones de Fallo por Tipo de Contenido

-

Tabla 44. Tabla 34. Tasa de error por tipo de contenido.

-

Tipo de contenido

CER estimado

Factor de riesgo

Párrafos de texto

~1%

Bajo

Listas numeradas

~2%

Medio

Tablas simples

~3%

Medio

Encabezados + pie de página

~2%

Medio

Tablas complejas

~5%

Alto

Texto en columnas

~4%

Alto

+

Tabla 44. Tasa de error por tipo de contenido.

+

Tipo de contenido

CER estimado

Factor de riesgo

Párrafos de texto

~1%

Bajo

Listas numeradas

~2%

Medio

Tablas simples

~3%

Medio

Encabezados + pie de página

~2%

Medio

Tablas complejas

~5%

Alto

Texto en columnas

~4%

Alto

Fuente: Elaboración propia.

 

Comparación con Objetivos Específicos

-

Tabla 45. Tabla 35. Cumplimiento de objetivos específicos.

-

Objetivo

Descripción

Resultado

Estado

OE1

Comparar soluciones OCR

EasyOCR, PaddleOCR, DocTR evaluados; PaddleOCR seleccionado

✓ Cumplido

OE2

Preparar dataset de evaluación

24 páginas con ground truth

✓ Cumplido

OE3

Identificar hiperparámetros críticos

textline_orientation y text_det_thresh identificados

✓ Cumplido

OE4

Optimizar con Ray Tune (≥50 trials)

64 trials ejecutados

✓ Cumplido

OE5

Validar configuración optimizada

CER: 7.78% → 1.49% documentado

✓ Cumplido

+

Tabla 45. Cumplimiento de objetivos específicos.

+

Objetivo

Descripción

Resultado

Estado

OE1

Comparar soluciones OCR

EasyOCR, PaddleOCR, DocTR evaluados; PaddleOCR seleccionado

✓ Cumplido

OE2

Preparar dataset de evaluación

24 páginas con ground truth

✓ Cumplido

OE3

Identificar hiperparámetros críticos

textline_orientation y text_det_thresh identificados

✓ Cumplido

OE4

Optimizar con Ray Tune (≥50 trials)

64 trials ejecutados

✓ Cumplido

OE5

Validar configuración optimizada

CER: 7.78% → 1.49% documentado

✓ Cumplido

Fuente: Elaboración propia.

 

Limitaciones del Estudio

@@ -5682,8 +5682,8 @@ Configuración óptima:

·     Identificación de limitaciones y recomendaciones prácticas

Resultado principal: Se logró alcanzar el objetivo de CER < 2% mediante optimización de hiperparámetros, sin requerir fine-tuning ni recursos GPU.

Fuentes de datos:

-

·     [src/run_tuning.py](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py): Script principal de optimización

-

·     [src/results/](https://github.com/seryus/MastersThesis/tree/main/src/results): Resultados CSV de los trials

+

·     src/run_tuning.py: Script principal de optimización

+

·     src/results/: Resultados CSV de los trials

Imágenes Docker:

·     seryus.ddns.net/unir/paddle-ocr-gpu: PaddleOCR con soporte GPU

·     seryus.ddns.net/unir/easyocr-gpu: EasyOCR con soporte GPU

@@ -5691,22 +5691,22 @@ Configuración óptima:

Validación con Aceleración GPU

Para evaluar la viabilidad práctica del enfoque optimizado en escenarios de producción, se realizó una validación adicional utilizando aceleración GPU. Esta fase complementa los experimentos en CPU presentados anteriormente y demuestra la aplicabilidad del método cuando se dispone de hardware con capacidad de procesamiento paralelo.

Configuración del Entorno GPU

-

Tabla 46. Tabla 36. Especificaciones del entorno de validación GPU.

-

Componente

Especificación

GPU

NVIDIA GeForce RTX 3060 Laptop

VRAM

5.66 GB

CUDA

12.4

Sistema Operativo

Ubuntu 24.04.3 LTS

Kernel

6.14.0-37-generic

+

Tabla 46. Especificaciones del entorno de validación GPU.

+

Componente

Especificación

GPU

NVIDIA GeForce RTX 3060 Laptop

VRAM

5.66 GB

CUDA

12.4

Sistema Operativo

Ubuntu 24.04.3 LTS

Kernel

6.14.0-37-generic

Fuente: Elaboración propia.

 

El entorno de validación representa hardware de consumo típico para desarrollo de aplicaciones de machine learning, permitiendo evaluar el rendimiento en condiciones realistas de despliegue.

Comparación CPU vs GPU

Se evaluó el tiempo de procesamiento utilizando la configuración optimizada identificada en la fase anterior, comparando el rendimiento entre CPU y GPU.

-

Tabla 47. Tabla 37. Rendimiento comparativo CPU vs GPU.

-

Métrica

CPU

GPU (RTX 3060)

Factor de Aceleración

Tiempo/Página

69.4s

0.55s

126x

Dataset completo (45 páginas)

~52 min

~25 seg

126x

+

Tabla 47. Rendimiento comparativo CPU vs GPU.

+

Métrica

CPU

GPU (RTX 3060)

Factor de Aceleración

Tiempo/Página

69.4s

0.55s

126x

Dataset completo (45 páginas)

~52 min

~25 seg

126x

Fuente: Elaboración propia.

 

La aceleración de 126x obtenida con GPU transforma la aplicabilidad práctica del sistema. Mientras que el procesamiento en CPU limita el uso a escenarios de procesamiento por lotes sin restricciones de tiempo, la velocidad con GPU habilita casos de uso interactivos y de tiempo real.

Comparación de Modelos PaddleOCR

PaddleOCR ofrece dos variantes de modelos: Mobile (optimizados para dispositivos con recursos limitados) y Server (mayor precisión a costa de mayor consumo de memoria). Se evaluó la viabilidad de ambas variantes en el hardware disponible.

-

Tabla 48. Tabla 38. Comparación de modelos Mobile vs Server en RTX 3060.

-

Modelo

VRAM Requerida

Resultado

Recomendación

PP-OCRv5 Mobile

0.06 GB

Funciona correctamente

✓ Recomendado

PP-OCRv5 Server

5.3 GB

OOM en página 2

✗ Requiere >8 GB VRAM

+

Tabla 48. Comparación de modelos Mobile vs Server en RTX 3060.

+

Modelo

VRAM Requerida

Resultado

Recomendación

PP-OCRv5 Mobile

0.06 GB

Funciona correctamente

✓ Recomendado

PP-OCRv5 Server

5.3 GB

OOM en página 2

✗ Requiere >8 GB VRAM

Fuente: Elaboración propia.

 

Los modelos Server, a pesar de ofrecer potencialmente mayor precisión, resultan inviables en hardware con VRAM limitada (≤6 GB) debido a errores de memoria (Out of Memory). Los modelos Mobile, con un consumo de memoria 88 veces menor, funcionan de manera estable y ofrecen rendimiento suficiente para el caso de uso evaluado.

@@ -5724,8 +5724,8 @@ y trabajo futuro

Este capít

Conclusiones Generales

Este Trabajo Fin de Máster ha demostrado que es posible mejorar significativamente el rendimiento de sistemas OCR preentrenados mediante optimización sistemática de hiperparámetros, sin requerir fine-tuning ni recursos GPU dedicados.

El objetivo principal del trabajo era alcanzar un CER inferior al 2% en documentos académicos en español. Los resultados obtenidos confirman el cumplimiento de este objetivo:

-

Tabla 49. Tabla 39. Cumplimiento del objetivo de CER.

-

Métrica

Objetivo

Resultado

CER

< 2%

1.49%

+

Tabla 49. Cumplimiento del objetivo de CER.

+

Métrica

Objetivo

Resultado

CER

< 2%

1.49%

Fuente: Elaboración propia.

 

Conclusiones Específicas

@@ -5846,13 +5846,13 @@ major-latin;mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin └── .gitea/workflows/ci.yaml # Pipeline CI/CD

A.3 Requisitos de Software

Sistema de Desarrollo

-

Tabla 50. Tabla A1. Especificaciones del sistema de desarrollo.

-

Componente

Especificación

Sistema Operativo

Ubuntu 24.04.3 LTS

CPU

AMD Ryzen 7 5800H

RAM

16 GB DDR4

GPU

NVIDIA RTX 3060 Laptop (5.66 GB VRAM)

CUDA

12.4

+

Tabla 50. Especificaciones del sistema de desarrollo.

+

Componente

Especificación

Sistema Operativo

Ubuntu 24.04.3 LTS

CPU

AMD Ryzen 7 5800H

RAM

16 GB DDR4

GPU

NVIDIA RTX 3060 Laptop (5.66 GB VRAM)

CUDA

12.4

Fuente: Elaboración propia.

 

Dependencias

-

Tabla 51. Tabla A2. Dependencias del proyecto.

-

Componente

Versión

Python

3.12.3

Docker

29.1.5

NVIDIA Container Toolkit

Requerido para GPU

Ray

2.52.1

Optuna

4.7.0

+

Tabla 51. Dependencias del proyecto.

+

Componente

Versión

Python

3.12.3

Docker

29.1.5

NVIDIA Container Toolkit

Requerido para GPU

Ray

2.52.1

Optuna

4.7.0

Fuente: Elaboración propia.

 

A.4 Instrucciones de Ejecución de Servicios OCR

@@ -5927,19 +5927,19 @@ results = run_tuner(trainable, PADDLE_OCR_SEARCH_SPACE, num_samples=64) analyze_results(results, prefix='raytune_paddle', config_keys=PADDLE_OCR_CONFIG_KEYS) "

Servicios y Puertos

-

Tabla 52. Tabla A3. Servicios Docker y puertos.

-

Servicio

Puerto

Script de Ajuste

PaddleOCR

8002

paddle_ocr_payload

DocTR

8003

doctr_payload

EasyOCR

8002

easyocr_payload

+

Tabla 52. Servicios Docker y puertos.

+

Servicio

Puerto

Script de Ajuste

PaddleOCR

8002

paddle_ocr_payload

DocTR

8003

doctr_payload

EasyOCR

8002

easyocr_payload

Fuente: Elaboración propia.

 

A.7 Métricas de Rendimiento

Los resultados detallados de las evaluaciones y ajustes de hiperparámetros se encuentran en:

-

·     [Métricas Generales](metrics/metrics.md) - Comparativa de los tres servicios

-

·     [PaddleOCR](metrics/metrics_paddle.md) - Mejor precisión (7.76% CER baseline, 1.49% optimizado)

-

·     [DocTR](metrics/metrics_doctr.md) - Más rápido (0.50s/página)

-

·     [EasyOCR](metrics/metrics_easyocr.md) - Balance intermedio

+

·     Métricas Generales - Comparativa de los tres servicios

+

·     PaddleOCR - Mejor precisión (7.76% CER baseline, 1.49% optimizado)

+

·     DocTR - Más rápido (0.50s/página)

+

·     EasyOCR - Balance intermedio

Resumen de Resultados

-

Tabla 53. Tabla A4. Resumen de resultados del benchmark por servicio.

-

Servicio

CER Base

CER Ajustado

Mejora

PaddleOCR

8.85%

7.72%

12.8%

DocTR

12.06%

12.07%

0%

EasyOCR

11.23%

11.14%

0.8%

+

Tabla 53. Resumen de resultados del benchmark por servicio.

+

Servicio

CER Base

CER Ajustado

Mejora

PaddleOCR

8.85%

7.72%

12.8%

DocTR

12.06%

12.07%

0%

EasyOCR

11.23%

11.14%

0.8%

Fuente: Elaboración propia.

 

A.8 Licencia