DHEIVER's picture
Update app.py
6b3d533 verified
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()