import gradio as gr from transformers import AutoFeatureExtractor, AutoModelForImageClassification import torch import datetime from PIL import Image import torchvision.transforms as transforms import numpy as np # Carregue o extrator de recursos e o modelo extractor = AutoFeatureExtractor.from_pretrained("DifeiT/rsna-intracranial-hemorrhage-detection") model = AutoModelForImageClassification.from_pretrained("DifeiT/rsna-intracranial-hemorrhage-detection") # Transformações para pré-processamento preprocess = transforms.Compose([ transforms.ToPILImage(), # Converte para objeto PIL.Image transforms.Resize((224, 224)), # Redimensiona para o tamanho de entrada do modelo (224x224) transforms.ToTensor(), # Converte para tensor transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # Normalização ]) # Mapeamento de classe ID para rótulo id2label = { "0": "epidural", "1": "intraparenchymal", "2": "intraventricular", "3": "normal", "4": "subarachnoid", "5": "subdural" } # Função para classificar a imagem def classify_image(image): # Aplica o pré-processamento na imagem image = preprocess(image) # Adiciona uma dimensão extra para criar um lote (batch) de tamanho 1 image = image.unsqueeze(0) # Passa a imagem pelo modelo outputs = model(image) # Obtém as probabilidades das classes logits = outputs.logits # Calcula as probabilidades finais usando o softmax probabilities = torch.softmax(logits, dim=1) # Obtém a classe com a maior probabilidade predicted_class = torch.argmax(probabilities, dim=1).item() # Rótulo da classe prevista predicted_label = id2label.get(str(predicted_class), "Desconhecido") # Obtém a data e hora atual current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Formate a saída em HTML com data e hora result_html = f"""

Resultado da Classificação

Classe Predita: {predicted_label}

Data e Hora: {current_time}

""" # Retorna o resultado formatado em HTML return result_html # Crie uma interface Gradio com instruções de uso iface = gr.Interface( fn=classify_image, inputs=gr.inputs.Image(type="numpy", label="Carregar uma imagem"), outputs=gr.outputs.HTML(), # Saída formatada com HTML title="Classificador de Hemorragia Intracraniana", description="""

Classificador de Hemorragia Intracraniana

Esta aplicação Gradio permite classificar imagens relacionadas à hemorragia intracraniana usando um modelo Vision Transformer (ViT).

Instruções de Uso

  1. Clique no botão "Escolher Arquivo" para fazer o upload de uma imagem relacionada à hemorragia intracraniana.
  2. Aguarde alguns segundos enquanto o modelo processa a imagem.
  3. O resultado mostrará a classe prevista relacionada à hemorragia intracraniana.
  4. A data e a hora da classificação também serão exibidas.

Este modelo pode identificar classes de hemorragia intracraniana, como "epidural", "intraparenchymal", "intraventricular", "normal", "subarachnoid" e "subdural".

Por favor, note que este é um modelo de demonstração e os resultados podem não ser precisos para fins clínicos.

""" ) # Inicie a interface Gradio iface.launch()