caissaa23 commited on
Commit
27bd6fc
·
verified ·
1 Parent(s): ed87a37

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -11
app.py CHANGED
@@ -1,22 +1,89 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
 
4
- # Cargamos un modelo de comida
5
  modelo = pipeline("image-classification", model="nateraw/food")
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  def analizar_foto(img):
 
 
 
8
  resultado = modelo(img)
9
- nombre = resultado[0]['label']
10
- confianza = round(resultado[0]['score'] * 100, 2)
11
- return f"🍽️ Parece {nombre} (Confianza: {confianza}%)"
 
 
 
 
 
 
12
 
13
- demo = gr.Interface(
14
- fn=analizar_foto,
15
- inputs=gr.Image(type="pil", label="Sube una foto de tu comida 🍕"),
16
- outputs="text",
17
- title="NutriBot 🍽️",
18
- description="Sube una foto de tu comida y descubre cuántas calorías podría tener."
19
 
20
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
  demo.launch()
 
 
1
  import gradio as gr
2
  from transformers import pipeline
3
 
4
+ # Modelo para reconocer comidas
5
  modelo = pipeline("image-classification", model="nateraw/food")
6
 
7
+ # Variables globales
8
+ estado = {
9
+ "meta_diaria": 0,
10
+ "restantes": 0,
11
+ "quemas": 0
12
+ }
13
+
14
+ # Calorías promedio por comida
15
+ calorias_promedio = {
16
+ "pizza": 285,
17
+ "hamburger": 354,
18
+ "apple": 95,
19
+ "banana": 105,
20
+ "salad": 150,
21
+ "pasta": 350,
22
+ "rice": 200,
23
+ "ice cream": 210,
24
+ "donut": 195,
25
+ }
26
+
27
+ # Cálculo de TDEE (gasto diario total)
28
+ def calcular_calorias(edad, peso, altura, sexo, actividad):
29
+ if sexo.lower() == "hombre":
30
+ bmr = 88.36 + (13.4 * peso) + (4.8 * altura) - (5.7 * edad)
31
+ else:
32
+ bmr = 447.6 + (9.2 * peso) + (3.1 * altura) - (4.3 * edad)
33
+
34
+ niveles = {
35
+ "Sedentario": 1.2,
36
+ "Ligero": 1.375,
37
+ "Moderado": 1.55,
38
+ "Activo": 1.725,
39
+ "Muy activo": 1.9
40
+ }
41
+ tdee = bmr * niveles.get(actividad, 1.2)
42
+ estado["meta_diaria"] = round(tdee)
43
+ estado["restantes"] = round(tdee)
44
+ return f"Tu gasto calórico diario estimado es de {round(tdee)} calorías."
45
+
46
  def analizar_foto(img):
47
+ if estado["meta_diaria"] == 0:
48
+ return "⚠️ Primero calcula tu meta diaria con tus datos personales."
49
+
50
  resultado = modelo(img)
51
+ nombre = resultado[0]['label'].lower()
52
+ calorias = calorias_promedio.get(nombre, 250)
53
+ estado["restantes"] = max(0, estado["restantes"] - calorias)
54
+ return f"🍽️ {nombre.title()} ≈ {calorias} cal. Te quedan {estado['restantes']} de {estado['meta_diaria']} cal."
55
+
56
+ def agregar_quemadas(cal):
57
+ estado["restantes"] += cal
58
+ estado["quemas"] += cal
59
+ return f"🔥 Has quemado {cal} cal. Te quedan {estado['restantes']} de {estado['meta_diaria']} cal."
60
 
61
+ # Interfaz
62
+ with gr.Blocks() as demo:
63
+ gr.Markdown("# 🍎 NutriBot Pro IA de Calorías Personalizada")
64
+ gr.Markdown("Calcula tu meta diaria automáticamente y lleva el control de tus comidas 🍔")
 
 
65
 
66
+ with gr.Tab("🧍 Tu perfil"):
67
+ edad = gr.Number(label="Edad (años)")
68
+ peso = gr.Number(label="Peso (kg)")
69
+ altura = gr.Number(label="Altura (cm)")
70
+ sexo = gr.Radio(["Hombre", "Mujer"], label="Sexo")
71
+ actividad = gr.Dropdown(["Sedentario", "Ligero", "Moderado", "Activo", "Muy activo"], label="Nivel de actividad")
72
+ btn_meta = gr.Button("Calcular meta calórica")
73
+ salida_meta = gr.Textbox(label="Resultado")
74
+ btn_meta.click(calcular_calorias, inputs=[edad, peso, altura, sexo, actividad], outputs=salida_meta)
75
+
76
+ with gr.Tab("📸 Tu comida"):
77
+ img = gr.Image(type="pil", label="Sube una foto de tu comida")
78
+ btn_foto = gr.Button("Analizar comida")
79
+ salida_foto = gr.Textbox(label="Resultado")
80
+ btn_foto.click(analizar_foto, inputs=img, outputs=salida_foto)
81
+
82
+ with gr.Tab("⌚ Calorías quemadas"):
83
+ cal = gr.Number(label="Calorías quemadas (manual o desde reloj)")
84
+ btn_quemar = gr.Button("Agregar calorías quemadas")
85
+ salida_quemar = gr.Textbox(label="Estado actual")
86
+ btn_quemar.click(agregar_quemadas, inputs=cal, outputs=salida_quemar)
87
 
88
  demo.launch()
89
+