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.") | |