DHEIVER's picture
Update app.py
e6a5fa4 verified
raw
history blame
2.67 kB
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
with gr.Blocks() as demo:
gr.Markdown("# Agente Nutricionista com Análise de Imagens")
gr.Markdown("Carregue uma imagem de um prato de comida e receba uma descrição e uma análise nutricional detalhada.")
with gr.Row():
image_input = gr.Image(type="pil", label="Upload de Imagem")
with gr.Column():
description_output = gr.Textbox(label="Descrição do Prato")
analysis_output = gr.Textbox(label="Análise Nutricional")
submit_button = gr.Button("Analisar")
def process_image(image):
description, analysis = nutritional_analysis(image)
return description, analysis
submit_button.click(process_image, inputs=image_input, outputs=[description_output, analysis_output])
# Iniciar o aplicativo
demo.launch()