DHEIVER's picture
Update app.py
89dcdea verified
raw
history blame
3.67 kB
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()