Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import AutoModelForImageClassification, AutoImageProcessor | |
from PIL import Image | |
import torch | |
# Set the title of the application | |
st.title("Dermavision") | |
st.write( | |
"Upload an image of the affected skin area, and the app will classify the disease and provide analysis." | |
) | |
# Cache model and processor loading | |
def load_model(): | |
repo_name = "Jayanth2002/dinov2-base-finetuned-SkinDisease" | |
processor = AutoImageProcessor.from_pretrained(repo_name) | |
model = AutoModelForImageClassification.from_pretrained(repo_name) | |
return model, processor | |
model, processor = load_model() | |
# Define the class names | |
class_names = [ | |
'Basal Cell Carcinoma', 'Darier_s Disease', 'Epidermolysis Bullosa Pruriginosa', | |
'Hailey-Hailey Disease', 'Herpes Simplex', 'Impetigo', 'Larva Migrans', | |
'Leprosy Borderline', 'Leprosy Lepromatous', 'Leprosy Tuberculoid', 'Lichen Planus', | |
'Lupus Erythematosus Chronicus Discoides', 'Melanoma', 'Molluscum Contagiosum', | |
'Mycosis Fungoides', 'Neurofibromatosis', 'Papilomatosis Confluentes And Reticulate', | |
'Pediculosis Capitis', 'Pityriasis Rosea', 'Porokeratosis Actinic', 'Psoriasis', | |
'Tinea Corporis', 'Tinea Nigra', 'Tungiasis', 'actinic keratosis', 'dermatofibroma', | |
'nevus', 'pigmented benign keratosis', 'seborrheic keratosis', 'squamous cell carcinoma', | |
'vascular lesion' | |
] | |
# Define reasons, treatments, and home remedies for each disease | |
# (This section is omitted for brevity but should remain unchanged from your original code) | |
# Function to classify the image | |
def classify_image(image): | |
inputs = processor(image.convert("RGB"), return_tensors="pt") | |
with torch.no_grad(): | |
outputs = model(**inputs) | |
predicted_class_idx = outputs.logits.argmax(-1).item() | |
confidence_score = torch.nn.functional.softmax(outputs.logits, dim=-1).max().item() | |
predicted_label = class_names[predicted_class_idx] | |
return predicted_label, confidence_score | |
# File uploader for user image | |
uploaded_file = st.file_uploader("Upload a skin image", type=["jpg", "jpeg", "png"]) | |
if uploaded_file is not None: | |
# Display the uploaded image | |
image = Image.open(uploaded_file) | |
st.image(image, caption="Uploaded Image", use_column_width=True) | |
# Analyze the image | |
with st.spinner("Analyzing the image..."): | |
predicted_label, confidence_score = classify_image(image) | |
if predicted_label not in disease_analysis: | |
st.error("Unable to classify the disease. Please upload a clearer image or consult a dermatologist.") | |
else: | |
reason = disease_analysis.get(predicted_label, {}).get("reason", "Reason unknown.") | |
treatment = disease_analysis.get(predicted_label, {}).get("treatment", "Consult a dermatologist.") | |
home_remedy = disease_analysis.get(predicted_label, {}).get("home_remedy", "No specific home remedies available.") | |
# Display the results | |
st.success("Analysis Complete!") | |
st.markdown(f"### **Classification**: {predicted_label}") | |
st.markdown(f"**Confidence**: {confidence_score:.2%}") | |
st.markdown(f"**Reason**: {reason}") | |
st.markdown(f"**Treatment**: {treatment}") | |
st.markdown(f"**Home Remedy**: {home_remedy}") | |
st.markdown("**Note:** Please consult a doctor for final recommendations and a detailed treatment plan.") | |
# Optional feedback form | |
st.markdown("---") | |
st.header("We Value Your Feedback!") | |
feedback = st.text_area("Please share your feedback to help us improve:") | |
if st.button("Submit Feedback"): | |
if feedback: | |
st.success("Thank you for your feedback!") | |
else: | |
st.warning("Feedback cannot be empty.") | |