Spaces:
Runtime error
Runtime error
| 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: <s>{prompt} ASSISTANT: <s>", 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() | |