SergioSCA commited on
Commit
c7d73f9
verified
1 Parent(s): b956911

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -127
app.py CHANGED
@@ -3,7 +3,7 @@ from datasets import load_dataset, list_datasets
3
  import pandas as pd
4
  import time
5
 
6
- # Funci贸n para generar el esquema CSV basado en las selecciones del usuario
7
  def generate_csv(modalities, vision_tasks, nlp_tasks, audio_tasks, progress=gr.Progress()):
8
  tasks = []
9
  if "Visi贸n" in modalities:
@@ -14,154 +14,90 @@ def generate_csv(modalities, vision_tasks, nlp_tasks, audio_tasks, progress=gr.P
14
  tasks.extend(audio_tasks)
15
 
16
  columns = []
17
- total_steps = len(modalities) * len(tasks)
18
  progress(0, desc="Iniciando generaci贸n del esquema CSV...")
19
- for i, (modality, task) in enumerate(zip(modalities * len(tasks), tasks)):
20
- progress(i / total_steps, desc=f"Procesando {modality} - {task}...")
21
- time.sleep(1) # Simulaci贸n de procesamiento
22
- if modality == "Visi贸n" and task == "Detecci贸n de Objetos":
23
- columns.extend(["imagen", "etiqueta", "coordenadas_bbox"])
24
- elif modality == "Visi贸n" and task == "Segmentaci贸n Sem谩ntica":
25
- columns.extend(["imagen", "m谩scara"])
26
- elif modality == "Visi贸n" and task == "Clasificaci贸n de Im谩genes":
27
- columns.extend(["imagen", "etiqueta"])
28
- elif modality == "Visi贸n" and task == "Reconocimiento Facial":
29
- columns.extend(["imagen", "identidad"])
30
- elif modality == "NLP" and task == "Clasificaci贸n de Texto":
31
- columns.extend(["texto", "etiqueta"])
32
- elif modality == "NLP" and task == "Generaci贸n de Texto":
33
- columns.extend(["entrada", "salida"])
34
- elif modality == "NLP" and task == "Traducci贸n Autom谩tica":
35
- columns.extend(["texto_original", "traducci贸n"])
36
- elif modality == "NLP" and task == "An谩lisis de Sentimientos":
37
- columns.extend(["texto", "sentimiento"])
38
- elif modality == "Audio" and task == "Clasificaci贸n de Audio":
39
- columns.extend(["archivo_audio", "etiqueta"])
40
- elif modality == "Audio" and task == "Transcripci贸n de Voz":
41
- columns.extend(["archivo_audio", "texto"])
42
- elif modality == "Audio" and task == "Separaci贸n de Fuentes":
43
- columns.extend(["archivo_audio", "fuente_separada"])
44
- elif modality == "Audio" and task == "S铆ntesis de Voz":
45
- columns.extend(["texto", "archivo_audio_generado"])
46
- elif modality == "Audio" and task == "MIDI": # Nueva tarea MIDI
47
- columns.extend(["archivo_midi", "etiqueta"])
48
  progress(1, desc="Esquema CSV generado con 茅xito.")
49
  return ", ".join(columns)
50
 
51
- # Funci贸n para buscar datasets p煤blicos relevantes en Hugging Face
52
- def search_datasets(modalities, progress=gr.Progress()):
53
- all_datasets = list_datasets()
54
- dataset_map = {
55
- "Visi贸n": [ds for ds in all_datasets if "vision" in ds or "image" in ds],
56
- "NLP": [ds for ds in all_datasets if "text" in ds or "nlp" in ds],
57
- "Audio": [ds for ds in all_datasets if "audio" in ds or "midi" in ds]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
- results = []
60
- total_steps = len(modalities)
61
- progress(0, desc="Iniciando b煤squeda de datasets...")
62
- for i, modality in enumerate(modalities):
63
- progress(i / total_steps, desc=f"Buscando datasets para {modality}...")
64
- time.sleep(1) # Simulaci贸n de procesamiento
65
- if modality in dataset_map:
66
- results.extend(dataset_map[modality])
67
- progress(1, desc="B煤squeda de datasets completada.")
68
- return "\n".join(results)
69
 
70
- # Funci贸n para analizar datasets seleccionados y organizarlos seg煤n el esquema CSV
71
  def analyze_datasets(selected_datasets, csv_schema, progress=gr.Progress()):
72
  datasets = []
73
  schema_columns = [col.strip() for col in csv_schema.split(",")]
74
  total_steps = len(selected_datasets.split("\n"))
75
  progress(0, desc="Iniciando an谩lisis de datasets...")
 
76
  for i, url in enumerate(selected_datasets.split("\n")):
77
  if url.strip():
78
- progress(i / total_steps, desc=f"Analizando dataset: {url}")
79
  try:
80
- # Cargar el dataset desde Hugging Face
81
  dataset = load_dataset(url.strip(), trust_remote_code=True)
82
- df = pd.DataFrame(dataset["train"])
83
- # Filtrar y reordenar columnas seg煤n el esquema CSV
84
- filtered_df = df[[col for col in schema_columns if col in df.columns]]
 
 
 
 
 
85
  datasets.append(filtered_df)
86
- time.sleep(2) # Simulaci贸n de procesamiento
87
  except Exception as e:
88
- progress(1, desc=f"Error al analizar el dataset {url}: {str(e)}")
89
- return f"Error al analizar el dataset {url}: {str(e)}"
 
 
 
90
  combined_dataset = pd.concat(datasets, ignore_index=True)
91
- progress(1, desc="An谩lisis completado. Datos organizados seg煤n el esquema CSV.")
92
  return combined_dataset.to_csv(index=False)
93
 
94
- # Funci贸n para ordenar o combinar columnas del esquema CSV generado
95
  def reorder_columns(csv_schema, column_order, progress=gr.Progress()):
96
- schema_columns = [col.strip() for col in csv_schema.split(",")]
97
- reordered_columns = [col for col in column_order if col in schema_columns]
98
- missing_columns = [col for col in schema_columns if col not in reordered_columns]
99
- final_columns = reordered_columns + missing_columns
100
- progress(1, desc="Columnas reorganizadas con 茅xito.")
101
- return ", ".join(final_columns)
102
 
103
- # Interfaz de Usuario con Gradio
104
  with gr.Blocks(title="Dise帽ador de Redes Neuronales Multimodales") as demo:
105
- gr.Markdown("# Dise帽ador de Redes Neuronales Multimodales")
106
- gr.Markdown("Define tu red neuronal multimodal, genera datasets espec铆ficos y entrena modelos.")
107
-
108
- with gr.Row():
109
- modalities = gr.CheckboxGroup(
110
- ["Visi贸n", "NLP", "Audio"], label="Selecciona Modalidades"
111
- )
112
-
113
- with gr.Row():
114
- vision_tasks = gr.CheckboxGroup(
115
- ["Detecci贸n de Objetos", "Segmentaci贸n Sem谩ntica", "Clasificaci贸n de Im谩genes", "Reconocimiento Facial"],
116
- label="Tareas para Visi贸n",
117
- visible=False
118
- )
119
- nlp_tasks = gr.CheckboxGroup(
120
- ["Clasificaci贸n de Texto", "Generaci贸n de Texto", "Traducci贸n Autom谩tica", "An谩lisis de Sentimientos"],
121
- label="Tareas para NLP",
122
- visible=False
123
- )
124
- audio_tasks = gr.CheckboxGroup(
125
- ["Clasificaci贸n de Audio", "Transcripci贸n de Voz", "Separaci贸n de Fuentes", "S铆ntesis de Voz", "MIDI"], # Tarea MIDI a帽adida
126
- label="Tareas para Audio",
127
- visible=False
128
- )
129
-
130
- def update_task_visibility(modalities):
131
- return [
132
- gr.update(visible="Visi贸n" in modalities),
133
- gr.update(visible="NLP" in modalities),
134
- gr.update(visible="Audio" in modalities)
135
- ]
136
-
137
- modalities.change(update_task_visibility, inputs=[modalities], outputs=[vision_tasks, nlp_tasks, audio_tasks])
138
-
139
- with gr.Row():
140
- generate_csv_btn = gr.Button("Generar Esquema CSV")
141
- csv_output = gr.Textbox(label="Esquema CSV Generado")
142
-
143
- with gr.Row():
144
- search_datasets_btn = gr.Button("Buscar Datasets P煤blicos")
145
- datasets_output = gr.Textbox(label="Datasets Disponibles", lines=5)
146
-
147
- with gr.Row():
148
- analyze_datasets_btn = gr.Button("Analizar Datasets Seleccionados")
149
- processed_output = gr.File(label="Dataset Procesado")
150
-
151
- with gr.Row():
152
- reorder_columns_btn = gr.Button("Reorganizar Columnas")
153
- column_order_input = gr.Textbox(label="Orden de Columnas (separadas por comas)")
154
- reordered_csv_output = gr.Textbox(label="Esquema CSV Reorganizado")
155
-
156
- # Conexiones de botones a funciones
157
- generate_csv_btn.click(
158
- generate_csv,
159
- inputs=[modalities, vision_tasks, nlp_tasks, audio_tasks],
160
- outputs=csv_output
161
- )
162
- search_datasets_btn.click(search_datasets, inputs=[modalities], outputs=datasets_output)
163
- analyze_datasets_btn.click(analyze_datasets, inputs=[datasets_output, csv_output], outputs=processed_output)
164
- reorder_columns_btn.click(reorder_columns, inputs=[csv_output, column_order_input], outputs=reordered_csv_output)
165
 
166
- # Lanzar la aplicaci贸n
167
  demo.launch()
 
3
  import pandas as pd
4
  import time
5
 
6
+ # Funci贸n para generar el esquema CSV
7
  def generate_csv(modalities, vision_tasks, nlp_tasks, audio_tasks, progress=gr.Progress()):
8
  tasks = []
9
  if "Visi贸n" in modalities:
 
14
  tasks.extend(audio_tasks)
15
 
16
  columns = []
17
+ total_steps = len(tasks) # Simplificado para usar solo la lista de tareas
18
  progress(0, desc="Iniciando generaci贸n del esquema CSV...")
19
+
20
+ for i, task in enumerate(tasks): # Iterar directamente sobre la lista de tareas
21
+ modality = get_modality(task) # Obtener la modalidad basada en la tarea
22
+ progress((i + 1) / total_steps, desc=f"Procesando {modality} - {task}...")
23
+ time.sleep(1)
24
+ columns.extend(get_columns_for_task(task)) # Funci贸n para obtener columnas
25
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  progress(1, desc="Esquema CSV generado con 茅xito.")
27
  return ", ".join(columns)
28
 
29
+ # Funci贸n auxiliar para obtener la modalidad seg煤n la tarea
30
+ def get_modality(task):
31
+ if task in ["Detecci贸n de Objetos", "Segmentaci贸n Sem谩ntica", "Clasificaci贸n de Im谩genes", "Reconocimiento Facial"]:
32
+ return "Visi贸n"
33
+ elif task in ["Clasificaci贸n de Texto", "Generaci贸n de Texto", "Traducci贸n Autom谩tica", "An谩lisis de Sentimientos"]:
34
+ return "NLP"
35
+ elif task in ["Clasificaci贸n de Audio", "Transcripci贸n de Voz", "Separaci贸n de Fuentes", "S铆ntesis de Voz", "MIDI"]:
36
+ return "Audio"
37
+ return "Desconocido"
38
+
39
+ # Funci贸n auxiliar para obtener las columnas seg煤n la tarea
40
+ def get_columns_for_task(task):
41
+ column_mapping = {
42
+ "Detecci贸n de Objetos": ["imagen", "etiqueta", "coordenadas_bbox"],
43
+ "Segmentaci贸n Sem谩ntica": ["imagen", "m谩scara"],
44
+ "Clasificaci贸n de Im谩genes": ["imagen", "etiqueta"],
45
+ "Reconocimiento Facial": ["imagen", "identidad"],
46
+ "Clasificaci贸n de Texto": ["texto", "etiqueta"],
47
+ "Generaci贸n de Texto": ["entrada", "salida"],
48
+ "Traducci贸n Autom谩tica": ["texto_original", "traducci贸n"],
49
+ "An谩lisis de Sentimientos": ["texto", "sentimiento"],
50
+ "Clasificaci贸n de Audio": ["archivo_audio", "etiqueta"],
51
+ "Transcripci贸n de Voz": ["archivo_audio", "texto"],
52
+ "Separaci贸n de Fuentes": ["archivo_audio", "fuente_separada"],
53
+ "S铆ntesis de Voz": ["texto", "archivo_audio_generado"],
54
+ "MIDI": ["archivo_midi", "etiqueta"]
55
  }
56
+ return column_mapping.get(task, [])
57
+
58
+ # Funci贸n para buscar datasets (sin cambios)
59
+ def search_datasets(modalities, progress=gr.Progress()):
60
+ # ... (sin cambios)
 
 
 
 
 
61
 
62
+ # Funci贸n para analizar datasets (con manejo de errores mejorado)
63
  def analyze_datasets(selected_datasets, csv_schema, progress=gr.Progress()):
64
  datasets = []
65
  schema_columns = [col.strip() for col in csv_schema.split(",")]
66
  total_steps = len(selected_datasets.split("\n"))
67
  progress(0, desc="Iniciando an谩lisis de datasets...")
68
+
69
  for i, url in enumerate(selected_datasets.split("\n")):
70
  if url.strip():
71
+ progress((i + 1) / total_steps, desc=f"Analizando dataset: {url}")
72
  try:
 
73
  dataset = load_dataset(url.strip(), trust_remote_code=True)
74
+ df = pd.DataFrame(dataset["train"]) # Asumiendo que siempre se usa "train"
75
+
76
+ # Asegurar que todas las columnas del esquema est茅n presentes, a帽adiendo NaN si faltan
77
+ for col in schema_columns:
78
+ if col not in df.columns:
79
+ df[col] = float('nan')
80
+
81
+ filtered_df = df[schema_columns] # Seleccionar y reordenar columnas
82
  datasets.append(filtered_df)
83
+ time.sleep(2)
84
  except Exception as e:
85
+ error_message = f"Error al analizar {url}: {str(e)}"
86
+ print(error_message) # Imprimir mensaje de error para diagn贸stico
87
+ progress(1, desc=error_message) # Mostrar mensaje de error en la interfaz
88
+ return error_message # Devolver mensaje de error para detener el proceso
89
+
90
  combined_dataset = pd.concat(datasets, ignore_index=True)
91
+ progress(1, desc="An谩lisis completado.")
92
  return combined_dataset.to_csv(index=False)
93
 
94
+ # Funci贸n para reorganizar columnas (sin cambios)
95
  def reorder_columns(csv_schema, column_order, progress=gr.Progress()):
96
+ # ... (sin cambios)
 
 
 
 
 
97
 
98
+ # Interfaz de Usuario con Gradio (sin cambios)
99
  with gr.Blocks(title="Dise帽ador de Redes Neuronales Multimodales") as demo:
100
+ # ... (sin cambios)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
 
102
+ # Lanzar la aplicaci贸n (sin cambios)
103
  demo.launch()