mgbam's picture
Update app.py
8be8858 verified
raw
history blame
4.6 kB
import streamlit as st
from transformers import pipeline
from PIL import Image
import requests
# =======================
# Caching the Model
# =======================
@st.cache_resource
def load_model():
"""
Load the pre-trained skin cancer classification model.
Cached to prevent reloading on every app interaction.
"""
return pipeline("image-classification", model="Anwarkh1/Skin_Cancer-Image_Classification")
model = load_model()
# =======================
# Functionality: Classify Skin Cancer
# =======================
def classify_skin_cancer(image):
results = model(image)
label = results[0]['label']
confidence = results[0]['score']
explanation = f"The model predicts **{label}** with a confidence of {confidence:.2%}."
return label, confidence, explanation
# =======================
# Functionality: Fetch Cancer Research Papers
# =======================
@st.cache_data
def fetch_cancer_research():
"""
Fetch the latest research papers related to skin cancer.
Cached to avoid repeated API calls.
"""
api_url = "https://api.semanticscholar.org/graph/v1/paper/search"
params = {
"query": "skin cancer research",
"fields": "title,abstract,url",
"limit": 5
}
response = requests.get(api_url, params=params)
if response.status_code == 200:
papers = response.json().get("data", [])
summaries = []
for paper in papers:
title = paper.get("title", "No Title")
abstract = paper.get("abstract", "No Abstract")
url = paper.get("url", "No URL")
summaries.append(f"**{title}**\n\n{abstract}\n\n[Read More]({url})")
return "\n\n---\n\n".join(summaries)
else:
return "Error fetching research papers. Please try again later."
# =======================
# Streamlit Page Config
# =======================
st.set_page_config(
page_title="AI-Powered Skin Cancer Detection",
page_icon="🩺",
layout="wide",
initial_sidebar_state="expanded"
)
st.sidebar.header("Navigation")
app_mode = st.sidebar.radio(
"Choose a feature",
["πŸ” Skin Cancer Classification", "πŸ“„ Latest Research Papers", "ℹ️ About the Model"]
)
# =======================
# Skin Cancer Classification
# =======================
if app_mode == "πŸ” Skin Cancer Classification":
st.title("πŸ” Skin Cancer Classification")
st.write(
"Upload an image of the skin lesion, and the AI model will classify it as one of several types, "
"such as melanoma, basal cell carcinoma, or benign keratosis-like lesions."
)
uploaded_image = st.file_uploader("Upload a skin lesion image", type=["png", "jpg", "jpeg"])
if uploaded_image:
image = Image.open(uploaded_image).convert('RGB')
st.image(image, caption="Uploaded Image", use_column_width=True)
# Perform classification
st.write("Classifying...")
label, confidence, explanation = classify_skin_cancer(image)
# Display results
st.markdown(f"### **Prediction**: {label}")
st.markdown(f"### **Confidence**: {confidence:.2%}")
st.markdown(f"### **Explanation**: {explanation}")
# =======================
# Latest Research Papers
# =======================
elif app_mode == "πŸ“„ Latest Research Papers":
st.title("πŸ“„ Latest Research Papers")
st.write(
"Fetch the latest research papers on skin cancer to stay updated on recent findings and innovations."
)
if st.button("Fetch Papers"):
with st.spinner("Fetching research papers..."):
summaries = fetch_cancer_research()
st.markdown(summaries)
# =======================
# About the Model
# =======================
elif app_mode == "ℹ️ About the Model":
st.title("ℹ️ About the Skin Cancer Detection Model")
st.markdown("""
- **Model Architecture:** Vision Transformer (ViT)
- **Trained On:** Skin Cancer Dataset (ISIC)
- **Classes:**
- Benign keratosis-like lesions
- Basal cell carcinoma
- Actinic keratoses
- Vascular lesions
- Melanocytic nevi
- Melanoma
- Dermatofibroma
- **Performance Metrics:**
- **Validation Accuracy:** 96.95%
- **Train Accuracy:** 96.14%
- **Loss Function:** Cross-Entropy
""")
# =======================
# Footer
# =======================
st.sidebar.info("""
Developed by **[mgbam](https://huggingface.co/mgbam)**
This app leverages state-of-the-art AI models for skin cancer detection and research insights.
""")