DHEIVER commited on
Commit
fb54997
1 Parent(s): e367df3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +89 -1
app.py CHANGED
@@ -1,3 +1,91 @@
1
  import gradio as gr
 
 
 
 
 
 
2
 
3
- gr.Interface.load("models/DifeiT/rsna_intracranial_hemorrhage_detection").launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from transformers import AutoFeatureExtractor, AutoModelForImageClassification
3
+ import torch
4
+ import datetime
5
+ from PIL import Image
6
+ import torchvision.transforms as transforms
7
+ import numpy as np
8
 
9
+ # Carregue o extrator de recursos e o modelo
10
+ extractor = AutoFeatureExtractor.from_pretrained("DifeiT/rsna-intracranial-hemorrhage-detection")
11
+ model = AutoModelForImageClassification.from_pretrained("DifeiT/rsna-intracranial-hemorrhage-detection")
12
+
13
+ # Transformações para pré-processamento
14
+ preprocess = transforms.Compose([
15
+ transforms.ToPILImage(), # Converte para objeto PIL.Image
16
+ transforms.Resize((224, 224)), # Redimensiona para o tamanho de entrada do modelo (224x224)
17
+ transforms.ToTensor(), # Converte para tensor
18
+ transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # Normalização
19
+ ])
20
+
21
+ # Mapeamento de classe ID para rótulo
22
+ id2label = {
23
+ "0": "epidural",
24
+ "1": "intraparenchymal",
25
+ "2": "intraventricular",
26
+ "3": "normal",
27
+ "4": "subarachnoid",
28
+ "5": "subdural"
29
+ }
30
+
31
+ # Função para classificar a imagem
32
+ def classify_image(image):
33
+ # Aplica o pré-processamento na imagem
34
+ image = preprocess(image)
35
+
36
+ # Adiciona uma dimensão extra para criar um lote (batch) de tamanho 1
37
+ image = image.unsqueeze(0)
38
+
39
+ # Passa a imagem pelo modelo
40
+ outputs = model(image)
41
+
42
+ # Obtém as probabilidades das classes
43
+ logits = outputs.logits
44
+
45
+ # Calcula as probabilidades finais usando o softmax
46
+ probabilities = torch.softmax(logits, dim=1)
47
+
48
+ # Obtém a classe com a maior probabilidade
49
+ predicted_class = torch.argmax(probabilities, dim=1).item()
50
+
51
+ # Rótulo da classe prevista
52
+ predicted_label = id2label.get(str(predicted_class), "Desconhecido")
53
+
54
+ # Obtém a data e hora atual
55
+ current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
56
+
57
+ # Formate a saída em HTML com data e hora
58
+ result_html = f"""
59
+ <h2>Resultado da Classificação</h2>
60
+ <p><strong>Classe Predita:</strong> {predicted_label}</p>
61
+ <p><strong>Data e Hora:</strong> {current_time}</p>
62
+ """
63
+
64
+ # Retorna o resultado formatado em HTML
65
+ return result_html
66
+
67
+ # Crie uma interface Gradio com instruções de uso
68
+ iface = gr.Interface(
69
+ fn=classify_image,
70
+ inputs=gr.inputs.Image(type="numpy", label="Carregar uma imagem"),
71
+ outputs=gr.outputs.HTML(), # Saída formatada com HTML
72
+ title="Classificador de Hemorragia Intracraniana",
73
+ description="""<h1>Classificador de Hemorragia Intracraniana</h1>
74
+ <p>Esta aplicação Gradio permite classificar imagens relacionadas à hemorragia intracraniana usando um modelo Vision Transformer (ViT).</p>
75
+
76
+ <h2>Instruções de Uso</h2>
77
+
78
+ <ol>
79
+ <li>Clique no botão "Escolher Arquivo" para fazer o upload de uma imagem relacionada à hemorragia intracraniana.</li>
80
+ <li>Aguarde alguns segundos enquanto o modelo processa a imagem.</li>
81
+ <li>O resultado mostrará a classe prevista relacionada à hemorragia intracraniana.</li>
82
+ <li>A data e a hora da classificação também serão exibidas.</li>
83
+ </ol>
84
+
85
+ <p>Este modelo pode identificar classes de hemorragia intracraniana, como "epidural", "intraparenchymal", "intraventricular", "normal", "subarachnoid" e "subdural".</p>
86
+
87
+ <p>Por favor, note que este é um modelo de demonstração e os resultados podem não ser precisos para fins clínicos.</p>"""
88
+ )
89
+
90
+ # Inicie a interface Gradio
91
+ iface.launch()