DHEIVER's picture
Create app.py
ab0f059 verified
raw
history blame
4.29 kB
import gradio as gr
from transformers import pipeline, AutoModelForImageClassification, AutoImageProcessor
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", # Modelo específico para classificação de feridas
device=0 if torch.cuda.is_available() else -1
)
tissue_classifier = pipeline(
"image-classification",
model="viktorcikojevic/wound-tissue-type", # Modelo para classificação do tipo de tecido
device=0 if torch.cuda.is_available() else -1
)
return wound_classifier, tissue_classifier
def preprocess_image(image):
# Normalização e pré-processamento da imagem
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 da classificação de feridas
wound_formatted = []
for result in wound_results:
label = WOUND_TYPES.get(result['label'], result['label'])
score = result['score']
wound_formatted.append((label, score))
# Formatando resultados da classificação de tecidos
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
# Criando a interface do 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",
tool="select"
)
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]
)
# Exemplos
gr.Examples(
examples=[
["exemplo_pressure_ulcer.jpg"],
["exemplo_diabetic_wound.jpg"],
],
inputs=input_image,
outputs=[wound_output, tissue_output],
cache_examples=True
)
if __name__ == "__main__":
demo.launch(share=True)