File size: 4,356 Bytes
183ba69
471f43d
35c9642
6b3d533
389a29c
4273fa3
817e7fd
471f43d
817e7fd
 
6b3d533
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471f43d
35c9642
 
 
 
 
 
 
 
 
 
183ba69
247c724
35c9642
389a29c
817e7fd
35c9642
 
 
 
817e7fd
6b3d533
 
 
 
 
 
817e7fd
389a29c
35c9642
 
 
 
 
 
 
 
 
817e7fd
35c9642
 
 
6b3d533
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
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()