File size: 7,074 Bytes
efdd1f5
 
 
b3fc81e
efdd1f5
 
187ebd3
 
 
 
 
 
 
 
 
efdd1f5
b3fc81e
 
187ebd3
b3fc81e
 
efdd1f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c951a9
 
b3fc81e
efdd1f5
 
 
b3fc81e
efdd1f5
 
 
1c951a9
efdd1f5
 
b3fc81e
 
 
 
 
efdd1f5
 
b3fc81e
efdd1f5
 
1c951a9
 
efdd1f5
1c951a9
 
 
 
efdd1f5
1c951a9
efdd1f5
 
1c951a9
 
 
 
b3fc81e
efdd1f5
1c951a9
 
efdd1f5
1c951a9
efdd1f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c951a9
efdd1f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c951a9
efdd1f5
 
 
 
 
187ebd3
efdd1f5
 
 
1c951a9
efdd1f5
 
cba4d16
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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()