Spaces:
Sleeping
Sleeping
yoel
Refactor: mejora la interfaz de evaluación agregando campos para nombre y matrícula, y actualiza la gestión del leaderboard
a2dd494
| import torch | |
| import json | |
| import hashlib | |
| from collections import Counter | |
| from pathlib import Path | |
| LEADERBOARD_PATH = Path("leaderboard.json") | |
| def cargar_etiquetas(): | |
| with open("etiquetas.txt", "r") as f: | |
| etiquetas = f.read().splitlines()[1:] | |
| num_clases = len(etiquetas) | |
| codigo = {etiqueta.lower(): i for i, etiqueta in enumerate(etiquetas)} | |
| return etiquetas, num_clases, codigo | |
| def multiclass_accuracy(predictions, labels): | |
| # Obtén las clases predichas (la clase con la mayor probabilidad) | |
| _, predicted_classes = torch.max(predictions, 1) | |
| # Compara las clases predichas con las etiquetas verdaderas | |
| correct_predictions = (predicted_classes == labels).sum().item() | |
| # Calcula la precisión | |
| accuracy = correct_predictions / labels.size(0) | |
| return accuracy | |
| def obtener_sha256(ruta_archivo): | |
| sha256 = hashlib.sha256() | |
| with open(ruta_archivo, "rb") as archivo: | |
| for bloque in iter(lambda: archivo.read(8192), b""): | |
| sha256.update(bloque) | |
| return sha256.hexdigest() | |
| def calcular_puntaje(accuracy): | |
| accuracy_pct = accuracy * 100 | |
| base = max(0, min(accuracy_pct - 55, 20)) | |
| extra = 10 if accuracy_pct > 95 else 0 | |
| return int(base + extra) | |
| def cargar_leaderboard(): | |
| if not LEADERBOARD_PATH.exists(): | |
| return [] | |
| with LEADERBOARD_PATH.open("r", encoding="utf-8") as f: | |
| return json.load(f) | |
| def _marcar_duplicados(registros): | |
| conteo = Counter(entry["sha256"] for entry in registros) | |
| for entry in registros: | |
| entry["duplicado"] = conteo[entry["sha256"]] > 1 | |
| return registros | |
| def guardar_registro_leaderboard(entry, max_entries=500): | |
| registros = cargar_leaderboard() | |
| registros.append(entry) | |
| registros = registros[-max_entries:] | |
| registros = _marcar_duplicados(registros) | |
| LEADERBOARD_PATH.write_text( | |
| json.dumps(registros, indent=2, ensure_ascii=False), | |
| encoding="utf-8", | |
| ) | |
| return registros | |
| def limpiar_leaderboard(): | |
| LEADERBOARD_PATH.write_text("[]", encoding="utf-8") | |