File size: 2,895 Bytes
e9c4110
4ff2734
 
58c3a68
ba84d55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ff2734
 
 
 
 
 
 
24441b8
4ff2734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c226c74
4ff2734
4db9925
3f3dc92
d1bdf0a
 
 
5a8efd8
06ed3eb
 
 
 
ca114f3
e638fa5
7371c8e
 
 
 
89fe585
 
 
 
 
 
 
2f51013
89fe585
58c3a68
3f6822c
89fe585
0a7b91b
58c3a68
3f6822c
883a28a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import gradio as gr
import numpy as np
from PIL import Image

from fastai.vision.all import *
from huggingface_hub import from_pretrained_fastai

import pathlib

# Cargar el modelo preentrenado
repo_id = "ignaciobfp/moonboard_difficulty"
learner = from_pretrained_fastai(repo_id)
labels = learner.dls.vocab

# Funci贸n para realizar predicciones
def predict(img):
    pred,pred_idx,probs = learner.predict(img)
    return {labels[i]: float(probs[i]) for i in range(len(labels))}


def row_to_image(presas, ano, inclinacion):
    m, n = 20, 18
    image_matrix = np.zeros((n, m, 3), dtype=np.uint8)

    for presa in presas:
        letra, numero = presa[0], int(presa[1:])
        valor = 1  # Se asume que todas las presas marcadas son blancas
        image_matrix[numero-1, ord(letra) - ord('A')] = [255 * valor, 255 * valor, 255 * valor]

    ano_scaled = (ano - 2016) / (2019 - 2016)
    grey_intensity_ano = int(ano_scaled * (255 - 50) + 50)
    image_matrix[:, -7:-5] = [grey_intensity_ano, grey_intensity_ano, grey_intensity_ano]

    inclinacion_scaled = (inclinacion - 25) / (40 - 25)
    grey_intensity_inclinacion = int(inclinacion_scaled * (100) + 100)
    image_matrix[:, -3:-1] = [grey_intensity_inclinacion, grey_intensity_inclinacion, grey_intensity_inclinacion]

    image_matrix_padded = np.pad(image_matrix, ((3, 3), (2, 2), (0, 0)), mode='constant')
    image_pil = Image.fromarray(image_matrix_padded, 'RGB')

    new_size = (image_pil.width * 3, image_pil.height * 3)
    resized_image_pil = image_pil.resize(new_size, resample=Image.NEAREST)

    return resized_image_pil


def mostrar_parametros(ano, inclinacion, *seleccion):
    # Imprimir en el log la variable seleccion
    print("Seleccion:", seleccion)
    # Asegurarse de que la selecci贸n sea una lista plana
    seleccion_plana = [item for sublist in seleccion for item in sublist]
    imagen = row_to_image(seleccion_plana, int(ano), int(inclinacion))
    return (imagen, predict(imagen))

# Generar todas las combinaciones posibles de letras y n煤meros
letras = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]
numeros = list(map(str, range(1, 19)))
combinaciones = [f"{letra}{numero}" for numero in numeros for letra in letras]

# Dividir las combinaciones en listas de 11 elementos (A-K)
combinaciones_por_filas = [combinaciones[i:i+11] for i in range(0, len(combinaciones), 11)]

# Crear la interfaz
inputs = [
    gr.Dropdown(["2016", "2017", "2019"], label="A帽o"),
    gr.Dropdown(["25", "40"], label="Inclinaci贸n"),
]

# Agregar un CheckboxGroup para cada fila (del 1 al 18)
for i, fila in enumerate(combinaciones_por_filas, start=1):
    inputs.append(gr.CheckboxGroup(fila, label=f"Fila {i}", scale=4, min_width=2000))

iface = gr.Interface(
    fn=mostrar_parametros,
    inputs=inputs,
    outputs=[gr.Image(label="Output"), gr.Label("Predicci贸n del Modelo")],
)

iface.launch(share=False)