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