Spaces:
Sleeping
Sleeping
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) | |