Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image | |
from transformers import BlipProcessor, BlipForConditionalGeneration | |
import requests | |
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") | |
# Função para chamar a API do Deepseek (ou substituto como Qwen) | |
def call_deepseek(prompt): | |
# Substitua esta URL pela API oficial do Deepseek ou use um modelo alternativo | |
api_url = "https://api.deepseek.com/v1/completions" # Exemplo fictício | |
headers = { | |
"Authorization": "Bearer YOUR_DEEPSEEK_API_KEY", # Substitua pelo seu token | |
"Content-Type": "application/json", | |
} | |
data = { | |
"prompt": prompt, | |
"max_tokens": 150, | |
"temperature": 0.7, | |
"stop": ["\n"] | |
} | |
response = requests.post(api_url, headers=headers, json=data) | |
if response.status_code == 200: | |
return response.json()["choices"][0]["text"].strip() | |
else: | |
return f"Erro ao chamar Deepseek: {response.status_code}" | |
# 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 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 usando Deepseek | |
deepseek_prompt = ( | |
f"Descreva as informações nutricionais e as calorias do seguinte alimento em português: {food_description}. " | |
f"Inclua detalhes sobre proteínas, carboidratos, gorduras e valor calórico total." | |
) | |
nutritional_info = call_deepseek(deepseek_prompt) | |
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"Informações Nutricionais:\n{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() |