Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
@@ -47,7 +47,7 @@ class ModelManager:
|
|
47 |
return "GIT carregado com sucesso!"
|
48 |
|
49 |
def analyze_image(self, image, question, model_choice):
|
50 |
-
"""Analisa imagem com
|
51 |
try:
|
52 |
# Carrega o modelo apropriado se necessário
|
53 |
if model_choice == "BLIP-2" and (self.model_name != "Salesforce/blip2-opt-2.7b"):
|
@@ -57,6 +57,17 @@ class ModelManager:
|
|
57 |
elif model_choice == "GIT" and (self.model_name != "microsoft/git-base-coco"):
|
58 |
status = self.load_git()
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
# Prepara a imagem
|
61 |
if isinstance(image, str):
|
62 |
image = Image.open(image)
|
@@ -66,21 +77,23 @@ class ModelManager:
|
|
66 |
# Processa a entrada
|
67 |
inputs = self.current_processor(
|
68 |
images=image,
|
69 |
-
text=
|
70 |
return_tensors="pt"
|
71 |
).to(self.current_model.device)
|
72 |
|
73 |
# Gera a resposta
|
74 |
outputs = self.current_model.generate(
|
75 |
**inputs,
|
76 |
-
max_new_tokens=
|
77 |
num_beams=5,
|
78 |
temperature=0.7,
|
79 |
top_p=0.9
|
80 |
)
|
81 |
|
|
|
82 |
response = self.current_processor.decode(outputs[0], skip_special_tokens=True)
|
83 |
-
|
|
|
84 |
|
85 |
except Exception as e:
|
86 |
return f"Erro na análise: {str(e)}"
|
@@ -91,8 +104,8 @@ model_manager = ModelManager()
|
|
91 |
# Interface Gradio
|
92 |
with gr.Blocks(theme=gr.themes.Soft()) as iface:
|
93 |
gr.Markdown("""
|
94 |
-
#
|
95 |
-
Escolha o modelo que deseja usar para analisar
|
96 |
""")
|
97 |
|
98 |
with gr.Row():
|
@@ -109,29 +122,29 @@ with gr.Blocks(theme=gr.themes.Soft()) as iface:
|
|
109 |
### 📝 Características dos Modelos:
|
110 |
|
111 |
**BLIP-2:**
|
112 |
-
-
|
113 |
-
-
|
114 |
-
-
|
115 |
|
116 |
**LLaVA:**
|
117 |
-
-
|
118 |
-
-
|
119 |
-
-
|
120 |
|
121 |
**GIT:**
|
122 |
-
-
|
123 |
-
-
|
124 |
-
- Menor
|
125 |
""")
|
126 |
|
127 |
image_input = gr.Image(
|
128 |
type="pil",
|
129 |
-
label="
|
130 |
)
|
131 |
|
132 |
question_input = gr.Textbox(
|
133 |
label="Sua Pergunta",
|
134 |
-
placeholder="
|
135 |
)
|
136 |
|
137 |
analyze_btn = gr.Button("🔍 Analisar", variant="primary")
|
@@ -144,14 +157,14 @@ with gr.Blocks(theme=gr.themes.Soft()) as iface:
|
|
144 |
|
145 |
with gr.Accordion("💡 Sugestões de Perguntas", open=False):
|
146 |
gr.Markdown("""
|
147 |
-
1.
|
148 |
-
2.
|
149 |
-
3.
|
150 |
-
4.
|
151 |
-
5. Quais
|
152 |
-
6.
|
153 |
-
7.
|
154 |
-
8.
|
155 |
""")
|
156 |
|
157 |
# Eventos
|
|
|
47 |
return "GIT carregado com sucesso!"
|
48 |
|
49 |
def analyze_image(self, image, question, model_choice):
|
50 |
+
"""Analisa imagem com foco nutricional"""
|
51 |
try:
|
52 |
# Carrega o modelo apropriado se necessário
|
53 |
if model_choice == "BLIP-2" and (self.model_name != "Salesforce/blip2-opt-2.7b"):
|
|
|
57 |
elif model_choice == "GIT" and (self.model_name != "microsoft/git-base-coco"):
|
58 |
status = self.load_git()
|
59 |
|
60 |
+
# Adiciona contexto nutricional à pergunta
|
61 |
+
nutritional_prompt = (
|
62 |
+
"Como nutricionista, analise este prato considerando: "
|
63 |
+
"1. Lista de ingredientes principais\n"
|
64 |
+
"2. Estimativa calórica total\n"
|
65 |
+
"3. Sugestões para uma versão mais saudável\n"
|
66 |
+
"4. Análise de grupos alimentares\n"
|
67 |
+
f"Pergunta do usuário: {question}"
|
68 |
+
"\nPor favor, responda em português com detalhes nutricionais."
|
69 |
+
)
|
70 |
+
|
71 |
# Prepara a imagem
|
72 |
if isinstance(image, str):
|
73 |
image = Image.open(image)
|
|
|
77 |
# Processa a entrada
|
78 |
inputs = self.current_processor(
|
79 |
images=image,
|
80 |
+
text=nutritional_prompt,
|
81 |
return_tensors="pt"
|
82 |
).to(self.current_model.device)
|
83 |
|
84 |
# Gera a resposta
|
85 |
outputs = self.current_model.generate(
|
86 |
**inputs,
|
87 |
+
max_new_tokens=200, # Aumentado para respostas mais completas
|
88 |
num_beams=5,
|
89 |
temperature=0.7,
|
90 |
top_p=0.9
|
91 |
)
|
92 |
|
93 |
+
# Decodifica e formata a resposta
|
94 |
response = self.current_processor.decode(outputs[0], skip_special_tokens=True)
|
95 |
+
formatted_response = response.replace(". ", ".\n").replace("; ", ";\n")
|
96 |
+
return f"**Análise Nutricional:**\n{formatted_response}"
|
97 |
|
98 |
except Exception as e:
|
99 |
return f"Erro na análise: {str(e)}"
|
|
|
104 |
# Interface Gradio
|
105 |
with gr.Blocks(theme=gr.themes.Soft()) as iface:
|
106 |
gr.Markdown("""
|
107 |
+
# 🥗 Analisador Nutricional Inteligente
|
108 |
+
Escolha o modelo que deseja usar para analisar seu prato e obter recomendações nutricionais.
|
109 |
""")
|
110 |
|
111 |
with gr.Row():
|
|
|
122 |
### 📝 Características dos Modelos:
|
123 |
|
124 |
**BLIP-2:**
|
125 |
+
- Análise detalhada de ingredientes
|
126 |
+
- Estimativas calóricas mais precisas
|
127 |
+
- Recomendações técnicas
|
128 |
|
129 |
**LLaVA:**
|
130 |
+
- Explicações mais conversacionais
|
131 |
+
- Sugestões práticas para o dia a dia
|
132 |
+
- Foco em hábitos alimentares
|
133 |
|
134 |
**GIT:**
|
135 |
+
- Respostas rápidas e diretas
|
136 |
+
- Ideal para análises simples
|
137 |
+
- Menor consumo de recursos
|
138 |
""")
|
139 |
|
140 |
image_input = gr.Image(
|
141 |
type="pil",
|
142 |
+
label="Foto do Prato"
|
143 |
)
|
144 |
|
145 |
question_input = gr.Textbox(
|
146 |
label="Sua Pergunta",
|
147 |
+
placeholder="Ex: Quantas calorias tem este prato? Como posso torná-lo mais saudável?"
|
148 |
)
|
149 |
|
150 |
analyze_btn = gr.Button("🔍 Analisar", variant="primary")
|
|
|
157 |
|
158 |
with gr.Accordion("💡 Sugestões de Perguntas", open=False):
|
159 |
gr.Markdown("""
|
160 |
+
1. Quantas calorias tem este prato?
|
161 |
+
2. Quais são os ingredientes principais?
|
162 |
+
3. Como posso tornar este prato mais saudável?
|
163 |
+
4. Este prato é adequado para uma dieta low-carb?
|
164 |
+
5. Quais nutrientes estão presentes neste prato?
|
165 |
+
6. Este prato é rico em proteínas?
|
166 |
+
7. Como posso substituir ingredientes para reduzir calorias?
|
167 |
+
8. Este prato é indicado para quem tem restrição a glúten/lactose?
|
168 |
""")
|
169 |
|
170 |
# Eventos
|