Spaces:
Sleeping
Sleeping
File size: 2,457 Bytes
782e635 | 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 | """
Result Card Components for DermaScan AI
"""
import streamlit as st
TIER_ICONS = {
"CANCER": "π΄",
"PRE-CANCER": "π‘",
"BENIGN": "π’",
"DISEASE": "π΅",
}
def render_severity_banner(result):
"""Render the severity banner"""
severity = result.get("severity", "LOW").lower()
tagline = result.get("tagline", "Analysis Complete")
action = result.get("action", "Consult a doctor")
severity_emoji = {
"critical": "π¨",
"high": "β οΈ",
"medium": "β‘",
"low": "β
"
}.get(severity, "βΉοΈ")
st.markdown(
f'<div class="severity-banner banner-{severity}">'
f"<h2>{severity_emoji} {tagline}</h2>"
f"<h3>π {action}</h3>"
f"</div>",
unsafe_allow_html=True,
)
def render_metrics(result):
"""Render the key metrics cards"""
c1, c2, c3 = st.columns(3)
conf = result["confidence"]
conf_color = "#10b981" if conf > 0.7 else "#f59e0b" if conf > 0.4 else "#ef4444"
conf_emoji = "π―" if conf > 0.7 else "β‘" if conf > 0.4 else "β οΈ"
tier = result.get("tier", "UNKNOWN")
tier_icon = TIER_ICONS.get(tier, "βͺ")
tier_color = {
"CANCER": "#ef4444",
"PRE-CANCER": "#f59e0b",
"BENIGN": "#10b981",
"DISEASE": "#3b82f6",
}.get(tier, "#94a3b8")
with c1:
st.markdown(
f'<div class="metric-card">'
f'<div class="label">Confidence Score</div>'
f'<div class="value" style="color:{conf_color};">{conf_emoji} {conf:.1%}</div>'
f'<div class="sublabel">{result.get("confidence_level", "")}</div>'
f"</div>",
unsafe_allow_html=True,
)
with c2:
st.markdown(
f'<div class="metric-card">'
f'<div class="label">Classification</div>'
f'<div class="value" style="color:{tier_color};">{tier_icon} {tier}</div>'
f'<div class="sublabel">{result.get("severity", "")} Severity</div>'
f"</div>",
unsafe_allow_html=True,
)
with c3:
st.markdown(
f'<div class="metric-card">'
f'<div class="label">Diagnosis</div>'
f'<div class="value" style="font-size:1.3rem;color:#3b82f6;">π¬ {result["predicted_class"]}</div>'
f'<div class="sublabel">AI Prediction</div>'
f"</div>",
unsafe_allow_html=True,
)
|