DHEIVER commited on
Commit
1d4b8d9
·
verified ·
1 Parent(s): 89dcdea

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -60
app.py CHANGED
@@ -5,29 +5,22 @@ 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",
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",
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
  if isinstance(image, np.ndarray):
@@ -37,38 +30,29 @@ def preprocess_image(image):
37
 
38
  def classify_wound(image):
39
  if image is None:
40
- return None, None
41
 
42
- wound_classifier, tissue_classifier = load_models()
43
  processed_image = preprocess_image(image)
44
 
45
- # Classificação do tipo de ferida
46
- wound_results = wound_classifier(processed_image)
47
-
48
- # Classificação do tipo de tecido
49
- tissue_results = tissue_classifier(processed_image)
50
 
51
  # Formatando resultados
52
- wound_formatted = []
53
- for result in wound_results:
54
- label = WOUND_TYPES.get(result['label'], result['label'])
55
- score = result['score']
56
- wound_formatted.append((label, score))
57
-
58
- tissue_formatted = []
59
- for result in tissue_results:
60
  label = result['label'].replace('_', ' ').title()
61
  score = result['score']
62
- tissue_formatted.append((label, score))
63
 
64
- return wound_formatted, tissue_formatted
65
 
66
  # Interface Gradio
67
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
68
  gr.Markdown("""
69
- # 🏥 Classificador Especializado de Feridas
70
 
71
- Sistema de classificação utilizando modelos especializados para análise de feridas e tecidos.
72
  """)
73
 
74
  with gr.Row():
@@ -77,46 +61,34 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
77
  label="Upload da Imagem",
78
  type="pil"
79
  )
80
- submit_btn = gr.Button("Analisar Ferida", variant="primary", size="lg")
81
 
82
  with gr.Column():
83
- wound_output = gr.Label(
84
- label="Tipo de Ferida",
85
- num_top_classes=3
86
- )
87
- tissue_output = gr.Label(
88
- label="Tipo de Tecido",
89
  num_top_classes=3
90
  )
91
 
92
  with gr.Row():
93
- with gr.Accordion("Informações Importantes", open=False):
94
  gr.Markdown("""
95
- ### Tipos de Feridas Detectáveis:
96
- - Úlcera de Pressão
97
- - Úlcera Venosa
98
- - Úlcera Diabética
99
- - Ferida Cirúrgica
100
- - Queimadura
101
-
102
- ### Tipos de Tecidos Analisados:
103
- - Tecido de Granulação
104
- - Tecido Necrótico
105
- - Tecido Fibrinoso
106
- - Tecido Epitelial
107
-
108
  ### Recomendações para Melhores Resultados:
109
  1. Use imagens bem iluminadas
110
- 2. Capture a imagem em um ângulo perpendicular à ferida
111
  3. Mantenha um fundo neutro e limpo
112
  4. Evite sombras ou reflexos excessivos
 
 
 
 
 
113
  """)
114
 
115
  # Configurando eventos
116
  submit_btn.click(
117
  fn=classify_wound,
118
  inputs=input_image,
119
- outputs=[wound_output, tissue_output]
120
  )
121
 
122
  if __name__ == "__main__":
 
5
  import numpy as np
6
 
7
  WOUND_TYPES = {
8
+ "stage1": "Estágio 1 - Lesão Superficial",
9
+ "stage2": "Estágio 2 - Lesão Parcial",
10
+ "stage3": "Estágio 3 - Lesão Profunda",
11
+ "stage4": "Estágio 4 - Lesão Grave",
12
+ "unstageable": "Não Classificável",
13
+ "healthy": "Pele Saudável"
14
  }
15
 
16
+ def load_model():
17
+ # Usando um modelo público do Hugging Face para classificação de imagens
18
+ classifier = pipeline(
19
  "image-classification",
20
+ model="google/vit-base-patch16-224",
21
  device=0 if torch.cuda.is_available() else -1
22
  )
23
+ return classifier
 
 
 
 
 
 
 
24
 
25
  def preprocess_image(image):
26
  if isinstance(image, np.ndarray):
 
30
 
31
  def classify_wound(image):
32
  if image is None:
33
+ return None
34
 
35
+ classifier = load_model()
36
  processed_image = preprocess_image(image)
37
 
38
+ # Classificação da imagem
39
+ results = classifier(processed_image)
 
 
 
40
 
41
  # Formatando resultados
42
+ formatted_results = []
43
+ for result in results:
 
 
 
 
 
 
44
  label = result['label'].replace('_', ' ').title()
45
  score = result['score']
46
+ formatted_results.append((label, score))
47
 
48
+ return formatted_results
49
 
50
  # Interface Gradio
51
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
52
  gr.Markdown("""
53
+ # 🏥 Classificador de Imagens Médicas
54
 
55
+ Sistema de classificação de imagens usando Vision Transformer (ViT).
56
  """)
57
 
58
  with gr.Row():
 
61
  label="Upload da Imagem",
62
  type="pil"
63
  )
64
+ submit_btn = gr.Button("Analisar Imagem", variant="primary")
65
 
66
  with gr.Column():
67
+ output = gr.Label(
68
+ label="Classificação",
 
 
 
 
69
  num_top_classes=3
70
  )
71
 
72
  with gr.Row():
73
+ with gr.Accordion("Informações", open=False):
74
  gr.Markdown("""
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  ### Recomendações para Melhores Resultados:
76
  1. Use imagens bem iluminadas
77
+ 2. Capture a imagem em um ângulo perpendicular
78
  3. Mantenha um fundo neutro e limpo
79
  4. Evite sombras ou reflexos excessivos
80
+
81
+ ### Observações:
82
+ - Este é um modelo de classificação geral
83
+ - Os resultados são aproximações e não substituem avaliação médica
84
+ - Consulte sempre um profissional de saúde para diagnóstico
85
  """)
86
 
87
  # Configurando eventos
88
  submit_btn.click(
89
  fn=classify_wound,
90
  inputs=input_image,
91
+ outputs=output
92
  )
93
 
94
  if __name__ == "__main__":