Some checks failed
build_docker / essential (push) Successful in 1s
build_docker / build_paddle_ocr (push) Failing after 5m31s
build_docker / build_easyocr (push) Failing after 7m40s
build_docker / build_doctr (push) Has been cancelled
build_docker / build_doctr_gpu (push) Has been cancelled
build_docker / build_raytune (push) Has been cancelled
build_docker / build_paddle_ocr_gpu (push) Has been cancelled
build_docker / build_easyocr_gpu (push) Has been cancelled
329 lines
8.6 KiB
JavaScript
329 lines
8.6 KiB
JavaScript
// Chart instances
|
|
const charts = {};
|
|
|
|
// UNIR Colors
|
|
const BLUE = '#0098CD';
|
|
const BLUE_DARK = '#007AA3';
|
|
const LIGHT = '#E6F4F9';
|
|
const RED = '#E8654A';
|
|
const ORANGE = '#F0A030';
|
|
const GREEN = '#2EAD4B';
|
|
const GRAY = '#CCCCCC';
|
|
|
|
// Common chart options
|
|
const commonOptions = {
|
|
responsive: true,
|
|
maintainAspectRatio: true,
|
|
animation: { duration: 1200, easing: 'easeOutQuart' },
|
|
plugins: { legend: { display: false } }
|
|
};
|
|
|
|
function createBenchmarkChart() {
|
|
const ctx = document.getElementById('chartBenchmark');
|
|
if (!ctx || charts.benchmark) return;
|
|
charts.benchmark = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: ['EasyOCR', 'PaddleOCR', 'DocTR'],
|
|
datasets: [
|
|
{
|
|
label: 'CER (%)',
|
|
data: [11.23, 7.76, 12.06],
|
|
backgroundColor: [GRAY, BLUE, GRAY],
|
|
borderColor: [GRAY, BLUE_DARK, GRAY],
|
|
borderWidth: 2,
|
|
borderRadius: 6,
|
|
barPercentage: 0.6
|
|
},
|
|
{
|
|
label: 'WER (%)',
|
|
data: [36.36, 11.62, 42.01],
|
|
backgroundColor: ['rgba(204,204,204,0.4)', 'rgba(0,152,205,0.4)', 'rgba(204,204,204,0.4)'],
|
|
borderColor: [GRAY, BLUE, GRAY],
|
|
borderWidth: 2,
|
|
borderRadius: 6,
|
|
barPercentage: 0.6
|
|
}
|
|
]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
indexAxis: 'y',
|
|
plugins: {
|
|
legend: { display: true, position: 'top', labels: { font: { family: 'Calibri', size: 12 } } }
|
|
},
|
|
scales: {
|
|
x: { title: { display: true, text: 'Error Rate (%)', font: { family: 'Calibri' } }, grid: { color: '#f0f0f0' } },
|
|
y: { grid: { display: false }, ticks: { font: { family: 'Calibri', size: 14, weight: 'bold' } } }
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function createTrialsChart() {
|
|
const ctx = document.getElementById('chartTrials');
|
|
if (!ctx || charts.trials) return;
|
|
charts.trials = new Chart(ctx, {
|
|
type: 'doughnut',
|
|
data: {
|
|
labels: ['CER < 1%', 'CER 1-2%', 'CER 2-5%', 'CER 5-10%'],
|
|
datasets: [{
|
|
data: [15, 28, 10, 11],
|
|
backgroundColor: [BLUE_DARK, BLUE, '#7EC8E3', GRAY],
|
|
borderColor: 'white',
|
|
borderWidth: 3,
|
|
hoverOffset: 8
|
|
}]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
cutout: '55%',
|
|
plugins: {
|
|
legend: {
|
|
display: true,
|
|
position: 'bottom',
|
|
labels: { font: { family: 'Calibri', size: 12 }, padding: 15, usePointStyle: true, pointStyle: 'rectRounded' }
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function createTextlineChart() {
|
|
const ctx = document.getElementById('chartTextline');
|
|
if (!ctx || charts.textline) return;
|
|
charts.textline = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: ['False', 'True'],
|
|
datasets: [{
|
|
label: 'CER medio (%)',
|
|
data: [4.73, 1.74],
|
|
backgroundColor: [GRAY, BLUE],
|
|
borderColor: ['#aaa', BLUE_DARK],
|
|
borderWidth: 2,
|
|
borderRadius: 8,
|
|
barPercentage: 0.5
|
|
}]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
scales: {
|
|
y: {
|
|
beginAtZero: true,
|
|
max: 6,
|
|
title: { display: true, text: 'CER (%)', font: { family: 'Calibri', size: 13 } },
|
|
grid: { color: '#f0f0f0' }
|
|
},
|
|
x: {
|
|
title: { display: true, text: 'textline_orientation', font: { family: 'Calibri', size: 13, weight: 'bold' } },
|
|
grid: { display: false },
|
|
ticks: { font: { family: 'Calibri', size: 16, weight: 'bold' } }
|
|
}
|
|
},
|
|
plugins: {
|
|
legend: { display: false },
|
|
tooltip: {
|
|
callbacks: {
|
|
label: (ctx) => `CER: ${ctx.parsed.y}%`
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function createCorrelationChart() {
|
|
const ctx = document.getElementById('chartCorrelation');
|
|
if (!ctx || charts.correlation) return;
|
|
const params = [
|
|
'use_doc_unwarping',
|
|
'text_det_thresh',
|
|
'text_det_box_thresh',
|
|
'text_rec_score_thresh',
|
|
'textline_orientation',
|
|
'use_doc_orient_classify'
|
|
];
|
|
const values = [0.879, 0.428, 0.311, -0.268, -0.535, -0.712];
|
|
const colors = values.map(v => v > 0 ? RED : BLUE);
|
|
|
|
charts.correlation = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: params,
|
|
datasets: [{
|
|
data: values,
|
|
backgroundColor: colors,
|
|
borderColor: colors.map(c => c === RED ? '#C04030' : BLUE_DARK),
|
|
borderWidth: 1.5,
|
|
borderRadius: 4,
|
|
barPercentage: 0.65
|
|
}]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
indexAxis: 'y',
|
|
scales: {
|
|
x: {
|
|
min: -1, max: 1,
|
|
title: { display: true, text: 'Correlación Pearson', font: { family: 'Calibri', size: 11 } },
|
|
grid: { color: (ctx) => ctx.tick.value === 0 ? '#666' : '#f0f0f0' }
|
|
},
|
|
y: {
|
|
grid: { display: false },
|
|
ticks: { font: { family: 'Consolas, monospace', size: 10 } }
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function createImportanceChart() {
|
|
const ctx = document.getElementById('chartImportance');
|
|
if (!ctx || charts.importance) return;
|
|
const params = [
|
|
'use_doc_unwarping',
|
|
'use_doc_orient_classify',
|
|
'textline_orientation',
|
|
'text_det_thresh',
|
|
'text_det_box_thresh',
|
|
'text_rec_score_thresh'
|
|
];
|
|
const values = [0.879, 0.712, 0.535, 0.428, 0.311, 0.268];
|
|
const colors = values.map((_, i) => {
|
|
const alpha = 1 - (i * 0.12);
|
|
return `rgba(0, 152, 205, ${alpha})`;
|
|
});
|
|
|
|
charts.importance = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: params,
|
|
datasets: [{
|
|
data: values,
|
|
backgroundColor: colors,
|
|
borderColor: BLUE_DARK,
|
|
borderWidth: 1,
|
|
borderRadius: 4,
|
|
barPercentage: 0.65
|
|
}]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
indexAxis: 'y',
|
|
scales: {
|
|
x: {
|
|
beginAtZero: true, max: 1,
|
|
title: { display: true, text: '|Correlación|', font: { family: 'Calibri', size: 11 } },
|
|
grid: { color: '#f0f0f0' }
|
|
},
|
|
y: {
|
|
grid: { display: false },
|
|
ticks: { font: { family: 'Consolas, monospace', size: 10 } }
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function createValidationChart() {
|
|
const ctx = document.getElementById('chartValidation');
|
|
if (!ctx || charts.validation) return;
|
|
charts.validation = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: ['CER (45 pág)', 'WER (45 pág)', 'CER (mejor trial)'],
|
|
datasets: [
|
|
{
|
|
label: 'Baseline',
|
|
data: [8.85, 13.05, 7.76],
|
|
backgroundColor: 'rgba(204,204,204,0.7)',
|
|
borderColor: '#aaa',
|
|
borderWidth: 2,
|
|
borderRadius: 6,
|
|
barPercentage: 0.7
|
|
},
|
|
{
|
|
label: 'Optimizado',
|
|
data: [7.72, 11.40, 0.79],
|
|
backgroundColor: BLUE,
|
|
borderColor: BLUE_DARK,
|
|
borderWidth: 2,
|
|
borderRadius: 6,
|
|
barPercentage: 0.7
|
|
}
|
|
]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
plugins: {
|
|
legend: { display: true, position: 'top', labels: { font: { family: 'Calibri', size: 13 } } }
|
|
},
|
|
scales: {
|
|
y: {
|
|
beginAtZero: true,
|
|
title: { display: true, text: 'Error Rate (%)', font: { family: 'Calibri' } },
|
|
grid: { color: '#f0f0f0' }
|
|
},
|
|
x: {
|
|
grid: { display: false },
|
|
ticks: { font: { family: 'Calibri', size: 12 } }
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function createGPUChart() {
|
|
const ctx = document.getElementById('chartGPU');
|
|
if (!ctx || charts.gpu) return;
|
|
charts.gpu = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: ['CPU (Ryzen 7 5800H)', 'GPU (RTX 3060)'],
|
|
datasets: [{
|
|
label: 'Segundos por página',
|
|
data: [69.4, 0.84],
|
|
backgroundColor: [ORANGE, BLUE],
|
|
borderColor: ['#CC8020', BLUE_DARK],
|
|
borderWidth: 2,
|
|
borderRadius: 8,
|
|
barPercentage: 0.5
|
|
}]
|
|
},
|
|
options: {
|
|
...commonOptions,
|
|
indexAxis: 'y',
|
|
scales: {
|
|
x: {
|
|
beginAtZero: true,
|
|
title: { display: true, text: 'Segundos por página', font: { family: 'Calibri', size: 13 } },
|
|
grid: { color: '#f0f0f0' }
|
|
},
|
|
y: {
|
|
grid: { display: false },
|
|
ticks: { font: { family: 'Calibri', size: 14, weight: 'bold' } }
|
|
}
|
|
},
|
|
plugins: {
|
|
legend: { display: false },
|
|
tooltip: {
|
|
callbacks: {
|
|
label: (ctx) => `${ctx.parsed.x} s/página`
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Chart creation map
|
|
const chartCreators = {
|
|
benchmark: createBenchmarkChart,
|
|
trials: createTrialsChart,
|
|
textline: createTextlineChart,
|
|
correlations: () => { createCorrelationChart(); createImportanceChart(); },
|
|
validation: createValidationChart,
|
|
gpu: createGPUChart
|
|
};
|