update doc
Some checks failed
build_docker / build_cpu (pull_request) Has been cancelled
build_docker / build_gpu (pull_request) Has been cancelled
build_docker / build_easyocr (pull_request) Has been cancelled
build_docker / build_easyocr_gpu (pull_request) Has been cancelled
build_docker / build_doctr (pull_request) Has been cancelled
build_docker / build_doctr_gpu (pull_request) Has been cancelled
build_docker / build_raytune (pull_request) Has been cancelled
build_docker / essential (pull_request) Successful in 1s

This commit is contained in:
2026-01-20 12:16:17 +01:00
parent 9f9fda4cc3
commit 9995c08488
3 changed files with 29 additions and 12 deletions

View File

@@ -17,6 +17,23 @@ Review and validate the documentation for this Master's Thesis project.
**IMPORTANT:** When styling elements (tables, figures, notes, quotes), ALWAYS check `plantilla_individual.htm` for existing Word/CSS classes (e.g., `MsoQuote`, `MsoCaption`, `Piedefoto-tabla`). Use these classes instead of custom inline styles.
### UNIR Color Palette (from plantilla_individual.htm)
| Color | Hex | Usage |
|-------|-----|-------|
| Primary Blue | `#0098CD` | Headings, titles, diagram borders |
| Light Blue BG | `#E6F4F9` | Backgrounds, callout boxes, nodes |
| Dark Gray | `#404040` | Primary text |
| Accent Blue | `#5B9BD5` | Table headers, accent elements |
| Light Accent | `#9CC2E5` | Table borders |
| Very Light Blue | `#DEEAF6` | Secondary backgrounds, subgraphs |
| White | `#FFFFFF` | Header text, contrast |
### Table Styles (from template)
- `MsoTableGrid` - Basic grid table
- `MsoTable15Grid4Accent1` - Styled table with UNIR colors (header: `#5B9BD5`, borders: `#9CC2E5`)
- `Piedefoto-tabla` - Table caption/source style
3. **Validate each documentation file** checking:
### Data Accuracy

View File

@@ -145,7 +145,7 @@ def parse_md_to_html_blocks(md_content):
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'''<p class=MsoNormal style="text-align:center"><span lang=ES><img width="604" style="width:16cm;display:block;margin:0 auto" src="{fig_file}" alt="{fig_title}"/></span></p>''')
html_blocks.append(f'''<p class=MsoNormal style="text-align:center"><span lang=ES><img style="max-width:16cm;height:auto;display:block;margin:0 auto" src="{fig_file}" alt="{fig_title}"/></span></p>''')
else:
# Fallback to placeholder
html_blocks.append(f'''<p class=MsoNormal style="text-align:center;border:1px dashed #999;padding:20px;margin:10px 40px;background:#f9f9f9"><span lang=ES style="color:#666">[Insertar diagrama Mermaid aquí]</span></p>''')

View File

@@ -4637,7 +4637,7 @@ _Toc14106979"><span style="mso-bookmark:_Toc437515557"><span lang="ES" style="te
<h3 style="mso-list:l22 level3 lfo18"><span lang="ES" style="text-transform:none">Pipeline Moderno de OCR</span></h3>
<p class="MsoNormal"><span lang="ES">Los sistemas OCR modernos siguen típicamente un pipeline de dos etapas principales, precedidas opcionalmente por una fase de preprocesamiento:</span></p>
<a name="_Ref_Fig1"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->1<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Pipeline de un sistema OCR moderno</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Pipeline de un sistema OCR moderno" src="figures/figura_1.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Pipeline de un sistema OCR moderno" src="figures/figura_1.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<h4><span lang="ES">Etapa de Preprocesamiento</span></h4>
@@ -4880,7 +4880,7 @@ Configuraciones con alta probabilidad bajo <math display="inline" xmlns="http://
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES">3.<span style="font-size:7pt">   </span>Beneficiarse de la infraestructura de Ray para distribución</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES">4.<span style="font-size:7pt">   </span>Acceder a las visualizaciones de Optuna</span></p>
<a name="_Ref_Fig2"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->2<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Ciclo de optimización con Ray Tune y Optuna</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Ciclo de optimización con Ray Tune y Optuna" src="figures/figura_2.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Ciclo de optimización con Ray Tune y Optuna" src="figures/figura_2.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<h4><span lang="ES">HPO en Sistemas OCR</span></h4>
@@ -4958,7 +4958,7 @@ concretos y metodología de trabajo</span></span></a></span></span><span style="
<h2 style="mso-list:l22 level2 lfo18"><span lang="ES" style="text-transform:none">Metodología del trabajo</span></h2>
<h3 style="mso-list:l22 level3 lfo18"><span lang="ES" style="text-transform:none">Visión General</span></h3>
<a name="_Ref_Fig3"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->3<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Fases de la metodología experimental</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Fases de la metodología experimental" src="figures/figura_3.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Fases de la metodología experimental" src="figures/figura_3.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="ES"><b>Descripción de las fases:</b></span></p>
@@ -4978,7 +4978,7 @@ concretos y metodología de trabajo</span></span></a></span></span><span style="
<p class="MsoNormal"><span lang="ES"> - Método: <span style="font-family:Consolas;font-size:10pt">page.get_text("dict")</span> de PyMuPDF - Preservación de estructura de líneas - Tratamiento de texto vertical/marginal - Normalización de espacios y saltos de línea</span></p>
<h4><span lang="ES">Estructura del Dataset</span></h4>
<a name="_Ref_Fig4"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->4<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Estructura del dataset de evaluación</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Estructura del dataset de evaluación" src="figures/figura_4.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Estructura del dataset de evaluación" src="figures/figura_4.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<h4><span lang="ES">Clase ImageTextDataset</span></h4>
@@ -5231,7 +5231,7 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'><o:p></o:p></sp
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES" style="font-family:Symbol">·</span><span lang="ES" style="font-size:7pt">     </span><span lang="ES"><b>Aislamiento de Ray Tune</b>: Ray Tune tiene sus propias dependencias que pueden entrar en conflicto con las librerías de inferencia OCR</span></p>
<p class="MsoNormal"><span lang="ES">Esta arquitectura containerizada permite ejecutar cada componente en su entorno aislado óptimo, comunicándose via API REST:</span></p>
<a name="_Ref_Fig5"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->5<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Arquitectura de ejecución con Docker Compose</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Arquitectura de ejecución con Docker Compose" src="figures/figura_5.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Arquitectura de ejecución con Docker Compose" src="figures/figura_5.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="ES">La arquitectura containerizada (<span style="font-family:Consolas;font-size:10pt">src/docker-compose.tuning.*.yml</span>) ofrece:</span></p>
@@ -5263,13 +5263,13 @@ docker compose -f docker-compose.tuning.doctr.yml down</pre></span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<h4><span lang="ES">Arquitectura de Microservicios</span></h4>
<a name="_Ref_Fig6"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->6<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Arquitectura de microservicios para optimización OCR</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Arquitectura de microservicios para optimización OCR" src="figures/figura_6.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Arquitectura de microservicios para optimización OCR" src="figures/figura_6.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<h4><span lang="ES">Estrategia de Build Multi-Stage</span></h4>
<p class="MsoNormal"><span lang="ES">Los Dockerfiles utilizan una estrategia de build multi-stage para optimizar tiempos de construcción y tamaño de imágenes:</span></p>
<a name="_Ref_Fig7"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->7<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Estrategia de build multi-stage</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Estrategia de build multi-stage" src="figures/figura_7.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Estrategia de build multi-stage" src="figures/figura_7.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="ES"><b>Ventajas de esta estrategia:</b></span></p>
@@ -5303,7 +5303,7 @@ docker compose -f docker-compose.tuning.doctr.yml down</pre></span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES" style="font-family:Symbol">·</span><span lang="ES" style="font-size:7pt">     </span><span lang="ES"><b>DocTR</b>: 180 segundos (modelos ResNet más pesados)</span></p>
<h4><span lang="ES">Flujo de Ejecución Completo</span></h4>
<a name="_Ref_Fig8"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->8<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Flujo de ejecución de optimización con Ray Tune</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Flujo de ejecución de optimización con Ray Tune" src="figures/figura_8.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Flujo de ejecución de optimización con Ray Tune" src="figures/figura_8.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<h4><span lang="ES">Reproducibilidad</span></h4>
@@ -5422,7 +5422,7 @@ Configuración óptima:
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES">1.<span style="font-size:7pt">   </span><b>Menor varianza</b>: La desviación estándar también se reduce significativamente (7.12% vs 14.93%), indicando resultados más consistentes.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES">1.<span style="font-size:7pt">   </span><b>Reducción del CER</b>: 69.7% cuando se habilita la clasificación de orientación de línea.</span></p>
<a name="_Ref_Fig9"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->9<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Impacto de textline_orientation en CER</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Impacto de textline_orientation en CER" src="figures/figura_9.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Impacto de textline_orientation en CER" src="figures/figura_9.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="ES"><b>Explicación técnica:</b></span></p>
@@ -5452,7 +5452,7 @@ Configuración óptima:
<p class="Piedefoto-tabla" style="margin-left:0cm"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<a name="_Ref_Fig10"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->10<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Reducción de errores: Baseline vs Optimizado (45 páginas)</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Reducción de errores: Baseline vs Optimizado (45 páginas)" src="figures/figura_10.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Reducción de errores: Baseline vs Optimizado (45 páginas)" src="figures/figura_10.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="ES"><i>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.</i></span></p>
@@ -5755,7 +5755,7 @@ major-latin;mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin
<p class="MsoListParagraphCxSpMiddle" style="margin-left:36pt;text-indent:-18pt"><span lang="ES" style="font-family:Symbol">·</span><span lang="ES" style="font-size:7pt">     </span><span lang="ES"><b>Resultados</b>: Archivos CSV con los resultados de los 64 trials por servicio</span></p>
<h2 style="mso-list:l22 level2 lfo18"><span lang="ES" style="text-transform:none">A.2 Estructura del Repositorio</span></h2>
<a name="_Ref_Fig11"></a><p class="MsoCaption" style="text-align:center"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->11<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Estructura del repositorio MastersThesis</span></i></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Estructura del repositorio MastersThesis" src="figures/figura_11.png" style="width:16cm;display:block;margin:0 auto" width="604"/></span></p>
<p class="MsoNormal" style="text-align:center"><span lang="ES"><img alt="Estructura del repositorio MastersThesis" src="figures/figura_11.png" style="max-width:16cm;height:auto;display:block;margin:0 auto"/></span></p>
<p class="Piedefoto-tabla" style="margin-left:0cm;text-align:center"><span lang="ES">Fuente: Elaboración propia.</span></p>
<p class="MsoNormal"><span lang="ES"><o:p> </o:p></span></p>
<a name="_Ref_Tab56"></a><p class="MsoCaption"><b><span lang="ES" style="font-size:12.0pt;line-height:150%">Tabla <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Tabla \* ARABIC <span style='mso-element:field-separator'></span><![endif]-->56<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang="ES" style="font-size:12.0pt;line-height:150%"> </span><i><span lang="ES" style="font-size:12.0pt;line-height:150%">Descripción de directorios principales.</span></i></p>