DHEIVER commited on
Commit
ab0f059
·
verified ·
1 Parent(s): 2b58e73

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +137 -0
app.py ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import pipeline, AutoModelForImageClassification, AutoImageProcessor
3
+ import torch
4
+ from PIL import Image
5
+ import numpy as np
6
+
7
+ WOUND_TYPES = {
8
+ "pressure_ulcer": "Úlcera de Pressão",
9
+ "venous_ulcer": "Úlcera Venosa",
10
+ "diabetic_ulcer": "Úlcera Diabética",
11
+ "surgical_wound": "Ferida Cirúrgica",
12
+ "burn": "Queimadura",
13
+ "healthy_skin": "Pele Saudável"
14
+ }
15
+
16
+ def load_models():
17
+ # Carregando modelos específicos para feridas
18
+ wound_classifier = pipeline(
19
+ "image-classification",
20
+ model="stevhliu/wound-classification", # Modelo específico para classificação de feridas
21
+ device=0 if torch.cuda.is_available() else -1
22
+ )
23
+
24
+ tissue_classifier = pipeline(
25
+ "image-classification",
26
+ model="viktorcikojevic/wound-tissue-type", # Modelo para classificação do tipo de tecido
27
+ device=0 if torch.cuda.is_available() else -1
28
+ )
29
+
30
+ return wound_classifier, tissue_classifier
31
+
32
+ def preprocess_image(image):
33
+ # Normalização e pré-processamento da imagem
34
+ if isinstance(image, np.ndarray):
35
+ image = Image.fromarray(image)
36
+ image = image.convert('RGB')
37
+ return image
38
+
39
+ def classify_wound(image):
40
+ if image is None:
41
+ return None, None
42
+
43
+ wound_classifier, tissue_classifier = load_models()
44
+ processed_image = preprocess_image(image)
45
+
46
+ # Classificação do tipo de ferida
47
+ wound_results = wound_classifier(processed_image)
48
+
49
+ # Classificação do tipo de tecido
50
+ tissue_results = tissue_classifier(processed_image)
51
+
52
+ # Formatando resultados da classificação de feridas
53
+ wound_formatted = []
54
+ for result in wound_results:
55
+ label = WOUND_TYPES.get(result['label'], result['label'])
56
+ score = result['score']
57
+ wound_formatted.append((label, score))
58
+
59
+ # Formatando resultados da classificação de tecidos
60
+ tissue_formatted = []
61
+ for result in tissue_results:
62
+ label = result['label'].replace('_', ' ').title()
63
+ score = result['score']
64
+ tissue_formatted.append((label, score))
65
+
66
+ return wound_formatted, tissue_formatted
67
+
68
+ # Criando a interface do Gradio
69
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
70
+ gr.Markdown("""
71
+ # 🏥 Classificador Especializado de Feridas
72
+
73
+ Sistema de classificação utilizando modelos especializados para análise de feridas e tecidos.
74
+ """)
75
+
76
+ with gr.Row():
77
+ with gr.Column():
78
+ input_image = gr.Image(
79
+ label="Upload da Imagem",
80
+ type="pil",
81
+ tool="select"
82
+ )
83
+ submit_btn = gr.Button("Analisar Ferida", variant="primary", size="lg")
84
+
85
+ with gr.Column():
86
+ wound_output = gr.Label(
87
+ label="Tipo de Ferida",
88
+ num_top_classes=3
89
+ )
90
+ tissue_output = gr.Label(
91
+ label="Tipo de Tecido",
92
+ num_top_classes=3
93
+ )
94
+
95
+ with gr.Row():
96
+ with gr.Accordion("Informações Importantes", open=False):
97
+ gr.Markdown("""
98
+ ### Tipos de Feridas Detectáveis:
99
+ - Úlcera de Pressão
100
+ - Úlcera Venosa
101
+ - Úlcera Diabética
102
+ - Ferida Cirúrgica
103
+ - Queimadura
104
+
105
+ ### Tipos de Tecidos Analisados:
106
+ - Tecido de Granulação
107
+ - Tecido Necrótico
108
+ - Tecido Fibrinoso
109
+ - Tecido Epitelial
110
+
111
+ ### Recomendações para Melhores Resultados:
112
+ 1. Use imagens bem iluminadas
113
+ 2. Capture a imagem em um ângulo perpendicular à ferida
114
+ 3. Mantenha um fundo neutro e limpo
115
+ 4. Evite sombras ou reflexos excessivos
116
+ """)
117
+
118
+ # Configurando eventos
119
+ submit_btn.click(
120
+ fn=classify_wound,
121
+ inputs=input_image,
122
+ outputs=[wound_output, tissue_output]
123
+ )
124
+
125
+ # Exemplos
126
+ gr.Examples(
127
+ examples=[
128
+ ["exemplo_pressure_ulcer.jpg"],
129
+ ["exemplo_diabetic_wound.jpg"],
130
+ ],
131
+ inputs=input_image,
132
+ outputs=[wound_output, tissue_output],
133
+ cache_examples=True
134
+ )
135
+
136
+ if __name__ == "__main__":
137
+ demo.launch(share=True)