Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import pipeline | |
from PIL import Image | |
import numpy as np | |
# Załaduj model klasyfikacji zmian skórnych | |
skin_model = pipeline("image-classification", model="Anwarkh1/Skin_Cancer-Image_Classification") | |
# Definicje typów zmian skórnych z interpretacją medyczną | |
SKIN_CONDITIONS = { | |
"Actinic keratoses": { | |
"name": "Rogowacenie słoneczne", | |
"risk": "medium", | |
"description": "Przedrakowе zmiany wywołane długotrwałym narażeniem na słońce", | |
"recommendation": "Wymaga kontroli dermatologicznej - może prowadzić do raka płaskonabłonkowego" | |
}, | |
"Basal cell carcinoma": { | |
"name": "Rak podstawnokomórkowy", | |
"risk": "high", | |
"description": "Najczęstszy typ raka skóry, rzadko daje przerzuty", | |
"recommendation": "PILNIE skonsultuj się z onkologiem/dermatologiem" | |
}, | |
"Dermatofibroma": { | |
"name": "Włókniak skóry", | |
"risk": "low", | |
"description": "Łagodny guzek składający się z tkanki włóknistej", | |
"recommendation": "Zwykle nie wymaga leczenia, kontrola dermatologiczna" | |
}, | |
"Melanoma": { | |
"name": "Czerniak", | |
"risk": "high", | |
"description": "Najgroźniejszy typ raka skóry, może szybko dawać przerzuty", | |
"recommendation": "NATYCHMIAST skonsultuj się z onkologiem!" | |
}, | |
"Nevus": { | |
"name": "Znamię", | |
"risk": "low", | |
"description": "Zwykle łagodna zmiana pigmentowa", | |
"recommendation": "Obserwuj zmiany według reguły ABCDE" | |
}, | |
"Pigmented benign keratosis": { | |
"name": "Łagodne rogowacenie barwnikowe", | |
"risk": "low", | |
"description": "Łagodna zmiana wieku, często ciemno zabarwiona", | |
"recommendation": "Zwykle nie wymaga leczenia" | |
}, | |
"Seborrheic keratosis": { | |
"name": "Rogowacenie łojotokowe", | |
"risk": "low", | |
"description": "Łagodna zmiana starcza, często brodawkowata", | |
"recommendation": "Nie wymaga leczenia, możliwość usunięcia kosmetycznego" | |
}, | |
"Squamous cell carcinoma": { | |
"name": "Rak płaskonabłonkowy", | |
"risk": "high", | |
"description": "Drugi najczęstszy typ raka skóry", | |
"recommendation": "PILNIE skonsultuj się z onkologiem/dermatologiem" | |
} | |
} | |
def get_risk_indicator(risk_level): | |
"""Zwraca kolorowy wskaźnik ryzyka""" | |
if risk_level == "high": | |
return "🔴 WYSOKIE RYZYKO" | |
elif risk_level == "medium": | |
return "🟡 ŚREDNIE RYZYKO" | |
else: | |
return "🟢 NISKIE RYZYKO" | |
def analyze_skin(image): | |
if image is None: | |
return "❌ Proszę wgrać zdjęcie", None, "" | |
try: | |
# Analiza zmiany skórnej | |
result = skin_model(image) | |
# Formatuj wynik z kolorowymi wskaźnikami | |
output = "# 🔬 WYNIK ANALIZY ZMIANY SKÓRNEJ\n\n" | |
# Główny wynik (najwyższe prawdopodobieństwo) | |
top_result = result[0] | |
top_condition = SKIN_CONDITIONS.get(top_result['label'], { | |
'name': top_result['label'], | |
'risk': 'medium', | |
'description': 'Nieznana zmiana skórna', | |
'recommendation': 'Skonsultuj się z dermatologiem' | |
}) | |
risk_indicator = get_risk_indicator(top_condition['risk']) | |
output += f"## 🎯 NAJBARDZIEJ PRAWDOPODOBNE:\n" | |
output += f"**{top_condition['name']}** ({top_result['label']})\n" | |
output += f"**Prawdopodobieństwo:** {top_result['score']:.1%}\n" | |
output += f"**Poziom ryzyka:** {risk_indicator}\n\n" | |
output += f"### 📋 Opis medyczny:\n" | |
output += f"{top_condition['description']}\n\n" | |
output += f"### 💡 Zalecenia:\n" | |
output += f"{top_condition['recommendation']}\n\n" | |
# Wszystkie wyniki | |
output += "## 📊 SZCZEGÓŁOWE PRAWDOPODOBIEŃSTWA:\n\n" | |
for i, r in enumerate(result, 1): | |
condition = SKIN_CONDITIONS.get(r['label'], {'name': r['label'], 'risk': 'medium'}) | |
risk_emoji = "🔴" if condition['risk'] == 'high' else "🟡" if condition['risk'] == 'medium' else "🟢" | |
output += f"{i}. {risk_emoji} **{condition['name']}** – {r['score']:.2%}\n" | |
# Ostrzeżenia bezpieczeństwa | |
safety_warning = """ | |
--- | |
## ⚠️ WAŻNE OSTRZEŻENIA BEZPIECZEŃSTWA: | |
🩺 **Ta aplikacja NIE ZASTĘPUJE konsultacji lekarskiej!** | |
- Wyniki mają charakter orientacyjny | |
- Ostateczną diagnozę może postawić tylko lekarz | |
- W przypadku podejrzanych zmian skórnych - skonsultuj się z dermatologiem | |
🔍 **Zasada ABCDE dla znamion:** | |
- **A**symetria | |
- **B**rzegi nieregularne | |
- **C**olor niejednolity | |
- **D**średnica > 6mm | |
- **E**wolucja (zmiany) | |
📞 **Kiedy natychmiast do lekarza:** | |
- Zmiany rosnące, krwawiące, swędzące | |
- Nowe znamiona po 30. roku życia | |
- Zmiany wyglądu istniejących znamion | |
""" | |
return output, image, safety_warning | |
except Exception as e: | |
return f"❌ Błąd podczas analizy: {str(e)}", None, "" | |
# Utwórz zaawansowany interfejs Gradio | |
with gr.Blocks(theme=gr.themes.Soft(), title="🔬 Klasyfikator Raka Skóry") as demo: | |
gr.Markdown(""" | |
# 🔬 Klasyfikator Zmian Skórnych - Detekcja Raka Skóry | |
**Zaawansowana analiza AI wykrywająca 8 typów zmian skórnych** | |
Wgraj zdjęcie zmiany skórnej, a aplikacja przeanalizuje: | |
- Czerniak (Melanoma) 🔴 | |
- Rak podstawnokomórkowy 🔴 | |
- Rak płaskonabłonkowy 🔴 | |
- Rogowacenie słoneczne 🟡 | |
- Znamiona i inne łagodne zmiany 🟢 | |
""") | |
with gr.Row(): | |
with gr.Column(): | |
image_input = gr.Image( | |
type="pil", | |
label="📸 Wgraj zdjęcie zmiany skórnej", | |
height=400 | |
) | |
analyze_btn = gr.Button( | |
"🔍 ANALIZUJ ZMIANĘ SKÓRNĄ", | |
variant="primary", | |
size="lg" | |
) | |
with gr.Column(): | |
result_output = gr.Markdown( | |
label="🔎 Wynik analizy", | |
value="Wgraj zdjęcie i kliknij 'Analizuj' aby rozpocząć" | |
) | |
with gr.Row(): | |
uploaded_image = gr.Image( | |
label="📷 Przesłane zdjęcie", | |
height=300 | |
) | |
safety_output = gr.Markdown( | |
label="⚠️ Ostrzeżenia bezpieczeństwa" | |
) | |
# Obsługa kliknięcia | |
analyze_btn.click( | |
fn=analyze_skin, | |
inputs=[image_input], | |
outputs=[result_output, uploaded_image, safety_output] | |
) | |
# Przykłady użycia | |
gr.Markdown(""" | |
## 📋 Instrukcje użycia: | |
1. **Wgraj zdjęcie** - najlepiej wysokiej jakości, dobrze oświetlone | |
2. **Kliknij 'Analizuj'** - poczekaj na wynik AI | |
3. **Sprawdź wynik** - poziom ryzyka i prawdopodobieństwa | |
4. **Przeczytaj zalecenia** - czy potrzebna konsultacja lekarska | |
## 🎯 Aplikacja analizuje 8 typów zmian: | |
- 🔴 **Wysokie ryzyko:** Czerniak, Rak podstawnokomórkowy, Rak płaskonabłonkowy | |
- 🟡 **Średnie ryzyko:** Rogowacenie słoneczne | |
- 🟢 **Niskie ryzyko:** Znamiona, Włókniak skóry, Rogowacenie łojotokowe | |
""") | |
if __name__ == "__main__": | |
demo.launch(share=True) |