import io import requests import torch from PIL import Image import streamlit as st from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig # Função para baixar e processar a imagem def download_image(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } resp = requests.get(url, headers=headers) resp.raise_for_status() return Image.open(io.BytesIO(resp.content)).convert("RGB") # Função para gerar a descrição com base na imagem e no prompt def generate(images, prompt, processor, model, device, dtype, generation_config): inputs = processor( images=images[:2], text=f" USER: {prompt} ASSISTANT: ", return_tensors="pt" ).to(device=device, dtype=dtype) output = model.generate(**inputs, generation_config=generation_config)[0] response = processor.tokenizer.decode(output, skip_special_tokens=True) return response # Função principal da interface Streamlit def main(): # Definir o dispositivo de execução (GPU ou CPU) device = "cuda:0" if torch.cuda.is_available() else "cpu" dtype = torch.float16 # Carregar o modelo e o processador processor = AutoProcessor.from_pretrained("StanfordAIMI/CheXagent-8b", trust_remote_code=True) generation_config = GenerationConfig.from_pretrained("StanfordAIMI/CheXagent-8b") model = AutoModelForCausalLM.from_pretrained( "StanfordAIMI/CheXagent-8b", torch_dtype=dtype, trust_remote_code=True ).to(device) # Título da aplicação Streamlit st.title("Análise de Imagem Médica com CheXagent") # Entrada para o URL da imagem image_url = st.text_input("Insira o URL da imagem:", "https://upload.wikimedia.org/wikipedia/commons/3/3b/Pleural_effusion-Metastatic_breast_carcinoma_Case_166_%285477628658%29.jpg") # Entrada para o prompt prompt = st.text_input("Insira o prompt para a análise:", "Descreva o \"Airway\"") # Botão para gerar a resposta if st.button("Gerar Análise"): try: # Passo 1: Baixar a imagem st.write("Baixando a imagem...") images = [download_image(image_url)] # Exibir a imagem na interface st.image(images[0], caption="Imagem fornecida", use_column_width=True) # Passo 2: Gerar a resposta st.write(f"Gerando a análise para: {prompt}...") response = generate(images, prompt, processor, model, device, dtype, generation_config) # Exibir a resposta gerada st.subheader("Análise Gerada:") st.write(response) except Exception as e: st.error(f"Ocorreu um erro: {e}") if __name__ == "__main__": main()