Spaces:
Sleeping
Sleeping
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() |