Spaces:
Sleeping
Sleeping
File size: 4,999 Bytes
183ba69 471f43d 35c9642 389a29c 4273fa3 817e7fd 471f43d 817e7fd 35c9642 471f43d 35c9642 183ba69 35c9642 817e7fd 247c724 35c9642 389a29c 817e7fd 35c9642 817e7fd 35c9642 817e7fd 389a29c 35c9642 817e7fd 35c9642 247c724 389a29c 183ba69 817e7fd 35c9642 817e7fd 35c9642 |
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 109 110 111 112 113 114 115 116 117 118 119 |
import gradio as gr
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
import time
# Carregando o modelo BLIP para geração de legendas
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
model_blip = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large")
# Base de dados nutricionais simples (em português)
nutritional_database = {
"bife": {"calorias": 250, "proteinas": 26, "carboidratos": 0, "gorduras": 15},
"feijão": {"calorias": 120, "proteinas": 8, "carboidratos": 20, "gorduras": 1},
"arroz": {"calorias": 130, "proteinas": 2.7, "carboidratos": 28, "gorduras": 0.3},
"salada": {"calorias": 30, "proteinas": 1, "carboidratos": 5, "gorduras": 0.2},
"tomate": {"calorias": 18, "proteinas": 0.9, "carboidratos": 3.9, "gorduras": 0.2},
}
# Função para gerar legenda da imagem usando BLIP
def generate_caption(img, min_len, max_len):
try:
raw_image = Image.open(img).convert('RGB')
inputs = processor(raw_image, return_tensors="pt")
out = model_blip.generate(**inputs, min_length=min_len, max_length=max_len)
caption = processor.decode(out[0], skip_special_tokens=True)
return caption
except Exception as e:
return f"Erro ao gerar legenda: {str(e)}"
# Função para gerar informações nutricionais com base na descrição
def generate_nutritional_info(food_description):
try:
# Dividir a descrição em palavras-chave
keywords = food_description.lower().split(", ")
total_calories = 0
nutritional_summary = []
for keyword in keywords:
if keyword in nutritional_database:
info = nutritional_database[keyword]
total_calories += info["calorias"]
nutritional_summary.append(
f"- {keyword.capitalize()}: {info['calorias']} calorias, "
f"{info['proteinas']}g proteínas, {info['carboidratos']}g carboidratos, "
f"{info['gorduras']}g gorduras"
)
if not nutritional_summary:
return "Desculpe, não encontramos informações nutricionais detalhadas para este alimento."
summary = "\n".join(nutritional_summary)
return f"Informações Nutricionais:\n{summary}\n\nTotal de Calorias: {total_calories} kcal"
except Exception as e:
return f"Erro ao gerar informações nutricionais: {str(e)}"
# Função principal que combina tudo
def greet(img, min_len, max_len):
start = time.time()
# Passo 1: Gerar legenda para a imagem usando BLIP
food_description = generate_caption(img, min_len, max_len)
if "Erro" in food_description:
return food_description # Retorna mensagem de erro se houver falha no BLIP
# Passo 2: Gerar informações nutricionais com base na legenda
nutritional_info = generate_nutritional_info(food_description)
end = time.time()
total_time = str(round(end - start, 2))
# Marketing agressivo
marketing_message = (
"🎉 OFERTA EXCLUSIVA! 🎉\n\n"
"Inscreva-se AGORA para receber dicas diárias de nutrição e descontos exclusivos em nossos produtos premium!\n\n"
"Compartilhe este resultado com seus amigos e ganhe 10% de desconto em nossa loja online.\n\n"
"-----------------------------\n\n"
)
result = (
f"{marketing_message}"
f"Descrição do Alimento: {food_description}\n\n"
f"{nutritional_info}\n\n"
f"Gerado em {total_time} segundos."
)
return result
# Interface Gradio
with gr.Blocks(theme=gr.themes.Base(primary_hue="red", secondary_hue="orange", neutral_hue="slate")) as demo:
gr.Markdown(
"""
# 🔥 NutriScan Pro 🔥
### Descubra os Segredos Nutricionais dos Seus Alimentos Instantaneamente!
🌟 **OFERTA LIMITADA:** Inscreva-se agora e receba acesso exclusivo a dicas diárias de nutrição e descontos especiais em nossos produtos premium!
📸 **Como Funciona:**
1. Faça upload de uma imagem do seu alimento.
2. Receba informações detalhadas sobre nutrientes e calorias.
3. Compartilhe com amigos e ganhe descontos!
⚡ **Apenas 24 Horas de Oferta!** Não perca essa oportunidade única!
"""
)
with gr.Row():
img_input = gr.Image(type='filepath', label='Upload da Imagem')
with gr.Column():
min_len = gr.Slider(label='Tamanho Mínimo da Legenda', minimum=1, maximum=1000, value=30)
max_len = gr.Slider(label='Tamanho Máximo da Legenda', minimum=1, maximum=1000, value=100)
output = gr.Textbox(label='Resultado')
submit_button = gr.Button("🔍 Analisar Agora! 🔍", variant="primary")
submit_button.click(greet, inputs=[img_input, min_len, max_len], outputs=output)
demo.launch() |