caissaa23 commited on
Commit
e8df581
·
verified ·
1 Parent(s): 0d37bfe

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -92
app.py CHANGED
@@ -1,107 +1,62 @@
1
  import gradio as gr
 
2
  from PIL import Image
3
  import datetime
4
 
5
- # Funciones básicas
6
- def calcular_calorias_diarias(edad, sexo, peso, altura, nivel_actividad):
7
- """
8
- Calcula calorías diarias recomendadas usando la fórmula Mifflin-St Jeor
9
- Nivel de actividad: 'sedentario', 'ligero', 'moderado', 'activo'
10
- """
11
- if sexo.lower() == "hombre":
12
- bmr = 10*peso + 6.25*altura - 5*edad + 5
13
- else:
14
- bmr = 10*peso + 6.25*altura - 5*edad - 161
15
-
16
- factores = {
17
- 'sedentario': 1.2,
18
- 'ligero': 1.375,
19
- 'moderado': 1.55,
20
- 'activo': 1.725
21
- }
22
- return int(bmr * factores.get(nivel_actividad, 1.2))
23
 
24
- # Simula una base de datos de comidas y calorías
25
- comidas_db = {
26
- "manzana": 95,
27
- "banano": 105,
28
- "pollo a la plancha": 250,
29
- "arroz cocido": 200,
30
  }
31
 
32
- # Lista de nutriólogos recomendados
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  nutriologos_db = [
34
  {"nombre": "Dra. Ana Pérez", "ciudad": "Ciudad de México", "pais": "México"},
35
  {"nombre": "Dr. John Smith", "ciudad": "New York", "pais": "USA"},
36
  {"nombre": "Dra. Carla Gómez", "ciudad": "Madrid", "pais": "España"},
37
  ]
38
 
39
- # Registro de comidas
40
- registro_comidas = []
41
-
42
- def registrar_comida(imagen, calorias_comidas, calorias_quemadas, edad, sexo, peso, altura, nivel_actividad):
43
- # Calorías recomendadas
44
- calorias_diarias = calcular_calorias_diarias(edad, sexo, peso, altura, nivel_actividad)
45
-
46
- # Sumar calorías de la foto (simulado)
47
- calorias_tomadas = sum([comidas_db.get(c.lower(), 0) for c in calorias_comidas.split(",")])
48
-
49
- # Ajustar con calorías quemadas
50
- calorias_restantes = calorias_diarias - calorias_tomadas + calorias_quemadas
51
-
52
- # Guardar registro
53
- registro_comidas.append({
54
- "fecha": datetime.datetime.now(),
55
- "comida": calorias_comidas,
56
- "calorias": calorias_tomadas,
57
- "calorias_restantes": calorias_restantes
58
- })
59
-
60
- recomendacion = "Te recomendamos comer frutas y verduras frescas hoy."
61
 
62
- return f"Calorías recomendadas para hoy: {calorias_diarias}\n" \
63
- f"Calorías consumidas: {calorias_tomadas}\n" \
64
- f"Calorías quemadas: {calorias_quemadas}\n" \
65
- f"Calorías restantes: {calorias_restantes}\n\n" \
66
- f"Recomendación: {recomendacion}"
67
-
68
- def recomendar_nutriologo(ciudad="", pais=""):
69
- resultados = [n for n in nutriologos_db if ciudad.lower() in n["ciudad"].lower() and pais.lower() in n["pais"].lower()]
70
- if not resultados:
71
- resultados = nutriologos_db # Si no encuentra, muestra todos
72
- return "\n".join([f"{n['nombre']} - {n['ciudad']}, {n['pais']}" for n in resultados])
73
-
74
- # Interfaz Gradio
75
- with gr.Blocks() as demo:
76
- gr.Markdown("# Bot de Nutrición Inteligente")
 
 
77
 
78
- with gr.Tab("Registro de comida"):
79
- with gr.Row():
80
- imagen = gr.Image(label="Sube foto de tu comida")
81
- calorias_input = gr.Textbox(label="Escribe la comida que comiste separada por comas")
82
- edad = gr.Number(label="Edad")
83
- sexo = gr.Dropdown(["Hombre", "Mujer"], label="Sexo")
84
- peso = gr.Number(label="Peso en kg")
85
- altura = gr.Number(label="Altura en cm")
86
- nivel_actividad = gr.Dropdown(["sedentario", "ligero", "moderado", "activo"], label="Nivel de actividad")
87
- calorias_quemadas = gr.Number(label="Calorías quemadas hoy (por smartwatch o ejercicio)")
88
-
89
- boton_registrar = gr.Button("Registrar comida")
90
- salida = gr.Textbox(label="Resultado")
91
-
92
- boton_registrar.click(
93
- registrar_comida,
94
- inputs=[imagen, calorias_input, calorias_quemadas, edad, sexo, peso, altura, nivel_actividad],
95
- outputs=salida
96
- )
97
-
98
- with gr.Tab("Nutriólogos recomendados"):
99
- ciudad_input = gr.Textbox(label="Ciudad")
100
- pais_input = gr.Textbox(label="País")
101
- boton_nutri = gr.Button("Buscar nutriólogos")
102
- salida_nutri = gr.Textbox(label="Nutriólogos")
103
-
104
- boton_nutri.click(recomendar_nutriologo, inputs=[ciudad_input, pais_input], outputs=salida_nutri)
105
-
106
- if __name__ == "__main__":
107
- demo.launch()
 
1
  import gradio as gr
2
+ from transformers import pipeline
3
  from PIL import Image
4
  import datetime
5
 
6
+ # Modelo para reconocer comidas
7
+ modelo = pipeline("image-classification", model="nateraw/food")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
+ # Variables globales
10
+ estado = {
11
+ "meta_diaria": 0,
12
+ "restantes": 0,
13
+ "quemas": 0,
14
+ "registro": []
15
  }
16
 
17
+ # Calorías promedio por comida
18
+ calorias_promedio = {
19
+ "pizza": 285,
20
+ "hamburger": 354,
21
+ "apple": 95,
22
+ "banana": 105,
23
+ "salad": 150,
24
+ "pasta": 350,
25
+ "rice": 200,
26
+ "ice cream": 210,
27
+ "donut": 195,
28
+ }
29
+
30
+ # Base de nutriólogos
31
  nutriologos_db = [
32
  {"nombre": "Dra. Ana Pérez", "ciudad": "Ciudad de México", "pais": "México"},
33
  {"nombre": "Dr. John Smith", "ciudad": "New York", "pais": "USA"},
34
  {"nombre": "Dra. Carla Gómez", "ciudad": "Madrid", "pais": "España"},
35
  ]
36
 
37
+ # Cálculo de TDEE (gasto diario total)
38
+ def calcular_calorias(edad, peso, altura, sexo, actividad):
39
+ if sexo.lower() == "hombre":
40
+ bmr = 88.36 + (13.4 * peso) + (4.8 * altura) - (5.7 * edad)
41
+ else:
42
+ bmr = 447.6 + (9.2 * peso) + (3.1 * altura) - (4.3 * edad)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
+ niveles = {
45
+ "Sedentario": 1.2,
46
+ "Ligero": 1.375,
47
+ "Moderado": 1.55,
48
+ "Activo": 1.725,
49
+ "Muy activo": 1.9
50
+ }
51
+ tdee = bmr * niveles.get(actividad, 1.2)
52
+ estado["meta_diaria"] = round(tdee)
53
+ estado["restantes"] = round(tdee)
54
+ estado["quemas"] = 0
55
+ estado["registro"] = []
56
+ return f"Tu gasto calórico diario estimado es de {round(tdee)} calorías."
57
+
58
+ def analizar_foto(img):
59
+ if estado["meta_diaria"] == 0:
60
+ return "⚠️ Primero calcula tu meta diaria con tus datos personales."
61
 
62
+ resultado = modelo(img)