Spaces:
Running
Running
File size: 2,901 Bytes
83ff295 |
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 |
import streamlit as st
import os
from dotenv import load_dotenv
from groq import Groq
import base64
from prompt import build_messages
from werkzeug.utils import secure_filename
from gerar_json import processar_imagem
# Carregar variáveis de ambiente
load_dotenv()
client = Groq(
api_key=os.getenv("GROQ_API_KEY"),
)
# Função para codificar a imagem
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# Configuração do Streamlit
st.title("Análise de Imagens de Vestuário")
# Formulário para entrada do usuário
with st.form(key="form_analise"):
sexo = st.selectbox("Selecione o sexo:", ["Masculino", "Feminino"])
ocasiao = st.selectbox("Selecione a ocasião:", ["Formal", "Casual", "Esporte", "Festa", "Praia"])
imagem = st.file_uploader("Carregue a imagem:", type=["jpg", "jpeg", "png"])
submit_button = st.form_submit_button(label="Enviar")
# Lógica de processamento ao enviar o formulário
if submit_button:
if imagem is not None:
# Garantir que o nome do arquivo seja seguro
file_name = secure_filename(imagem.name)
# Criar uma pasta temporária para armazenar o arquivo
temp_dir = "temp_images"
os.makedirs(temp_dir, exist_ok=True)
file_path = os.path.join(temp_dir, file_name)
# Salvar a imagem no disco
with open(file_path, "wb") as f:
f.write(imagem.getbuffer())
# Codificar a imagem para base64
base64_image = encode_image(file_path)
# Processar a imagem
deteccao = processar_imagem(file_path)[2]
# Construir mensagens para os prompts
messages_for_description, messages_for_analysis = build_messages(deteccao, base64_image)
try:
# Primeira interação com o modelo
chat_completion = client.chat.completions.create(
messages=messages_for_description,
model="llama-3.2-90b-vision-preview",
)
clothing_description = chat_completion.choices[0].message.content
# Segunda interação com o modelo
analysis_response = client.chat.completions.create(
messages=messages_for_analysis(clothing_description, sexo, ocasiao),
model="llama-3.2-90b-vision-preview",
)
resposta = analysis_response.choices[0].message.content
# Exibir o resultado
st.success("Análise concluída com sucesso!")
st.write("### Resultado:")
st.write(resposta)
os.remove(file_path)
except Exception as e:
st.error(f"Ocorreu um erro durante o processamento: {e}")
else:
st.warning("Por favor, carregue uma imagem para análise.")
|