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()