|
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 |
|
|
|
|
|
extractor = AutoFeatureExtractor.from_pretrained("DifeiT/rsna-intracranial-hemorrhage-detection") |
|
model = AutoModelForImageClassification.from_pretrained("DifeiT/rsna-intracranial-hemorrhage-detection") |
|
|
|
|
|
preprocess = transforms.Compose([ |
|
transforms.ToPILImage(), |
|
transforms.Resize((224, 224)), |
|
transforms.ToTensor(), |
|
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) |
|
]) |
|
|
|
|
|
id2label = { |
|
"0": "epidural", |
|
"1": "intraparenchymal", |
|
"2": "intraventricular", |
|
"3": "normal", |
|
"4": "subarachnoid", |
|
"5": "subdural" |
|
} |
|
|
|
|
|
def classify_image(image): |
|
|
|
image = preprocess(image) |
|
|
|
|
|
image = image.unsqueeze(0) |
|
|
|
|
|
outputs = model(image) |
|
|
|
|
|
logits = outputs.logits |
|
|
|
|
|
probabilities = torch.softmax(logits, dim=1) |
|
|
|
|
|
predicted_class = torch.argmax(probabilities, dim=1).item() |
|
|
|
|
|
predicted_label = id2label.get(str(predicted_class), "Desconhecido") |
|
|
|
|
|
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
|
|
|
|
|
result_html = f""" |
|
<h2>Resultado da Classificação</h2> |
|
<p><strong>Classe Predita:</strong> {predicted_label}</p> |
|
<p><strong>Data e Hora:</strong> {current_time}</p> |
|
""" |
|
|
|
|
|
return result_html |
|
|
|
|
|
iface = gr.Interface( |
|
fn=classify_image, |
|
inputs=gr.inputs.Image(type="numpy", label="Carregar uma imagem"), |
|
outputs=gr.outputs.HTML(), |
|
title="Classificador de Hemorragia Intracraniana", |
|
description="""<h1>Classificador de Hemorragia Intracraniana</h1> |
|
<p>Esta aplicação Gradio permite classificar imagens relacionadas à hemorragia intracraniana usando um modelo Vision Transformer (ViT).</p> |
|
|
|
<h2>Instruções de Uso</h2> |
|
|
|
<ol> |
|
<li>Clique no botão "Escolher Arquivo" para fazer o upload de uma imagem relacionada à hemorragia intracraniana.</li> |
|
<li>Aguarde alguns segundos enquanto o modelo processa a imagem.</li> |
|
<li>O resultado mostrará a classe prevista relacionada à hemorragia intracraniana.</li> |
|
<li>A data e a hora da classificação também serão exibidas.</li> |
|
</ol> |
|
|
|
<p>Este modelo pode identificar classes de hemorragia intracraniana, como "epidural", "intraparenchymal", "intraventricular", "normal", "subarachnoid" e "subdural".</p> |
|
|
|
<p>Por favor, note que este é um modelo de demonstração e os resultados podem não ser precisos para fins clínicos.</p>""" |
|
) |
|
|
|
|
|
iface.launch() |
|
|