Spaces:
Sleeping
Sleeping
File size: 4,379 Bytes
dbd941d e6a5fa4 dbd941d e6a5fa4 ef7a048 e6a5fa4 dbd941d e6a5fa4 dbd941d e6a5fa4 dbd941d ef7a048 e6a5fa4 ef7a048 e6a5fa4 ef7a048 ae59519 ef7a048 ae59519 ef7a048 ae59519 2afab56 ae59519 ef7a048 ae59519 ef7a048 ae59519 ef7a048 ae59519 ef7a048 dbd941d ae59519 dbd941d ef7a048 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
import gradio as gr
from transformers import Blip2Processor, Blip2ForConditionalGeneration, pipeline
from PIL import Image
import requests
# Carregar o modelo BLIP-2 para geração de descrições de imagens
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model_blip2 = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b")
# Carregar um modelo de linguagem para análise nutricional (exemplo: Flan-T5)
nutrition_model = pipeline("text2text-generation", model="google/flan-t5-large")
def interpret_image(image):
# Converter a imagem para o formato PIL se necessário
if isinstance(image, str):
image = Image.open(requests.get(image, stream=True).raw)
# Processar a imagem e gerar a descrição usando BLIP-2
inputs = processor(image, return_tensors="pt")
out = model_blip2.generate(**inputs)
# Decodificar a saída para texto
description = processor.decode(out[0], skip_special_tokens=True)
return description
def nutritional_analysis(image):
# Passo 1: Gerar descrição da imagem usando BLIP-2
description = interpret_image(image)
# Passo 2: Criar um prompt para análise nutricional
prompt = (
f"Com base na descrição do prato de comida abaixo, forneça uma análise nutricional detalhada, "
f"incluindo estimativas de calorias, macronutrientes (carboidratos, proteínas, gorduras), "
f"e recomendações para melhorar o prato, se necessário.\n\n"
f"Descrição do prato: {description}\n\n"
f"Análise nutricional:"
)
# Passo 3: Usar o modelo de linguagem para gerar a análise nutricional
analysis = nutrition_model(prompt, max_length=300)[0]['generated_text']
# Retornar a descrição e a análise nutricional
return description, analysis
# Interface Gradio com Design Avançado
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="cyan")) as demo:
# Cabeçalho com Marketing
with gr.Row():
gr.Markdown("""
# 🍽️ Agente Nutricionista Inteligente
### Transforme suas refeições em escolhas saudáveis!
- **Descrição automática** de pratos de comida com IA avançada.
- **Análise nutricional detalhada** com estimativas de calorias e macronutrientes.
- **Recomendações personalizadas** para melhorar sua dieta.
""")
# Seção de Upload de Imagem
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("### 📸 Carregue uma Imagem")
image_input = gr.Image(type="pil", label="Upload de Imagem", height=300) # Removido 'tool="editor"'
with gr.Column(scale=2):
gr.Markdown("### 🔍 Resultados")
with gr.Tabs():
with gr.TabItem("Descrição do Prato"):
description_output = gr.Textbox(label="Descrição Gerada", lines=3, interactive=False)
with gr.TabItem("Análise Nutricional"):
analysis_output = gr.Textbox(label="Análise Nutricional", lines=8, interactive=False)
# Botão de Ação
with gr.Row():
submit_button = gr.Button("✨ Analisar Prato", variant="primary")
# Feedback do Usuário
with gr.Row():
feedback = gr.Markdown("")
# Função para processar a imagem
def process_image(image):
try:
description, analysis = nutritional_analysis(image)
feedback.update("✅ Análise concluída com sucesso!")
return description, analysis
except Exception as e:
feedback.update(f"❌ Erro ao processar a imagem: {str(e)}")
return "", ""
# Conectar botão aos outputs
submit_button.click(process_image, inputs=image_input, outputs=[description_output, analysis_output])
# Rodapé com Chamada à Ação
with gr.Row():
gr.Markdown("""
---
### 💡 Dicas para Melhores Resultados:
- Use imagens claras e bem iluminadas.
- Inclua todos os ingredientes visíveis no prato.
- Experimente diferentes ângulos para capturar mais detalhes.
### 🌟 Entre em Contato
- Quer saber mais? Visite nosso [site](https://example.com) ou nos siga nas redes sociais!
""")
# Iniciar o aplicativo
demo.launch() |