DHEIVER commited on
Commit
35c9642
·
verified ·
1 Parent(s): 247c724

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -43
app.py CHANGED
@@ -1,66 +1,119 @@
1
  import gradio as gr
2
  from PIL import Image
3
- from transformers import BlipProcessor, BlipForConditionalGeneration, pipeline
4
  import time
5
 
6
  # Carregando o modelo BLIP para geração de legendas
7
  processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
8
  model_blip = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large")
9
 
10
- # Carregando um modelo de geração de texto (exemplo: GPT-2)
11
- generator = pipeline('text-generation', model='gpt2')
 
 
 
 
 
 
12
 
13
- # Função para gerar legenda da imagem
14
- def caption(img, min_len, max_len):
15
- raw_image = Image.open(img).convert('RGB')
16
- inputs = processor(raw_image, return_tensors="pt")
17
- out = model_blip.generate(**inputs, min_length=min_len, max_length=max_len)
18
- return processor.decode(out[0], skip_special_tokens=True)
 
 
 
 
19
 
20
- # Função para gerar informações nutricionais e calorias
21
- def generate_nutritional_info(food_description, language):
22
- if language == "Português":
23
- prompt = f"Descreva as informações nutricionais e as calorias do seguinte alimento: {food_description}."
24
- else:
25
- prompt = f"Provide detailed nutritional information and calories for the following food: {food_description}."
26
-
27
- result = generator(prompt, max_length=150, num_return_sequences=1)
28
- return result[0]['generated_text']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
  # Função principal que combina tudo
31
- def greet(img, min_len, max_len, language):
32
  start = time.time()
33
 
34
- # Passo 1: Gerar legenda para a imagem
35
- food_description = caption(img, min_len, max_len)
 
 
36
 
37
- # Passo 2: Gerar informações nutricionais e calorias com base na legenda
38
- nutritional_info = generate_nutritional_info(food_description, language)
39
 
40
  end = time.time()
41
- total_time = str(end - start)
 
 
 
 
 
 
 
 
42
 
43
- # Combinando resultados
44
- if language == "Português":
45
- result = f"Descrição do Alimento: {food_description}\n\nInformações Nutricionais:\n{nutritional_info}\n\nGerado em {total_time} segundos."
46
- else:
47
- result = f"Food Description: {food_description}\n\nNutritional Information:\n{nutritional_info}\n\nGenerated in {total_time} seconds."
 
48
 
49
  return result
50
 
51
  # Interface Gradio
52
- iface = gr.Interface(
53
- fn=greet,
54
- title='Nutritionist Agent with BLIP and GPT-2',
55
- description="Upload an image of food, and the agent will describe it and provide nutritional information.",
56
- inputs=[
57
- gr.Image(type='filepath', label='Image'),
58
- gr.Slider(label='Minimum Length', minimum=1, maximum=1000, value=30),
59
- gr.Slider(label='Maximum Length', minimum=1, maximum=1000, value=100),
60
- gr.Radio(choices=["Português", "English"], label="Language", value="Português") # Botão de seleção de idioma
61
- ],
62
- outputs=gr.Textbox(label='Result'),
63
- theme=gr.themes.Base(primary_hue="teal", secondary_hue="teal", neutral_hue="slate"),
64
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- iface.launch()
 
1
  import gradio as gr
2
  from PIL import Image
3
+ from transformers import BlipProcessor, BlipForConditionalGeneration
4
  import time
5
 
6
  # Carregando o modelo BLIP para geração de legendas
7
  processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
8
  model_blip = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large")
9
 
10
+ # Base de dados nutricionais simples (em português)
11
+ nutritional_database = {
12
+ "bife": {"calorias": 250, "proteinas": 26, "carboidratos": 0, "gorduras": 15},
13
+ "feijão": {"calorias": 120, "proteinas": 8, "carboidratos": 20, "gorduras": 1},
14
+ "arroz": {"calorias": 130, "proteinas": 2.7, "carboidratos": 28, "gorduras": 0.3},
15
+ "salada": {"calorias": 30, "proteinas": 1, "carboidratos": 5, "gorduras": 0.2},
16
+ "tomate": {"calorias": 18, "proteinas": 0.9, "carboidratos": 3.9, "gorduras": 0.2},
17
+ }
18
 
19
+ # Função para gerar legenda da imagem usando BLIP
20
+ def generate_caption(img, min_len, max_len):
21
+ try:
22
+ raw_image = Image.open(img).convert('RGB')
23
+ inputs = processor(raw_image, return_tensors="pt")
24
+ out = model_blip.generate(**inputs, min_length=min_len, max_length=max_len)
25
+ caption = processor.decode(out[0], skip_special_tokens=True)
26
+ return caption
27
+ except Exception as e:
28
+ return f"Erro ao gerar legenda: {str(e)}"
29
 
30
+ # Função para gerar informações nutricionais com base na descrição
31
+ def generate_nutritional_info(food_description):
32
+ try:
33
+ # Dividir a descrição em palavras-chave
34
+ keywords = food_description.lower().split(", ")
35
+
36
+ total_calories = 0
37
+ nutritional_summary = []
38
+
39
+ for keyword in keywords:
40
+ if keyword in nutritional_database:
41
+ info = nutritional_database[keyword]
42
+ total_calories += info["calorias"]
43
+ nutritional_summary.append(
44
+ f"- {keyword.capitalize()}: {info['calorias']} calorias, "
45
+ f"{info['proteinas']}g proteínas, {info['carboidratos']}g carboidratos, "
46
+ f"{info['gorduras']}g gorduras"
47
+ )
48
+
49
+ if not nutritional_summary:
50
+ return "Desculpe, não encontramos informações nutricionais detalhadas para este alimento."
51
+
52
+ summary = "\n".join(nutritional_summary)
53
+ return f"Informações Nutricionais:\n{summary}\n\nTotal de Calorias: {total_calories} kcal"
54
+ except Exception as e:
55
+ return f"Erro ao gerar informações nutricionais: {str(e)}"
56
 
57
  # Função principal que combina tudo
58
+ def greet(img, min_len, max_len):
59
  start = time.time()
60
 
61
+ # Passo 1: Gerar legenda para a imagem usando BLIP
62
+ food_description = generate_caption(img, min_len, max_len)
63
+ if "Erro" in food_description:
64
+ return food_description # Retorna mensagem de erro se houver falha no BLIP
65
 
66
+ # Passo 2: Gerar informações nutricionais com base na legenda
67
+ nutritional_info = generate_nutritional_info(food_description)
68
 
69
  end = time.time()
70
+ total_time = str(round(end - start, 2))
71
+
72
+ # Marketing agressivo
73
+ marketing_message = (
74
+ "🎉 OFERTA EXCLUSIVA! 🎉\n\n"
75
+ "Inscreva-se AGORA para receber dicas diárias de nutrição e descontos exclusivos em nossos produtos premium!\n\n"
76
+ "Compartilhe este resultado com seus amigos e ganhe 10% de desconto em nossa loja online.\n\n"
77
+ "-----------------------------\n\n"
78
+ )
79
 
80
+ result = (
81
+ f"{marketing_message}"
82
+ f"Descrição do Alimento: {food_description}\n\n"
83
+ f"{nutritional_info}\n\n"
84
+ f"Gerado em {total_time} segundos."
85
+ )
86
 
87
  return result
88
 
89
  # Interface Gradio
90
+ with gr.Blocks(theme=gr.themes.Base(primary_hue="red", secondary_hue="orange", neutral_hue="slate")) as demo:
91
+ gr.Markdown(
92
+ """
93
+ # 🔥 NutriScan Pro 🔥
94
+ ### Descubra os Segredos Nutricionais dos Seus Alimentos Instantaneamente!
95
+
96
+ 🌟 **OFERTA LIMITADA:** Inscreva-se agora e receba acesso exclusivo a dicas diárias de nutrição e descontos especiais em nossos produtos premium!
97
+
98
+ 📸 **Como Funciona:**
99
+ 1. Faça upload de uma imagem do seu alimento.
100
+ 2. Receba informações detalhadas sobre nutrientes e calorias.
101
+ 3. Compartilhe com amigos e ganhe descontos!
102
+
103
+ ⚡ **Apenas 24 Horas de Oferta!** Não perca essa oportunidade única!
104
+ """
105
+ )
106
+
107
+ with gr.Row():
108
+ img_input = gr.Image(type='filepath', label='Upload da Imagem')
109
+ with gr.Column():
110
+ min_len = gr.Slider(label='Tamanho Mínimo da Legenda', minimum=1, maximum=1000, value=30)
111
+ max_len = gr.Slider(label='Tamanho Máximo da Legenda', minimum=1, maximum=1000, value=100)
112
+
113
+ output = gr.Textbox(label='Resultado')
114
+
115
+ submit_button = gr.Button("🔍 Analisar Agora! 🔍", variant="primary")
116
+
117
+ submit_button.click(greet, inputs=[img_input, min_len, max_len], outputs=output)
118
 
119
+ demo.launch()