diff --git a/apply_content.py b/apply_content.py index 91caa13..ff52677 100644 --- a/apply_content.py +++ b/apply_content.py @@ -6,6 +6,7 @@ import os import shutil from bs4 import BeautifulSoup, NavigableString from latex2mathml.converter import convert as latex_to_mathml +from PIL import Image BASE_DIR = os.path.dirname(os.path.abspath(__file__)) TEMPLATE_INPUT = os.path.join(BASE_DIR, 'instructions/plantilla_individual.htm') @@ -144,8 +145,24 @@ def parse_md_to_html_blocks(md_content): html_blocks.append(f'''

Figura {figure_counter}. {fig_title}

''') if os.path.exists(fig_path): - # Use Word-compatible width in cm (A4 text area is ~16cm wide, use ~12cm max) - html_blocks.append(f'''

{fig_title}

''') + # Read actual image dimensions and scale to fit page width + img = Image.open(fig_path) + orig_w, orig_h = img.size + + # Scale to fit max width of 566px (15cm at 96dpi) while preserving aspect ratio + max_width = 566 + if orig_w > max_width: + scale = max_width / orig_w + new_w = max_width + new_h = int(orig_h * scale) + else: + new_w, new_h = orig_w, orig_h + + # Convert to pt (1px at 96dpi = 0.75pt) + w_pt = new_w * 0.75 + h_pt = new_h * 0.75 + + html_blocks.append(f'''

{fig_title}

''') else: # Fallback to placeholder html_blocks.append(f'''

[Insertar diagrama Mermaid aquí]

''') diff --git a/thesis_output/plantilla_individual.htm b/thesis_output/plantilla_individual.htm index 3b1e342..1b534b9 100644 --- a/thesis_output/plantilla_individual.htm +++ b/thesis_output/plantilla_individual.htm @@ -4637,7 +4637,7 @@ _Toc14106979">Pipeline Moderno de OCR

Los sistemas OCR modernos siguen típicamente un pipeline de dos etapas principales, precedidas opcionalmente por una fase de preprocesamiento:

Figura 1. Pipeline de un sistema OCR moderno

-

Pipeline de un sistema OCR moderno

+

Pipeline de un sistema OCR moderno

Fuente: Elaboración propia.

 

Etapa de Preprocesamiento

@@ -4880,7 +4880,7 @@ Configuraciones con alta probabilidad bajo 3.   Beneficiarse de la infraestructura de Ray para distribución

4.   Acceder a las visualizaciones de Optuna

Figura 2. Ciclo de optimización con Ray Tune y Optuna

-

Ciclo de optimización con Ray Tune y Optuna

+

Ciclo de optimización con Ray Tune y Optuna

Fuente: Elaboración propia.

 

HPO en Sistemas OCR

@@ -4958,7 +4958,7 @@ concretos y metodología de trabajo
Metodología del trabajo

Visión General

Figura 3. Fases de la metodología experimental

-

Fases de la metodología experimental

+

Fases de la metodología experimental

Fuente: Elaboración propia.

 

Descripción de las fases:

@@ -4978,7 +4978,7 @@ concretos y metodología de trabajo
- Método: page.get_text("dict") de PyMuPDF - Preservación de estructura de líneas - Tratamiento de texto vertical/marginal - Normalización de espacios y saltos de línea

Estructura del Dataset

Figura 4. Estructura del dataset de evaluación

-

Estructura del dataset de evaluación

+

Estructura del dataset de evaluación

Fuente: Elaboración propia.

 

Clase ImageTextDataset

@@ -5231,7 +5231,7 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>·     Aislamiento de Ray Tune: Ray Tune tiene sus propias dependencias que pueden entrar en conflicto con las librerías de inferencia OCR

Esta arquitectura containerizada permite ejecutar cada componente en su entorno aislado óptimo, comunicándose via API REST:

Figura 5. Arquitectura de ejecución con Docker Compose

-

Arquitectura de ejecución con Docker Compose

+

Arquitectura de ejecución con Docker Compose

Fuente: Elaboración propia.

 

La arquitectura containerizada (src/docker-compose.tuning.*.yml) ofrece:

@@ -5263,13 +5263,13 @@ docker compose -f docker-compose.tuning.doctr.yml down

 

Arquitectura de Microservicios

Figura 6. Arquitectura de microservicios para optimización OCR

-

Arquitectura de microservicios para optimización OCR

+

Arquitectura de microservicios para optimización OCR

Fuente: Elaboración propia.

 

Estrategia de Build Multi-Stage

Los Dockerfiles utilizan una estrategia de build multi-stage para optimizar tiempos de construcción y tamaño de imágenes:

Figura 7. Estrategia de build multi-stage

-

Estrategia de build multi-stage

+

Estrategia de build multi-stage

Fuente: Elaboración propia.

 

Ventajas de esta estrategia:

@@ -5303,7 +5303,7 @@ docker compose -f docker-compose.tuning.doctr.yml down

·     DocTR: 180 segundos (modelos ResNet más pesados)

Flujo de Ejecución Completo

Figura 8. Flujo de ejecución de optimización con Ray Tune

-

Flujo de ejecución de optimización con Ray Tune

+

Flujo de ejecución de optimización con Ray Tune

Fuente: Elaboración propia.

 

Reproducibilidad

@@ -5422,7 +5422,7 @@ Configuración óptima:

1.   Menor varianza: La desviación estándar también se reduce significativamente (7.12% vs 14.93%), indicando resultados más consistentes.

1.   Reducción del CER: 69.7% cuando se habilita la clasificación de orientación de línea.

Figura 9. Impacto de textline_orientation en CER

-

Impacto de textline_orientation en CER

+

Impacto de textline_orientation en CER

Fuente: Elaboración propia.

 

Explicación técnica:

@@ -5452,7 +5452,7 @@ Configuración óptima:

Fuente: Elaboración propia.

 

Figura 10. Reducción de errores: Baseline vs Optimizado (45 páginas)

-

Reducción de errores: Baseline vs Optimizado (45 páginas)

+

Reducción de errores: Baseline vs Optimizado (45 páginas)

Fuente: Elaboración propia.

 

Leyenda: CER = Character Error Rate, WER = Word Error Rate. Baseline = configuración por defecto de PaddleOCR. Optimizado = configuración encontrada por Ray Tune. Los valores corresponden al dataset completo de 45 páginas.

@@ -5755,7 +5755,7 @@ major-latin;mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin

·     Resultados: Archivos CSV con los resultados de los 64 trials por servicio

A.2 Estructura del Repositorio

Figura 11. Estructura del repositorio MastersThesis

-

Estructura del repositorio MastersThesis

+

Estructura del repositorio MastersThesis

Fuente: Elaboración propia.

 

Tabla 56. Descripción de directorios principales.