SergioSCA's picture
Update app.py
1c951a9 verified
raw
history blame
7.07 kB
import gradio as gr
from datasets import load_dataset
import pandas as pd
import time
# Funci贸n para generar el esquema CSV basado en las selecciones del usuario
def generate_csv(modalities, vision_tasks, nlp_tasks, audio_tasks, progress=gr.Progress()):
tasks = []
if "Visi贸n" in modalities:
tasks.extend(vision_tasks)
if "NLP" in modalities:
tasks.extend(nlp_tasks)
if "Audio" in modalities:
tasks.extend(audio_tasks)
columns = []
total_steps = len(modalities) * len(tasks)
progress(0, desc="Iniciando generaci贸n del esquema CSV...")
for i, (modality, task) in enumerate(zip(modalities * len(tasks), tasks)):
progress(i / total_steps, desc=f"Procesando {modality} - {task}...")
time.sleep(1) # Simulaci贸n de procesamiento
if modality == "Visi贸n" and task == "Detecci贸n de Objetos":
columns.extend(["imagen", "etiqueta", "coordenadas_bbox"])
elif modality == "Visi贸n" and task == "Segmentaci贸n Sem谩ntica":
columns.extend(["imagen", "m谩scara"])
elif modality == "Visi贸n" and task == "Clasificaci贸n de Im谩genes":
columns.extend(["imagen", "etiqueta"])
elif modality == "Visi贸n" and task == "Reconocimiento Facial":
columns.extend(["imagen", "identidad"])
elif modality == "NLP" and task == "Clasificaci贸n de Texto":
columns.extend(["texto", "etiqueta"])
elif modality == "NLP" and task == "Generaci贸n de Texto":
columns.extend(["entrada", "salida"])
elif modality == "NLP" and task == "Traducci贸n Autom谩tica":
columns.extend(["texto_original", "traducci贸n"])
elif modality == "NLP" and task == "An谩lisis de Sentimientos":
columns.extend(["texto", "sentimiento"])
elif modality == "Audio" and task == "Clasificaci贸n de Audio":
columns.extend(["archivo_audio", "etiqueta"])
elif modality == "Audio" and task == "Transcripci贸n de Voz":
columns.extend(["archivo_audio", "texto"])
elif modality == "Audio" and task == "Separaci贸n de Fuentes":
columns.extend(["archivo_audio", "fuente_separada"])
elif modality == "Audio" and task == "S铆ntesis de Voz":
columns.extend(["texto", "archivo_audio_generado"])
elif modality == "Audio" and task == "MIDI": # Nueva tarea MIDI
columns.extend(["archivo_midi", "etiqueta"])
progress(1, desc="Esquema CSV generado con 茅xito.")
return ", ".join(columns)
# Funci贸n para buscar datasets p煤blicos relevantes
def search_datasets(modalities, progress=gr.Progress()):
dataset_map = {
"Visi贸n": ["coco", "imagenet", "openimages", "cityscapes"],
"NLP": ["imdb", "glue", "wmt14", "sentiment140"],
"Audio": ["common_voice", "librispeech", "fma", "musdb18", "lmd"] # Dataset MIDI agregado
}
results = []
total_steps = len(modalities)
progress(0, desc="Iniciando b煤squeda de datasets...")
for i, modality in enumerate(modalities):
progress(i / total_steps, desc=f"Buscando datasets para {modality}...")
time.sleep(1) # Simulaci贸n de procesamiento
if modality in dataset_map:
results.extend(dataset_map[modality])
progress(1, desc="B煤squeda de datasets completada.")
return "\n".join(results)
# Funci贸n para analizar datasets seleccionados y organizarlos seg煤n el esquema CSV
def analyze_datasets(selected_datasets, csv_schema, progress=gr.Progress()):
datasets = []
schema_columns = [col.strip() for col in csv_schema.split(",")]
total_steps = len(selected_datasets.split("\n"))
progress(0, desc="Iniciando an谩lisis de datasets...")
for i, url in enumerate(selected_datasets.split("\n")):
if url.strip():
progress(i / total_steps, desc=f"Analizando dataset: {url}")
try:
dataset = load_dataset(url.strip())
df = pd.DataFrame(dataset["train"])
# Filtrar columnas seg煤n el esquema CSV
filtered_df = df[[col for col in schema_columns if col in df.columns]]
datasets.append(filtered_df)
time.sleep(2) # Simulaci贸n de procesamiento
except Exception as e:
progress(1, desc=f"Error al analizar el dataset {url}: {str(e)}")
return f"Error al analizar el dataset {url}: {str(e)}"
combined_dataset = pd.concat(datasets, ignore_index=True)
progress(1, desc="An谩lisis completado. Datos organizados seg煤n el esquema CSV.")
return combined_dataset.to_csv(index=False)
# Interfaz de Usuario con Gradio
with gr.Blocks(title="Dise帽ador de Redes Neuronales Multimodales") as demo:
gr.Markdown("# Dise帽ador de Redes Neuronales Multimodales")
gr.Markdown("Define tu red neuronal multimodal, genera datasets espec铆ficos y entrena modelos.")
with gr.Row():
modalities = gr.CheckboxGroup(
["Visi贸n", "NLP", "Audio"], label="Selecciona Modalidades"
)
with gr.Row():
vision_tasks = gr.CheckboxGroup(
["Detecci贸n de Objetos", "Segmentaci贸n Sem谩ntica", "Clasificaci贸n de Im谩genes", "Reconocimiento Facial"],
label="Tareas para Visi贸n",
visible=False
)
nlp_tasks = gr.CheckboxGroup(
["Clasificaci贸n de Texto", "Generaci贸n de Texto", "Traducci贸n Autom谩tica", "An谩lisis de Sentimientos"],
label="Tareas para NLP",
visible=False
)
audio_tasks = gr.CheckboxGroup(
["Clasificaci贸n de Audio", "Transcripci贸n de Voz", "Separaci贸n de Fuentes", "S铆ntesis de Voz", "MIDI"], # Tarea MIDI a帽adida
label="Tareas para Audio",
visible=False
)
def update_task_visibility(modalities):
return [
gr.update(visible="Visi贸n" in modalities),
gr.update(visible="NLP" in modalities),
gr.update(visible="Audio" in modalities)
]
modalities.change(update_task_visibility, inputs=[modalities], outputs=[vision_tasks, nlp_tasks, audio_tasks])
with gr.Row():
generate_csv_btn = gr.Button("Generar Esquema CSV")
csv_output = gr.Textbox(label="Esquema CSV Generado")
with gr.Row():
search_datasets_btn = gr.Button("Buscar Datasets P煤blicos")
datasets_output = gr.Textbox(label="Datasets Disponibles", lines=5)
with gr.Row():
analyze_datasets_btn = gr.Button("Analizar Datasets Seleccionados")
processed_output = gr.File(label="Dataset Procesado")
# Conexiones de botones a funciones
generate_csv_btn.click(
generate_csv,
inputs=[modalities, vision_tasks, nlp_tasks, audio_tasks],
outputs=csv_output
)
search_datasets_btn.click(search_datasets, inputs=[modalities], outputs=datasets_output)
analyze_datasets_btn.click(analyze_datasets, inputs=[datasets_output, csv_output], outputs=processed_output)
# Lanzar la aplicaci贸n
demo.launch()