caissaa23 commited on
Commit
64d1fad
·
verified ·
1 Parent(s): 52cc649

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -34
app.py CHANGED
@@ -6,16 +6,13 @@ from chatbot_nuti import buscar_respuesta
6
  from coach_emocional import coach_emocional_inteligente
7
  from retos_saludables import mostrar_retos, completar_reto
8
 
9
- # ---------- MEMORIA DE CONVERSACIÓN ---------- #
10
  MEMORIA_NUTI = []
11
  MEMORIA_COACH = []
12
 
13
- # ---------- VARIABLES GLOBALES ---------- #
14
  calorias_totales = 0
15
  calorias_restantes = 0
16
  historial_comidas = []
17
- RECETAS = []
18
-
19
 
20
  # ---------- CHATBOT NUTI ---------- #
21
  def conversar_nuti(mensaje, historial):
@@ -25,7 +22,6 @@ def conversar_nuti(mensaje, historial):
25
  historial = historial + [(mensaje, respuesta)]
26
  return historial, ""
27
 
28
-
29
  # ---------- COACH EMOCIONAL ---------- #
30
  def conversar_coach(mensaje, historial):
31
  MEMORIA_COACH.append({"user": mensaje})
@@ -34,7 +30,6 @@ def conversar_coach(mensaje, historial):
34
  historial = historial + [(mensaje, respuesta)]
35
  return historial, ""
36
 
37
-
38
  # ---------- CÁLCULO DE CALORÍAS ---------- #
39
  def calcular_calorias(edad, peso, altura, genero, actividad, meta):
40
  global calorias_totales, calorias_restantes
@@ -53,6 +48,7 @@ def calcular_calorias(edad, peso, altura, genero, actividad, meta):
53
 
54
  calorias_base = bmr * factores.get(actividad.lower(), 1.55)
55
 
 
56
  if meta.lower() == "bajar de peso":
57
  calorias_totales = round(calorias_base * 0.8)
58
  elif meta.lower() == "subir de peso":
@@ -63,15 +59,13 @@ def calcular_calorias(edad, peso, altura, genero, actividad, meta):
63
  calorias_restantes = calorias_totales
64
  return f"🎯 Tu meta es **{meta.lower()}**.\n🔥 Puedes consumir aproximadamente **{calorias_totales} calorías por día**."
65
 
66
-
67
- # ---------- RELOJ INTELIGENTE ---------- #
68
  def calorias_reloj(calorias_quemadas):
69
  global calorias_restantes
70
  calorias_restantes += calorias_quemadas
71
- return f"⌚ Has quemado **{calorias_quemadas} kcal** según tu reloj. Te quedan **{calorias_restantes} kcal** disponibles hoy."
72
-
73
 
74
- # ---------- DETECCIÓN DE COMIDA (SIMULADA) ---------- #
75
  def analizar_foto(imagen):
76
  if imagen is None:
77
  return "⚠️ Sube una foto de tu comida.", 0
@@ -88,7 +82,6 @@ def analizar_foto(imagen):
88
  nombre, calorias = random.choice(comidas)
89
  return f"🍽️ Parece que comiste **{nombre}** (~{calorias} kcal).", calorias
90
 
91
-
92
  def registrar_comida(imagen):
93
  global calorias_restantes, historial_comidas
94
  info, calorias = analizar_foto(imagen)
@@ -98,7 +91,6 @@ def registrar_comida(imagen):
98
  historial_comidas.append({"comida": info, "calorias": calorias})
99
  return f"{info}\n\n🔥 Calorías restantes del día: **{calorias_restantes} kcal**."
100
 
101
-
102
  def mostrar_historial():
103
  if not historial_comidas:
104
  return "📭 Aún no has registrado comidas hoy."
@@ -108,15 +100,14 @@ def mostrar_historial():
108
  texto += f"\n🔥 Te quedan **{calorias_restantes} kcal** por consumir hoy."
109
  return texto
110
 
111
-
112
  # ---------- RECETAS ---------- #
 
113
  def subir_receta(nombre, descripcion, imagen):
114
  if nombre and descripcion:
115
  RECETAS.append({"nombre": nombre, "descripcion": descripcion, "imagen": imagen})
116
  return f"✅ Receta '{nombre}' añadida correctamente."
117
  return "⚠️ Ingresa nombre y descripción."
118
 
119
-
120
  def mostrar_recetas():
121
  if not RECETAS:
122
  return "📭 No hay recetas cargadas aún."
@@ -125,13 +116,15 @@ def mostrar_recetas():
125
  texto += f"**{r['nombre']}**\n{r['descripcion']}\n\n"
126
  return texto
127
 
128
-
129
  # ---------- BUSCADOR DE NUTRIÓLOGOS ---------- #
130
  def buscar_nutriologos(pais, estado, ciudad):
131
  ejemplos = [
132
- {"nombre": "Dra. Sofía Martínez", "pais": "México", "estado": "Sonora", "ciudad": "Hermosillo", "especialidad": "Nutrición deportiva", "redes": "@nutrisofi (Instagram)", "reseña": "⭐️⭐️⭐️⭐️⭐️ 4.9"},
133
- {"nombre": "Lic. Andrés Gómez", "pais": "México", "estado": "CDMX", "ciudad": "Coyoacán", "especialidad": "Nutrición clínica", "redes": "@andresnutricion (TikTok)", "reseña": "⭐️⭐️⭐️⭐️ 4.7"},
134
- {"nombre": "Dra. Camila Silva", "pais": "Chile", "estado": "Región Metropolitana", "ciudad": "Santiago", "especialidad": "Salud emocional", "redes": "@camila.wellness (Instagram)", "reseña": "⭐️⭐️⭐️⭐️⭐️ 5.0"}
 
 
 
135
  ]
136
  resultados = [n for n in ejemplos if n["pais"].lower() == pais.lower() or n["ciudad"].lower() == ciudad.lower() or n["estado"].lower() == estado.lower()]
137
  if not resultados:
@@ -141,13 +134,13 @@ def buscar_nutriologos(pais, estado, ciudad):
141
  texto += f"**{n['nombre']}** - {n['especialidad']} ({n['ciudad']}, {n['pais']})\n📱 {n['redes']}\n💬 {n['reseña']}\n\n"
142
  return texto
143
 
144
-
145
- # ---------- INTERFAZ ---------- #
146
  def main():
147
  with gr.Blocks(title="NutriBot IA 🥗") as app:
148
  gr.Markdown("# 🧠 Bienvenido a **NutriBot IA** 🍎")
149
- gr.Markdown("Comer sano, inteligente y divertido 🌿")
150
 
 
151
  with gr.Tab("👤 Datos Personales"):
152
  with gr.Row():
153
  nombre = gr.Textbox(label="Nombre completo")
@@ -158,23 +151,35 @@ def main():
158
  actividad = gr.Dropdown(["Sedentario", "Ligero", "Moderado", "Activo", "Muy activo"], label="Nivel de actividad física")
159
  meta = gr.Radio(["Bajar de peso", "Mantener peso", "Subir de peso"], label="🎯 Meta personal")
160
 
161
- condicion = gr.Textbox(label="🩺 ¿Tienes alguna enfermedad o condición alimenticia?",
162
- placeholder="Ejemplo: diabetes, hipertensión, intolerancia a la lactosa...")
163
 
164
  guardar_datos = gr.Button("Guardar información 🧾")
165
  salida_datos = gr.Markdown()
166
 
167
- def guardar_informacion(nombre, edad, peso, altura, genero, actividad, meta, condicion):
168
- perfil = {"nombre": nombre, "edad": edad, "peso": peso, "altura": altura,
169
- "genero": genero, "actividad": actividad, "meta": meta, "condicion": condicion}
 
 
 
 
 
 
 
 
 
170
  with open("perfil_usuario.json", "w") as f:
171
  json.dump(perfil, f, indent=4)
172
- return f"✅ Información guardada. Nuti ahora sabe que tienes: **{condicion or 'ninguna condición registrada'}**."
173
 
174
- guardar_datos.click(guardar_informacion,
175
- inputs=[nombre, edad, peso, altura, genero, actividad, meta, condicion],
176
- outputs=salida_datos)
 
 
177
 
 
178
  with gr.Tab("📸 Registro de Comidas"):
179
  gr.Markdown("Sube una foto de tu comida y NutriBot estimará las calorías 🍽️")
180
  imagen = gr.Image(label="Foto de tu comida", type="filepath")
@@ -186,36 +191,41 @@ def main():
186
  salida_historial = gr.Markdown()
187
  boton_historial.click(mostrar_historial, outputs=salida_historial)
188
 
 
189
  with gr.Tab("⌚ Calorías del Reloj"):
190
  calorias_quemadas = gr.Number(label="Calorías quemadas (reloj inteligente)")
191
  boton_reloj = gr.Button("Actualizar 🔁")
192
  salida_reloj = gr.Markdown()
193
  boton_reloj.click(calorias_reloj, inputs=[calorias_quemadas], outputs=salida_reloj)
194
 
 
195
  with gr.Tab("🤖 Chat con Nuti"):
196
  chat_nuti = gr.Chatbot(label="Nuti - Tu guía de nutrición 🍎")
197
  entrada_nuti = gr.Textbox(label="Escribe algo para Nuti...")
198
  boton_nuti = gr.Button("Enviar")
199
  boton_nuti.click(conversar_nuti, inputs=[entrada_nuti, chat_nuti], outputs=[chat_nuti, entrada_nuti])
200
 
 
201
  with gr.Tab("🧘 Coach Emocional"):
202
  chat_coach = gr.Chatbot(label="Coach Emocional 🌿")
203
  entrada_coach = gr.Textbox(label="Cuéntame cómo te sientes hoy...")
204
  boton_coach = gr.Button("Enviar")
205
  boton_coach.click(conversar_coach, inputs=[entrada_coach, chat_coach], outputs=[chat_coach, entrada_coach])
206
 
 
207
  with gr.Tab("🍽️ Recetas del Nutriólogo"):
208
- nombre_r = gr.Textbox(label="Nombre de la receta")
209
  descripcion = gr.Textbox(label="Descripción o ingredientes")
210
  imagen_receta = gr.Image(label="Imagen (opcional)")
211
  boton_subir = gr.Button("Subir receta")
212
  salida_subir = gr.Textbox(label="Estado")
213
- boton_subir.click(subir_receta, inputs=[nombre_r, descripcion, imagen_receta], outputs=salida_subir)
214
 
215
  boton_ver = gr.Button("Ver recetas disponibles 🍲")
216
  salida_recetas = gr.Markdown()
217
  boton_ver.click(mostrar_recetas, outputs=salida_recetas)
218
 
 
219
  with gr.Tab("🎯 Retos Saludables"):
220
  salida_retos = gr.Markdown()
221
  boton_ver_retos = gr.Button("Ver Retos del Día")
@@ -225,6 +235,7 @@ def main():
225
  boton_completar = gr.Button("Completar Reto 🏅")
226
  boton_completar.click(completar_reto, inputs=[numero_reto], outputs=salida_retos)
227
 
 
228
  with gr.Tab("🧑‍⚕️ Buscar Nutriólogos"):
229
  pais = gr.Textbox(label="País")
230
  estado = gr.Textbox(label="Estado")
@@ -235,6 +246,5 @@ def main():
235
 
236
  app.launch()
237
 
238
-
239
  if __name__ == "__main__":
240
  main()
 
6
  from coach_emocional import coach_emocional_inteligente
7
  from retos_saludables import mostrar_retos, completar_reto
8
 
9
+ # ---------- MEMORIA ---------- #
10
  MEMORIA_NUTI = []
11
  MEMORIA_COACH = []
12
 
 
13
  calorias_totales = 0
14
  calorias_restantes = 0
15
  historial_comidas = []
 
 
16
 
17
  # ---------- CHATBOT NUTI ---------- #
18
  def conversar_nuti(mensaje, historial):
 
22
  historial = historial + [(mensaje, respuesta)]
23
  return historial, ""
24
 
 
25
  # ---------- COACH EMOCIONAL ---------- #
26
  def conversar_coach(mensaje, historial):
27
  MEMORIA_COACH.append({"user": mensaje})
 
30
  historial = historial + [(mensaje, respuesta)]
31
  return historial, ""
32
 
 
33
  # ---------- CÁLCULO DE CALORÍAS ---------- #
34
  def calcular_calorias(edad, peso, altura, genero, actividad, meta):
35
  global calorias_totales, calorias_restantes
 
48
 
49
  calorias_base = bmr * factores.get(actividad.lower(), 1.55)
50
 
51
+ # Ajuste según meta
52
  if meta.lower() == "bajar de peso":
53
  calorias_totales = round(calorias_base * 0.8)
54
  elif meta.lower() == "subir de peso":
 
59
  calorias_restantes = calorias_totales
60
  return f"🎯 Tu meta es **{meta.lower()}**.\n🔥 Puedes consumir aproximadamente **{calorias_totales} calorías por día**."
61
 
62
+ # ---------- CALORÍAS DEL RELOJ ---------- #
 
63
  def calorias_reloj(calorias_quemadas):
64
  global calorias_restantes
65
  calorias_restantes += calorias_quemadas
66
+ return f"⌚ Has quemado **{calorias_quemadas} kcal**. Te quedan **{calorias_restantes} kcal** disponibles hoy."
 
67
 
68
+ # ---------- FOTO DE COMIDA ---------- #
69
  def analizar_foto(imagen):
70
  if imagen is None:
71
  return "⚠️ Sube una foto de tu comida.", 0
 
82
  nombre, calorias = random.choice(comidas)
83
  return f"🍽️ Parece que comiste **{nombre}** (~{calorias} kcal).", calorias
84
 
 
85
  def registrar_comida(imagen):
86
  global calorias_restantes, historial_comidas
87
  info, calorias = analizar_foto(imagen)
 
91
  historial_comidas.append({"comida": info, "calorias": calorias})
92
  return f"{info}\n\n🔥 Calorías restantes del día: **{calorias_restantes} kcal**."
93
 
 
94
  def mostrar_historial():
95
  if not historial_comidas:
96
  return "📭 Aún no has registrado comidas hoy."
 
100
  texto += f"\n🔥 Te quedan **{calorias_restantes} kcal** por consumir hoy."
101
  return texto
102
 
 
103
  # ---------- RECETAS ---------- #
104
+ RECETAS = []
105
  def subir_receta(nombre, descripcion, imagen):
106
  if nombre and descripcion:
107
  RECETAS.append({"nombre": nombre, "descripcion": descripcion, "imagen": imagen})
108
  return f"✅ Receta '{nombre}' añadida correctamente."
109
  return "⚠️ Ingresa nombre y descripción."
110
 
 
111
  def mostrar_recetas():
112
  if not RECETAS:
113
  return "📭 No hay recetas cargadas aún."
 
116
  texto += f"**{r['nombre']}**\n{r['descripcion']}\n\n"
117
  return texto
118
 
 
119
  # ---------- BUSCADOR DE NUTRIÓLOGOS ---------- #
120
  def buscar_nutriologos(pais, estado, ciudad):
121
  ejemplos = [
122
+ {"nombre": "Dra. Sofía Martínez", "pais": "México", "estado": "Sonora", "ciudad": "Hermosillo",
123
+ "especialidad": "Nutrición deportiva", "redes": "@nutrisofi (Instagram)", "reseña": "⭐️⭐️⭐️⭐️⭐️ 4.9"},
124
+ {"nombre": "Lic. Andrés Gómez", "pais": "México", "estado": "CDMX", "ciudad": "Coyoacán",
125
+ "especialidad": "Nutrición clínica", "redes": "@andresnutricion (TikTok)", "reseña": "⭐️⭐️⭐️⭐️ 4.7"},
126
+ {"nombre": "Dra. Camila Silva", "pais": "Chile", "estado": "Región Metropolitana", "ciudad": "Santiago",
127
+ "especialidad": "Salud emocional", "redes": "@camila.wellness (Instagram)", "reseña": "⭐️⭐️⭐️⭐️⭐️ 5.0"}
128
  ]
129
  resultados = [n for n in ejemplos if n["pais"].lower() == pais.lower() or n["ciudad"].lower() == ciudad.lower() or n["estado"].lower() == estado.lower()]
130
  if not resultados:
 
134
  texto += f"**{n['nombre']}** - {n['especialidad']} ({n['ciudad']}, {n['pais']})\n📱 {n['redes']}\n💬 {n['reseña']}\n\n"
135
  return texto
136
 
137
+ # ---------- INTERFAZ PRINCIPAL ---------- #
 
138
  def main():
139
  with gr.Blocks(title="NutriBot IA 🥗") as app:
140
  gr.Markdown("# 🧠 Bienvenido a **NutriBot IA** 🍎")
141
+ gr.Markdown("Comer sano, inteligente y divertido.🌿")
142
 
143
+ # --- DATOS PERSONALES --- #
144
  with gr.Tab("👤 Datos Personales"):
145
  with gr.Row():
146
  nombre = gr.Textbox(label="Nombre completo")
 
151
  actividad = gr.Dropdown(["Sedentario", "Ligero", "Moderado", "Activo", "Muy activo"], label="Nivel de actividad física")
152
  meta = gr.Radio(["Bajar de peso", "Mantener peso", "Subir de peso"], label="🎯 Meta personal")
153
 
154
+ condicion = gr.Textbox(label="🩺 Condición alimenticia o enfermedad", placeholder="Ejemplo: diabetes, hipertensión, intolerancia a la lactosa...")
155
+ alergias = gr.Textbox(label="🚫 Alergias alimenticias", placeholder="Ejemplo: maní, gluten, mariscos...")
156
 
157
  guardar_datos = gr.Button("Guardar información 🧾")
158
  salida_datos = gr.Markdown()
159
 
160
+ def guardar_informacion(nombre, edad, peso, altura, genero, actividad, meta, condicion, alergias):
161
+ perfil = {
162
+ "nombre": nombre,
163
+ "edad": edad,
164
+ "peso": peso,
165
+ "altura": altura,
166
+ "genero": genero,
167
+ "actividad": actividad,
168
+ "meta": meta,
169
+ "condicion": condicion,
170
+ "alergias": alergias
171
+ }
172
  with open("perfil_usuario.json", "w") as f:
173
  json.dump(perfil, f, indent=4)
174
+ return f"✅ Información guardada.\n**Condición:** {condicion or 'ninguna'}\n**Alergias:** {alergias or 'ninguna'}"
175
 
176
+ guardar_datos.click(
177
+ guardar_informacion,
178
+ inputs=[nombre, edad, peso, altura, genero, actividad, meta, condicion, alergias],
179
+ outputs=salida_datos
180
+ )
181
 
182
+ # --- REGISTRO DE COMIDAS --- #
183
  with gr.Tab("📸 Registro de Comidas"):
184
  gr.Markdown("Sube una foto de tu comida y NutriBot estimará las calorías 🍽️")
185
  imagen = gr.Image(label="Foto de tu comida", type="filepath")
 
191
  salida_historial = gr.Markdown()
192
  boton_historial.click(mostrar_historial, outputs=salida_historial)
193
 
194
+ # --- RELOJ --- #
195
  with gr.Tab("⌚ Calorías del Reloj"):
196
  calorias_quemadas = gr.Number(label="Calorías quemadas (reloj inteligente)")
197
  boton_reloj = gr.Button("Actualizar 🔁")
198
  salida_reloj = gr.Markdown()
199
  boton_reloj.click(calorias_reloj, inputs=[calorias_quemadas], outputs=salida_reloj)
200
 
201
+ # --- CHAT NUTI --- #
202
  with gr.Tab("🤖 Chat con Nuti"):
203
  chat_nuti = gr.Chatbot(label="Nuti - Tu guía de nutrición 🍎")
204
  entrada_nuti = gr.Textbox(label="Escribe algo para Nuti...")
205
  boton_nuti = gr.Button("Enviar")
206
  boton_nuti.click(conversar_nuti, inputs=[entrada_nuti, chat_nuti], outputs=[chat_nuti, entrada_nuti])
207
 
208
+ # --- COACH EMOCIONAL --- #
209
  with gr.Tab("🧘 Coach Emocional"):
210
  chat_coach = gr.Chatbot(label="Coach Emocional 🌿")
211
  entrada_coach = gr.Textbox(label="Cuéntame cómo te sientes hoy...")
212
  boton_coach = gr.Button("Enviar")
213
  boton_coach.click(conversar_coach, inputs=[entrada_coach, chat_coach], outputs=[chat_coach, entrada_coach])
214
 
215
+ # --- RECETAS --- #
216
  with gr.Tab("🍽️ Recetas del Nutriólogo"):
217
+ nombre_rec = gr.Textbox(label="Nombre de la receta")
218
  descripcion = gr.Textbox(label="Descripción o ingredientes")
219
  imagen_receta = gr.Image(label="Imagen (opcional)")
220
  boton_subir = gr.Button("Subir receta")
221
  salida_subir = gr.Textbox(label="Estado")
222
+ boton_subir.click(subir_receta, inputs=[nombre_rec, descripcion, imagen_receta], outputs=salida_subir)
223
 
224
  boton_ver = gr.Button("Ver recetas disponibles 🍲")
225
  salida_recetas = gr.Markdown()
226
  boton_ver.click(mostrar_recetas, outputs=salida_recetas)
227
 
228
+ # --- RETOS --- #
229
  with gr.Tab("🎯 Retos Saludables"):
230
  salida_retos = gr.Markdown()
231
  boton_ver_retos = gr.Button("Ver Retos del Día")
 
235
  boton_completar = gr.Button("Completar Reto 🏅")
236
  boton_completar.click(completar_reto, inputs=[numero_reto], outputs=salida_retos)
237
 
238
+ # --- NUTRIÓLOGOS --- #
239
  with gr.Tab("🧑‍⚕️ Buscar Nutriólogos"):
240
  pais = gr.Textbox(label="País")
241
  estado = gr.Textbox(label="Estado")
 
246
 
247
  app.launch()
248
 
 
249
  if __name__ == "__main__":
250
  main()